{"record":{"id":"bd6e7dc33a499c21","repo":"flowable/flowable-engine","slug":"cannot-convert-mapping-of-type-mapping-getclass","errorCode":null,"errorMessage":"Cannot convert mapping of type '${mapping.getClass()}'","messagePattern":"Cannot convert mapping of type '(.+?)'","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine/src/main/java/org/flowable/engine/migration/ProcessInstanceMigrationDocumentConverter.java","lineNumber":151,"sourceCode":"    }\n\n    public static String convertToJsonString(ProcessInstanceMigrationDocument processInstanceMigrationDocument) {\n        JsonNode jsonNode = convertToJson(processInstanceMigrationDocument);\n        ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter();\n        try {\n            return objectWriter.writeValueAsString(jsonNode);\n        } catch (JacksonException e) {\n            return jsonNode.toString();\n        }\n    }\n\n    protected static ArrayNode convertToJsonActivityMigrationMappings(List<? extends ActivityMigrationMapping> activityMigrationMappings) {\n        ArrayNode mappingsArray = objectMapper.createArrayNode();\n\n        for (ActivityMigrationMapping mapping : activityMigrationMappings) {\n            BaseActivityMigrationMappingConverter mappingConverter = activityMigrationMappingConverters.get(mapping.getClass());\n            if (mappingConverter == null) {\n                throw new FlowableException(\"Cannot convert mapping of type '\" + mapping.getClass() + \"'\");\n            }\n            ObjectNode mappingNode = mappingConverter.convertToJson(mapping, objectMapper);\n            mappingsArray.add(mappingNode);\n        }\n\n        return mappingsArray;\n    }\n    \n    protected static ArrayNode convertToJsonEnableActivityMappings(List<? extends EnableActivityMapping> enableActivityMappings) {\n        ArrayNode mappingsArray = objectMapper.createArrayNode();\n\n        for (EnableActivityMapping mapping : enableActivityMappings) {\n            ObjectNode mappingNode = mappingsArray.addObject();\n            mappingNode.put(ProcessInstanceMigrationDocumentConstants.ACTIVITY_ID_JSON_PROPERTY, mapping.getActivityId());\n        }\n\n        return mappingsArray;\n    }","sourceCodeStart":133,"sourceCodeEnd":169,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine/src/main/java/org/flowable/engine/migration/ProcessInstanceMigrationDocumentConverter.java#L133-L169","documentation":"Thrown during conversion of a ProcessInstanceMigrationDocument to JSON when an ActivityMigrationMapping subclass has no registered converter in activityMigrationMappingConverters. Flowable only knows how to serialize mapping types it registered; unknown mapping types cannot be converted.","triggerScenarios":"Calling convertToJsonActivityMigrationMappings (via mappingNodes) with a List of ActivityMigrationMapping whose concrete class is not in the converter map — typically a custom ActivityMigrationMapping subclass added by user code.","commonSituations":"Extending the migration DSL with a custom mapping type and forgetting to register a converter; a Flowable upgrade introducing new mapping types used with an older converter map; passing the wrong mapping list to the serializer.","solutions":["Use only standard mapping types created via ProcessInstanceMigrationBuilder / ActivityMigrationMappingOptions.","If a custom mapping type is required, register a matching BaseActivityMigrationMappingConverter subclass in activityMigrationMappingConverters before serializing.","Log and inspect mapping.getClass() to identify the unregistered type.","Check that the Flowable version producing the mappings matches the version doing the conversion."],"exampleFix":"// before\nmappings.add(new MyCustomMapping(\"fromAct\", \"toAct\"));\nconverter.convertToMigrationDocument(document); // throws\n\n// after\nmappings.add(ActivityMigrationMappingOptions.forName(\"fromAct\").mapTo(\"toAct\")); // standard supported mapping","handlingStrategy":"validation","validationCode":"if (!ProcessInstanceMigrationDocumentConverter.isActivityMappingSupported(mapping.getClass())) { throw new IllegalArgumentException(\"Unsupported mapping type: \" + mapping.getClass()); }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use only mapping types produced by ActivityMigrationMappingOptions","Register converters for any custom mapping subclasses","Keep Flowable versions consistent between producer and consumer of documents"],"tags":["migration","serialization","process-instance-migration"],"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"}