{"record":{"id":"44dcab765ae5d370","repo":"flowable/flowable-engine","slug":"invalid-multiple-sources-this-streamsource-and-44dcab","errorCode":null,"errorMessage":"invalid: multiple sources ${this.streamSource} and ${streamSource}","messagePattern":"invalid: multiple sources (.+?) and (.+?)","errorType":"exception","errorClass":"ActivitiIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/BpmnParse.java","lineNumber":274,"sourceCode":"    public BpmnParse sourceResource(String resource, ClassLoader classLoader) {\n        if (name == null) {\n            name(resource);\n        }\n        setStreamSource(new ResourceStreamSource(resource, classLoader));\n        return this;\n    }\n\n    public BpmnParse sourceString(String string) {\n        if (name == null) {\n            name(\"string\");\n        }\n        setStreamSource(new StringStreamSource(string));\n        return this;\n    }\n\n    protected void setStreamSource(StreamSource streamSource) {\n        if (this.streamSource != null) {\n            throw new ActivitiIllegalArgumentException(\"invalid: multiple sources \" + this.streamSource + \" and \" + streamSource);\n        }\n        this.streamSource = streamSource;\n    }\n\n    /**\n     * Parses the 'definitions' root element\n     */\n    protected void transformProcessDefinitions() {\n        sequenceFlows = new HashMap<>();\n        for (Process process : bpmnModel.getProcesses()) {\n            if (process.isExecutable()) {\n                bpmnParserHandlers.parseElement(this, process);\n            }\n        }\n\n        if (!processDefinitions.isEmpty()) {\n            processDI();\n        }","sourceCodeStart":256,"sourceCodeEnd":292,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/BpmnParse.java#L256-L292","documentation":"A single BpmnParse instance can only have one input source. setStreamSource throws ActivitiIllegalArgumentException if a source (stream, string, resource, or URL) was already set on this parser instance, to prevent ambiguous input.","triggerScenarios":"Calling setStreamSource (directly or via sourceString/sourceInputStream/sourceResource/sourceUrl) twice on the same BpmnParse object.","commonSituations":"Reusing a BpmnParse/parse helper object across multiple deployments in a loop; chaining two source-setting calls by mistake; copy-pasted parse setup code that sets both a resource and a string.","solutions":["Create a fresh BpmnParse instance (via processEngineConfiguration.getBpmnParser().createParse()) for each source you parse","Remove the duplicate source-setting call so exactly one source is configured per parse","If parsing many resources, loop and build a new parse per iteration instead of reusing the object"],"exampleFix":"// before (reuse)\nBpmnParse parse = parser.createParse().sourceResource(a);\nparse.sourceString(xml); // throws\n// after\nBpmnParse parse = parser.createParse().sourceResource(a);\nBpmnParse parse2 = parser.createParse().sourceString(xml);","handlingStrategy":"type-guard","validationCode":"// guard before reuse\nif (parse != null && alreadyConfigured) {\n  parse = processEngineConfiguration.getBpmnParser().createParse();\n}","typeGuard":"static boolean canSetSource(BpmnParse parse) {\n  return parse != null; // treat one parse per source: never set two sources\n}","tryCatchPattern":"try {\n  parse.sourceString(xml);\n} catch (ActivitiIllegalArgumentException e) {\n  if (e.getMessage().startsWith(\"invalid: multiple sources\")) {\n    parse = parser.createParse().sourceString(xml); // fresh parse\n  }\n}","preventionTips":["Create a new BpmnParse per document; never reuse parse objects","Do not chain multiple source*() calls on the same instance","In loops, instantiate the parser/parse inside the loop body"],"tags":["bpmn","parsing","state","argument"],"backgroundTag":"invalid-state-transition","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T16:30:33.424Z"}