{"record":{"id":"13488d08d23fa1e3","repo":"flowable/flowable-engine","slug":"field-type-s-with-more-than-one-parameter-is-no","errorCode":null,"errorMessage":"Field type '%s' with more than one parameter is not supported: %S","messagePattern":"Field type '(.+?)' with more than one parameter is not supported: %S","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cxf/src/main/java/org/flowable/engine/impl/webservice/CxfWSDLImporter.java","lineNumber":234,"sourceCode":"            _importFields((JDefinedClass) parentClass, index, structure);\n        }\n        for (Entry<String, JFieldVar> entry : theClass.fields().entrySet()) {\n\n            String fieldName = entry.getKey();\n            if (fieldName.startsWith(\"_\")) {\n                if (!JJavaName.isJavaIdentifier(fieldName.substring(1))) {\n                    fieldName = fieldName.substring(1); // it was prefixed with '_' so we should use the original name.\n                }\n            }\n\n            final JType fieldType = entry.getValue().type();\n            final Class<?> fieldClass = ReflectUtil.loadClass(fieldType.boxify().erasure().fullName());\n            final Class<?> fieldParameterClass;\n            if (fieldType instanceof JClass) {\n                final JClass fieldClassType = (JClass) fieldType;\n                final List<JClass> fieldTypeParameters = fieldClassType.getTypeParameters();\n                if (fieldTypeParameters.size() > 1) {\n                    throw new FlowableException(\n                            String.format(\"Field type '%s' with more than one parameter is not supported: %S\",\n                                    fieldClassType, fieldTypeParameters));\n                } else if (fieldTypeParameters.isEmpty()) {\n                    fieldParameterClass = null;\n                } else {\n                    final JClass fieldParameterType = fieldTypeParameters.get(0);\n\n                    // Hack because JClass.fullname() doesn't return the right class fullname for a nested class to be\n                    // loaded from classloader. It should be contain \"$\" instead of \".\" as separator\n                    boolean isFieldParameterTypeNeestedClass = false;\n                    final Iterator<JDefinedClass> theClassNeestedClassIt = theClass.classes();\n                    while (theClassNeestedClassIt.hasNext() && !isFieldParameterTypeNeestedClass) {\n                        final JDefinedClass neestedType = theClassNeestedClassIt.next();\n                        if (neestedType.name().equals(fieldParameterType.name())) {\n                            isFieldParameterTypeNeestedClass = true;\n                        }\n                    }\n                    if (isFieldParameterTypeNeestedClass) {","sourceCodeStart":216,"sourceCodeEnd":252,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cxf/src/main/java/org/flowable/engine/impl/webservice/CxfWSDLImporter.java#L216-L252","documentation":"During WSDL import in the flowable-cxf module, the generated JAXB class's field type is a generic JClass with more than one type parameter (e.g. Map<K,V>). The importer only knows how to unwrap a single type parameter into fieldParameterClass, so it aborts. This is a deliberate unsupported-feature guard in _importFields.","triggerScenarios":"Importing a WSDL whose complexType contains a field that resolves to a Java generic type with two type parameters (e.g. java.util.Map), via CxfWSDLImporter.importFields / _importFields.","commonSituations":"WSDL schemas using xsd elements mapped to Map-like JAXB types, custom JAXB bindings producing generics with two parameters, or migrating legacy Apache ODE/CXF WSDL imports to Flowable.","solutions":["Change the WSDL/XSD schema so the field is not a two-parameter generic (e.g. avoid xsd:key/value or map-style types); use a list of key-value complexTypes instead.","Adjust JAXB binding customizations (jaxb:bindings) so the field maps to a parameterless or single-parameter type.","If you need Map support, patch _importFields to handle multiple parameters (e.g. use the erasure type and skip fieldParameterClass)."],"exampleFix":"// before (XSD producing Map<String,String>)\n<xsd:element name=\"attributes\"><xsd:complexType><xsd:sequence>...</xsd:sequence></xsd:complexType></xsd:element>\n// after\n<xsd:element name=\"attributes\" type=\"tns:attributeList\"/>\n<xsd:complexType name=\"attributeList\"><xsd:sequence><xsd:element name=\"entry\" type=\"tns:entry\" maxOccurs=\"unbounded\"/></xsd:sequence></xsd:complexType>","handlingStrategy":"validation","validationCode":"// Before importing, check WSDL types don't map to multi-parameter generics (e.g. avoid xsd:key/xsd:any with Map mappings)\nJClass fieldType = ...; // as resolved during import\nif (fieldType != null && fieldType.getTypeParameters().size() > 1) {\n    throw new IllegalArgumentException(\"Unsupported field type (2+ type params): \" + fieldType.name());\n}","typeGuard":null,"tryCatchPattern":"try { importer.importFields(); } catch (FlowableException e) { if (e.getMessage().contains(\"more than one parameter\")) { /* fix schema */ } else { throw e; } }","preventionTips":["Keep WSDL schemas free of Map/key-value generics","Review JAXB bindings customizations for multi-parameter types","Test WSDL imports in CI before deployment"],"tags":["wsdl","jaxb","generics","unsupported-type"],"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"}