{"record":{"id":"fcf5b558927ddf92","repo":"flowable/flowable-engine","slug":"e-getmessage-fcf5b5","errorCode":null,"errorMessage":"${e.getMessage()}","messagePattern":"\\$\\{e\\.getMessage\\(\\)\\}","errorType":"http","errorClass":"FlowableException","httpStatus":500,"severity":"error","filePath":"modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/DeploymentCollectionResource.java","lineNumber":246,"sourceCode":"            }\n\n            if (tenantId != null) {\n                deploymentBuilder.tenantId(tenantId);\n            }\n\n            if (restApiInterceptor != null) {\n                restApiInterceptor.enhanceDeployment(deploymentBuilder);\n            }\n\n            CmmnDeployment deployment = deploymentBuilder.deploy();\n\n            return restResponseFactory.createDeploymentResponse(deployment);\n\n        } catch (Exception e) {\n            if (e instanceof FlowableException) {\n                throw (FlowableException) e;\n            }\n            throw new FlowableException(e.getMessage(), e);\n        }\n    }\n\n    public Map<String, String> splitQueryString(String queryString) {\n        if (StringUtils.isEmpty(queryString)) {\n            return Collections.emptyMap();\n        }\n        Map<String, String> queryMap = new HashMap<>();\n        for (String param : queryString.split(\"&\")) {\n            queryMap.put(StringUtils.substringBefore(param, \"=\"), decode(StringUtils.substringAfter(param, \"=\")));\n        }\n        return queryMap;\n    }\n\n    protected String decode(String string) {\n        if (string != null) {\n            return URLDecoder.decode(string, StandardCharsets.UTF_8);\n        }","sourceCodeStart":228,"sourceCodeEnd":264,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/DeploymentCollectionResource.java#L228-L264","documentation":"This is the catch-all wrapper at the end of uploadDeployment: any exception during deployment creation that is not already a FlowableException is rethrown as FlowableException with the original exception's message. The message therefore reflects the underlying cause (I/O errors, XML parse failures, DB errors, etc.).","triggerScenarios":"uploadDeployment fails while reading the uploaded stream, parsing the CMMN XML, building the deployment, or persisting it — with a non-Flowable exception (IOException, SAXParseException, SQLIntegrityConstraintViolationException, etc.).","commonSituations":"Malformed CMMN XML failing XSD validation, corrupted .zip archives, network interruption during upload, database constraint violations or connection loss, and file streams already consumed by earlier filters.","solutions":["Read the wrapped cause message (the FlowableException message is e.getMessage() of the root cause) and fix the underlying issue — often an XML syntax/XSD error in the deployed file.","Validate the CMMN XML locally (XSD validation / Flowable Modeler) before uploading.","Check database connectivity and that the Flowable schema version matches the REST module version.","Inspect server logs for the full stack trace to identify the root exception type."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"validate CMMN XML against the Flowable XSD before upload","typeGuard":null,"tryCatchPattern":"try {\n  uploadDeployment(file);\n} catch (FlowableException e) {\n  log.error(\"Deployment failed: \" + e.getMessage(), e); // message wraps root cause\n}","preventionTips":["Validate CMMN XML (XSD) before upload.","Keep Flowable REST module and engine on the same version and schema.","Check DB connectivity for deployment persistence."],"tags":["rest-api","wrapped-exception","deployment","flowable"],"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-14T05:17:10.506Z"}