flowable/flowable-engine · error · FlowableException
Field type ' ' with more than one parameter is not supported
Error message
Field type '%s' with more than one parameter is not supported: %S
What it means
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.
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.
Example fix
// before: field mapped to Map<String,Long> // after: custom binding mapping to wrapper <jaxb:bindings node="xs:element[@name='counts']"> <jaxb:class ref="com.example.CountList"/> </jaxb:bindings>
Defensive patterns
Strategy: validation
Validate before calling
// Reject WSDL field types mapping to 2+ parameter generics before import
if (fieldType instanceof JClass && ((JClass) fieldType).getTypeParameters().size() > 1) {
throw new IllegalArgumentException("Schema field maps to unsupported generic: " + ((JClass) fieldType).name());
} Try / catch
try { importer.importTypes(); } catch (FlowableException e) { if (e.getMessage().contains("more than one parameter")) { /* adjust schema/bindings */ } else { throw e; } } Prevention
- Model key-value data as complexType lists, not maps
- Keep JAXB customizations to single-parameter generics
- Lint WSDLs during build
When it happens
Trigger: WSDL import via WSDLImporter.importTypes -> importStructure encountering a JAXB field type with two type parameters (e.g. Map<K,V>).
Common situations: Legacy process definitions importing WSDLs with map-like types, custom JAXB customizations introducing multi-parameter generics.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Field type ' ' with more than one parameter is not supported
- An error occurs creating a web-service client for WSDL '" +…
- Could not find importer class for type " +…
- Error importing ' ' as
- Error importing ' ' as ' ' (import location, import type)
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/5cab2c38e9d0a805.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cxf/src/main/java/org/flowable/engine/impl/webservice/WSDLImporter.java:196
}
protected void importStructure(Mapping mapping) {
QName qname = mapping.getElement();
JDefinedClass theClass = (JDefinedClass) mapping.getType().getTypeClass();
SimpleStructureDefinition structure = (SimpleStructureDefinition) this.structures.get(this.namespace + qname.getLocalPart());
Map<String, JFieldVar> fields = theClass.fields();
int index = 0;
for (Entry<String, JFieldVar> entry : fields.entrySet()) {
final JType fieldType = entry.getValue().type();
final Class<?> fieldClass = ReflectUtil.loadClass(fieldType.boxify().fullName());
final Class<?> fieldParameterClass;
if (fieldType instanceof JClass) {
final JClass fieldClassType = (JClass) fieldType;
final List<JClass> fieldTypeParameters = fieldClassType.getTypeParameters();
if (fieldTypeParameters.size() > 1) {
throw new FlowableException(
String.format("Field type '%s' with more than one parameter is not supported: %S",
fieldClassType, fieldTypeParameters));
} else if (fieldTypeParameters.isEmpty()) {
fieldParameterClass = null;
} else {
final JClass fieldParameterType = fieldTypeParameters.get(0);
// Hack because JClass.fullname() doesn't return the right class fullname for a nested class to be
// loaded from classloader. It should be contain "$" instead of "." as separator
boolean isFieldParameterTypeNeestedClass = false;
final Iterator<JDefinedClass> theClassNeestedClassIt = theClass.classes();
while (theClassNeestedClassIt.hasNext() && !isFieldParameterTypeNeestedClass) {
final JDefinedClass neestedType = theClassNeestedClassIt.next();
if (neestedType.name().equals(fieldParameterType.name())) {
isFieldParameterTypeNeestedClass = true;
}
}
if (isFieldParameterTypeNeestedClass) {View on GitHub (pinned to d6d39ce1c6)