{"record":{"id":"88b2b3eba4ec05aa","repo":"flowable/flowable-engine","slug":"this-getclass-error-element-is-not-a-caseele","errorCode":null,"errorMessage":"${this.getClass()} error: element is not a CaseElement : ${baseElement.getClass()}","messagePattern":"(.+?) error: element is not a CaseElement : (.+?)","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/CaseElementXmlConverter.java","lineNumber":34,"sourceCode":"\nimport org.flowable.cmmn.model.BaseElement;\nimport org.flowable.cmmn.model.CaseElement;\nimport org.flowable.cmmn.model.PlanFragment;\nimport org.flowable.common.engine.api.FlowableException;\n\n/**\n * @author Joram Barrez\n */\npublic abstract class CaseElementXmlConverter extends BaseCmmnXmlConverter {\n    \n    @Override\n    public abstract String getXMLElementName();\n    \n    @Override\n    public BaseElement convertToCmmnModel(XMLStreamReader xtr, ConversionHelper conversionHelper) {\n        BaseElement baseElement = super.convertToCmmnModel(xtr, conversionHelper);\n        if (baseElement != null && !(baseElement instanceof CaseElement)) {\n            throw new FlowableException(this.getClass() + \" error: element is not a CaseElement : \" + baseElement.getClass());\n        }\n        CaseElement caseElement = (CaseElement) baseElement;\n        if (caseElement != null) {\n            conversionHelper.addCaseElement(caseElement);\n            if (!(caseElement instanceof PlanFragment)) {\n                caseElement.setParent(conversionHelper.getCurrentPlanFragment());\n            } \n        }\n        return caseElement;\n    }\n    \n}\n","sourceCodeStart":16,"sourceCodeEnd":47,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-converter/src/main/java/org/flowable/cmmn/converter/CaseElementXmlConverter.java#L16-L47","documentation":"CaseElementXmlConverter wraps conversion of case-scoped XML elements. After the generic conversion, if the resulting BaseElement is not a CaseElement, the converter cannot attach it to the case and throws FlowableException naming the XML converter class and offending element type.","triggerScenarios":"A concrete subclass converter expects a case-level element but the parsed element from super.convertToCmmnModel resolves to a non-CaseElement type — e.g. misplaced/nested XML elements or a converter applied to the wrong XML tag.","commonSituations":"Malformed CMMN XML where a case element is nested inside an incompatible parent; custom/patched converters; schema drift between the XSD and converter expectations.","solutions":["Fix the CMMN XML so the element appears where a CaseElement is valid","Validate the document against the CMMN 1.1 XSD before conversion","If writing a custom converter, ensure it is only registered for XML elements producing CaseElement instances","Inspect the logged class names to identify which element and converter mismatch"],"exampleFix":"// before\n<planFragment>\n  <caseTask .../> <!-- case-scoped element misplaced in a fragment -->\n</planFragment>\n// after\n<case>\n  <caseTask .../>\n</case>","handlingStrategy":"validation","validationCode":"// validate placement of case-scoped elements before conversion\nboolean validPlacement = isCaseScopedElementAllowedAt(xmlElementPath);\nif (!validPlacement) throw new IllegalArgumentException(\"Element not allowed at this location in the case model\");","typeGuard":"if (baseElement instanceof CaseElement caseElement) { conversionHelper.addCaseElement(caseElement); } else { throw new IllegalArgumentException(\"Expected CaseElement, got \" + baseElement.getClass()); }","tryCatchPattern":"try { converter.convertToCmmnModel(xtr, helper); } catch (FlowableException e) { throw new DeploymentException(\"Non-CaseElement found by \" + e.getMessage(), e); }","preventionTips":["Validate CMMN XML against the 1.1 XSD before conversion","Do not nest case-scoped elements inside plan fragments or other incompatible parents","When writing custom converters, only register them for elements that yield CaseElement instances"],"tags":["cmmn","xml-converter","type-mismatch"],"backgroundTag":"type-mismatch","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}