{"record":{"id":"b2dd5a8dcbea5fd5","repo":"flowable/flowable-engine","slug":"error-while-generating-case-image-b2dd5a","errorCode":null,"errorMessage":"Error while generating case image","messagePattern":"Error while generating case image","errorType":"exception","errorClass":"FlowableImageException","httpStatus":null,"severity":"error","filePath":"modules/flowable-dmn-image-generator/src/main/java/org/flowable/dmn/image/impl/DefaultDecisionRequirementsDiagramCanvas.java","lineNumber":201,"sourceCode":"            LOGGER.warn(\"Could not load image for decision requirements diagram creation: {}\", e.getMessage());\n        }\n    }\n\n    /**\n     * Generates an image of what currently is drawn on the canvas.\n     *\n     * Throws an {@link FlowableImageException} when {@link #close()} is already called.\n     */\n    public InputStream generateImage(String imageType) {\n        if (closed) {\n            throw new FlowableImageException(\"CaseDiagramGenerator already closed\");\n        }\n\n        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {\n            ImageIO.write(decisionRequirementsDiagram, imageType, out);\n            return new ByteArrayInputStream(out.toByteArray());\n        } catch (IOException e) {\n            throw new FlowableImageException(\"Error while generating case image\", e);\n        }\n    }\n\n    /**\n     * Generates an image of what currently is drawn on the canvas.\n     *\n     * Throws an {@link FlowableImageException} when {@link #close()} is already called.\n     */\n    public BufferedImage generateBufferedImage(String imageType) {\n        if (closed) {\n            throw new FlowableImageException(\"DecisionRequirementsDiagramGenerator already closed\");\n        }\n\n        // Try to remove white space\n        minX = (minX <= 5) ? 5 : minX;\n        minY = (minY <= 5) ? 5 : minY;\n        BufferedImage imageToSerialize = decisionRequirementsDiagram;\n        imageToSerialize = decisionRequirementsDiagram.getSubimage(minX - 5, minY - 5, canvasWidth - minX + 5, canvasHeight - minY + 5);","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-dmn-image-generator/src/main/java/org/flowable/dmn/image/impl/DefaultDecisionRequirementsDiagramCanvas.java#L183-L219","documentation":"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.","triggerScenarios":"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.","commonSituations":"Passing a typo'd imageType like 'jpg ' or 'JPG' on a JVM without the corresponding writer; constrained environments missing image codecs.","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."],"exampleFix":"// before\nInputStream is = canvas.generateImage(\"jpg\");\n// after\nInputStream is = canvas.generateImage(\"jpeg\");","handlingStrategy":"validation","validationCode":"boolean supported = java.util.Arrays.asList(javax.imageio.ImageIO.getWriterFormatNames()).contains(imageType.toLowerCase());\nif (!supported) throw new IllegalArgumentException(\"Unsupported image type: \" + imageType);","typeGuard":null,"tryCatchPattern":"try {\n    InputStream is = canvas.generateImage(imageType);\n} catch (FlowableImageException e) {\n    logger.error(\"Image encoding failed for type {}\", imageType, e.getCause());\n}","preventionTips":["Use \"png\", \"jpeg\", or \"gif\" as imageType","Check ImageIO.getWriterFormatNames() on the target JVM","Log the wrapped cause for diagnosis"],"tags":["dmn","diagram","image-generation","io"],"backgroundTag":"internal-invariant-violation","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T21:17:11.552Z"}