flowable/flowable-engine · error · FlowableImageException
Error while generating case image
Error message
Error while generating case image
What it means
DefaultDecisionRequirementsDiagramCanvas.generateImage wraps any IOException from ImageIO.write into a FlowableImageException with message 'Error while generating case image'. It signals the buffered diagram image could not be encoded into the requested image format.
Source
Thrown at modules/flowable-dmn-image-generator/src/main/java/org/flowable/dmn/image/impl/DefaultDecisionRequirementsDiagramCanvas.java:201
LOGGER.warn("Could not load image for decision requirements diagram creation: {}", e.getMessage());
}
}
/**
* Generates an image of what currently is drawn on the canvas.
*
* Throws an {@link FlowableImageException} when {@link #close()} is already called.
*/
public InputStream generateImage(String imageType) {
if (closed) {
throw new FlowableImageException("CaseDiagramGenerator already closed");
}
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
ImageIO.write(decisionRequirementsDiagram, imageType, out);
return new ByteArrayInputStream(out.toByteArray());
} catch (IOException e) {
throw new FlowableImageException("Error while generating case image", e);
}
}
/**
* Generates an image of what currently is drawn on the canvas.
*
* Throws an {@link FlowableImageException} when {@link #close()} is already called.
*/
public BufferedImage generateBufferedImage(String imageType) {
if (closed) {
throw new FlowableImageException("DecisionRequirementsDiagramGenerator already closed");
}
// Try to remove white space
minX = (minX <= 5) ? 5 : minX;
minY = (minY <= 5) ? 5 : minY;
BufferedImage imageToSerialize = decisionRequirementsDiagram;
imageToSerialize = decisionRequirementsDiagram.getSubimage(minX - 5, minY - 5, canvasWidth - minX + 5, canvasHeight - minY + 5);View on GitHub (pinned to d6d39ce1c6)
Solutions
- Use a supported imageType such as "png", "jpeg", or "gif".
- Check ImageIO.getWriterFormatNames() on the target JVM to confirm available formats.
- Inspect the wrapped IOException cause for the underlying encoding failure.
Example fix
// before
InputStream is = canvas.generateImage("jpg");
// after
InputStream is = canvas.generateImage("jpeg"); Defensive patterns
Strategy: validation
Validate before calling
boolean supported = java.util.Arrays.asList(javax.imageio.ImageIO.getWriterFormatNames()).contains(imageType.toLowerCase());
if (!supported) throw new IllegalArgumentException("Unsupported image type: " + imageType); Try / catch
try {
InputStream is = canvas.generateImage(imageType);
} catch (FlowableImageException e) {
logger.error("Image encoding failed for type {}", imageType, e.getCause());
} Prevention
- Use "png", "jpeg", or "gif" as imageType
- Check ImageIO.getWriterFormatNames() on the target JVM
- Log the wrapped cause for diagnosis
When it happens
Trigger: Calling generateImage with an image type that has no ImageIO writer registered (e.g. unsupported string), or an I/O failure while writing the ByteArrayOutputStream.
Common situations: Passing a typo'd imageType like 'jpg ' or 'JPG' on a JVM without the corresponding writer; constrained environments missing image codecs.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- Error while generating case image
- Error exporting diagram
- problem retrieving flowable.dmn.cfg.xml resources on the cla
- problem retrieving flowable-dmn-context.xml resources on the
- Provided decision definition must have both key and resource
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/b2dd5a8dcbea5fd5.
Report an issue: GitHub.