{"record":{"id":"c167e0160b91ba04","repo":"flowable/flowable-engine","slug":"invalid-reference-in-diagram-interchange-definitio","errorCode":null,"errorMessage":"Invalid reference in diagram interchange definition: could not find {}","messagePattern":"Invalid reference in diagram interchange definition: could not find (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/parser/CmmnParserImpl.java","lineNumber":149,"sourceCode":"\n        if (!cmmnModel.getLocationMap().isEmpty()) {\n\n            List<String> planModelIds = new ArrayList<>();\n            for (Case caseObject : cmmnModel.getCases()) {\n                planModelIds.add(caseObject.getPlanModel().getId());\n            }\n\n            // Verify if all referenced elements exist\n            for (String cmmnReference : cmmnModel.getLocationMap().keySet()) {\n\n                if (planModelIds.contains(cmmnReference)) {\n                    continue;\n                }\n\n                if (cmmnModel.findPlanItem(cmmnReference) == null && cmmnModel.getCriterion(cmmnReference) == null && \n                        cmmnModel.findTextAnnotation(cmmnReference) == null) {\n                    \n                    logger.warn(\"Invalid reference in diagram interchange definition: could not find {}\", cmmnReference);\n                }\n            }\n\n            for (Case caseObject : cmmnModel.getCases()) {\n                CaseDefinitionEntity caseDefinition = getCaseDefinition(caseObject.getId(), caseDefinitions);\n                if (caseDefinition != null) {\n                    caseDefinition.setHasGraphicalNotation(true);\n                }\n            }\n        }\n    }\n\n    public CaseDefinitionEntity getCaseDefinition(String caseDefinitionKey, List<CaseDefinitionEntity> caseDefinitions) {\n        for (CaseDefinitionEntity caseDefinition : caseDefinitions) {\n            if (caseDefinition.getKey().equals(caseDefinitionKey)) {\n                return caseDefinition;\n            }\n        }","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/parser/CmmnParserImpl.java#L131-L167","documentation":"processDI iterates the diagram interchange (DI) section of the CMMN XML, which references model element ids for positioning shapes. When a DI shape references an id that resolves to no plan item, criterion, or text annotation in the model, the reference cannot be visualized, so the parser logs this warning and drops the shape. Deployment continues.","triggerScenarios":"A BPMNDiagram/BPMNPlane DI entry in the CMMN XML points at an element id (cmmnReference) absent from the model — typically because the referenced plan item/criterion/annotation was deleted or renamed in the modeler while the DI section kept the stale id.","commonSituations":"Hand-editing CMMN XML and changing element ids without updating the DI section; models round-tripped between tools where ids are regenerated; diff-merged XML where one side removed elements.","solutions":["Find the logged cmmnReference id in the XML's DI section and delete the stale shape/edge entry","Re-export the diagram from the Flowable modeler so DI entries are regenerated against current element ids","Synchronize ids: if you rename an element, update every DI bpmnElement reference to match","If generated programmatically, only add DiagramElement entries for ids present in the CmmnModel"],"exampleFix":"<!-- before: stale DI reference -->\n<cmmnShape id=\"Shape_oldTask\" cmmnElementRef=\"oldTask\" ... />\n<!-- after: removed, or ref updated to an existing id -->\n<cmmnShape id=\"Shape_renamedTask\" cmmnElementRef=\"renamedTask\" ... />","handlingStrategy":"validation","validationCode":"Set<String> modelIds = collectAllElementIds(cmmnModel); // plan items + criteria + annotations\ncmmnModel.getDiagrams().stream()\n    .flatMap(d -> d.getShapes().stream())\n    .map(s -> s.getCmmnElementRef())\n    .filter(ref -> ref != null && !modelIds.contains(ref))\n    .forEach(ref -> log.warn(\"Stale DI reference: {}\", ref));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never hand-edit element ids in CMMN XML without updating DI refs","Regenerate diagrams from the modeler after model changes","Add a pre-deploy check comparing DI cmmnElementRef values against model ids"],"tags":["cmmn","diagram-interchange","stale-reference"],"backgroundTag":"resource-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}