{"record":{"id":"5cab2c38e9d0a805","repo":"flowable/flowable-engine","slug":"field-type-s-with-more-than-one-parameter-is-no-5cab2c","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/WSDLImporter.java","lineNumber":196,"sourceCode":"    }\n\n    protected void importStructure(Mapping mapping) {\n        QName qname = mapping.getElement();\n        JDefinedClass theClass = (JDefinedClass) mapping.getType().getTypeClass();\n        SimpleStructureDefinition structure = (SimpleStructureDefinition) this.structures.get(this.namespace + qname.getLocalPart());\n\n        Map<String, JFieldVar> fields = theClass.fields();\n        int index = 0;\n        for (Entry<String, JFieldVar> entry : fields.entrySet()) {\n\n            final JType fieldType = entry.getValue().type();\n            final Class<?> fieldClass = ReflectUtil.loadClass(fieldType.boxify().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":178,"sourceCodeEnd":214,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cxf/src/main/java/org/flowable/engine/impl/webservice/WSDLImporter.java#L178-L214","documentation":"The legacy WSDLImporter's importStructure rejects generated field types that are generic classes with more than one type parameter. Only zero or one type parameter can be mapped to fieldParameterClass, so import of the schema structure fails. Same guard as the CxfWSDLImporter equivalent.","triggerScenarios":"WSDL import via WSDLImporter.importTypes -> importStructure encountering a JAXB field type with two type parameters (e.g. Map<K,V>).","commonSituations":"Legacy process definitions importing WSDLs with map-like types, custom JAXB customizations introducing multi-parameter generics.","solutions":["Modify the WSDL/XSD so fields map to non-generic or single-parameter generics (e.g. List<T> is fine, Map<K,V> is not).","Use JAXB bindings customizations to remap the offending field type.","Prefer the newer CxfWSDLImporter path or patch importStructure to tolerate multi-parameter types."],"exampleFix":"// before: field mapped to Map<String,Long>\n// after: custom binding mapping to wrapper\n<jaxb:bindings node=\"xs:element[@name='counts']\">\n  <jaxb:class ref=\"com.example.CountList\"/>\n</jaxb:bindings>","handlingStrategy":"validation","validationCode":"// Reject WSDL field types mapping to 2+ parameter generics before import\nif (fieldType instanceof JClass && ((JClass) fieldType).getTypeParameters().size() > 1) {\n    throw new IllegalArgumentException(\"Schema field maps to unsupported generic: \" + ((JClass) fieldType).name());\n}","typeGuard":null,"tryCatchPattern":"try { importer.importTypes(); } catch (FlowableException e) { if (e.getMessage().contains(\"more than one parameter\")) { /* adjust schema/bindings */ } else { throw e; } }","preventionTips":["Model key-value data as complexType lists, not maps","Keep JAXB customizations to single-parameter generics","Lint WSDLs during build"],"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"}