{"record":{"id":"9fc140d6ac5b5c3c","repo":"flowable/flowable-engine","slug":"could-not-find-matching-parse-handler-for-planitem","errorCode":null,"errorMessage":"Could not find matching parse handler for planItem '{}' with planItemDefinition '{}'. This is likely a bug.","messagePattern":"Could not find matching parse handler for planItem '(.+?)' with planItemDefinition '(.+?)'\\. This is likely a bug\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/parser/CmmnParseHandlers.java","lineNumber":61,"sourceCode":"    }\n\n    public void addHandler(CmmnParseHandler cmmnParseHandler) {\n        for (Class<? extends BaseElement> type : cmmnParseHandler.getHandledTypes()) {\n            parseHandlers\n                .computeIfAbsent(type, key -> new ArrayList<>())\n                .add(cmmnParseHandler);\n        }\n    }\n\n    public void parseElement(CmmnParser cmmnParser, CmmnParseResult cmmnParseResult, BaseElement baseElement) {\n\n        List<CmmnParseHandler> handlers = null;\n        if (baseElement instanceof PlanItem planItem) {\n            // The plan item definition defines the actual behavior\n            handlers = parseHandlers.get(planItem.getPlanItemDefinition().getClass());\n\n            if (handlers == null) {\n                LOGGER.warn(\"Could not find matching parse handler for planItem '{}' with planItemDefinition '{}'. This is likely a bug.\",\n                    baseElement.getId(), planItem.getPlanItemDefinition());\n\n            } else {\n                handlers.forEach(handler -> handler.parse(cmmnParser, cmmnParseResult, planItem)); // Note: passing plan item, NOT plan item definition\n\n            }\n\n        } else {\n            handlers = parseHandlers.get(baseElement.getClass());\n            if (handlers == null) {\n                LOGGER.warn(\"Could not find matching parse handler for '{}' this is likely a bug.\", baseElement.getId());\n\n            } else {\n                handlers.forEach(handler -> handler.parse(cmmnParser, cmmnParseResult, baseElement));\n\n            }\n\n        }","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/parser/CmmnParseHandlers.java#L43-L79","documentation":"CmmnParseHandlers.parseElement logs this warning when a PlanItem's planItemDefinition class has no registered CmmnParseHandler. The plan item is silently skipped during parsing, so its behavior is never wired — the log says 'This is likely a bug' because the engine normally registers a handler for every supported definition type.","triggerScenarios":"Parsing a CMMN XML whose plan item references a planItemDefinition type the parser has no handler for — typically a custom/unknown element type or an engine version missing handler registration for that definition class.","commonSituations":"CMMN XML using vendor extension or unsupported case task types; engine upgrade/downgrade where a handler class was added/removed; custom plan item definitions registered without a matching parse handler.","solutions":["Inspect the plan item definition in the CMMN XML and confirm the element type is supported by your Flowable version.","Upgrade/downgrade Flowable so the definition type has a registered handler.","If using custom plan item definitions, register a matching CmmnParseHandler in the CmmnEngineConfiguration.","Fix typos/namespace issues in the CMMN XML causing an unexpected definition class to be created."],"exampleFix":"// before (unsupported definition)\n<planItem id=\"pi1\"><standardEvent>complete</standardEvent><flowable:myCustomType/></planItem>\n// after\n<planItem id=\"pi1\"><standardEvent>complete</standardEvent><task isBlocking=\"true\"/></planItem>","handlingStrategy":"validation","validationCode":"// Pre-check CMMN XML only uses supported plan item definition types\nSet<String> supported = Set.of(\"task\", \"humanTask\", \"caseTask\", \"processTask\", \"decisionTask\",\n    \"eventListener\", \"userEventListener\", \"milestone\", \"stage\", \"planFragment\");\n// parse each <planItem>'s child element local-name against 'supported' before deploying","typeGuard":null,"tryCatchPattern":"null","preventionTips":["Validate CMMN XML against the Flowable-supported element set before deployment.","Keep engine and CMMN model versions aligned across upgrades.","Register parse handlers for any custom plan item definitions."],"tags":["cmmn","parser","plan-item","handler-missing"],"backgroundTag":"unsupported-operation","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"}