pentaho/pentaho-kettle · error · KettleStepException
ERROR0007
ERROR0007
Error message
WebServiceDialog.ERROR0007.UnsupporteOperation.ComplexType
What it means
In WebServiceDialog.loadOperation, a complex parameter's element has a type whose namespace is not the XML Schema namespace (XSD). The step only supports complex types built from simple XSD-typed elements, so it throws KettleStepException ERROR0007 'Unsupported operation: complex type'.
Solutions
- Choose a different WSDL operation whose parameters use only simple XSD-typed elements.
- Ask the service provider for a flat, simple-type-based operation, or wrap/transform via a generic HTTP/SOAP client step instead.
- Modify the WSDL (if you control it) to declare elements with xsd: types.
- Pre-process with an XSLT or a custom plugin step if the complex structure must be consumed.
Example fix
// before (WSDL) <element name="address" type="tns:AddressType"/> // after <element name="city" type="xsd:string"/>
Defensive patterns
Strategy: validation
Validate before calling
for (String n : type.getElementNames()) {
if (!"http://www.w3.org/2001/XMLSchema".equals(type.getElementType(n).getNamespaceURI()))
throw new KettleStepException("Element " + n + " is not a simple XSD type; unsupported by Web Services step");
} Type guard
boolean isSimpleXsdElement(ComplexType t, String name) { QName q = t.getElementType(name); return q != null && "http://www.w3.org/2001/XMLSchema".equals(q.getNamespaceURI()); } Try / catch
try { dialog.loadOperation(op); } catch (KettleStepException e) { logError("Unsupported WSDL complex type: " + e.getMessage()); } Prevention
- Inspect the WSDL schema before choosing operations: require xsd: simple element types
- Prefer flat, simple-type request/response designs from the service team
- Fall back to HTTP Post + XML parsing steps for complex schemas
When it happens
Trigger: Selecting a WSDL operation whose input parameter complex type contains an element typed outside the http://www.w3.org/2001/XMLSchema namespace (custom/complex element types, nested complex types).
Common situations: SOAP services with deeply nested or custom-schema-typed request bodies; WSDLs using company-specific types instead of plain XSD simple types; older Axis-based services with exotic schemas.
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
- ERROR0006
- ERROR0008
- Binding type + soapBindingElem + encountered. The Web…
- Can not find operation: + operationName
- Cannot load WSDL file: + _wsdlName
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/9dd0cee894e6f7b3.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/webservices/WebServiceDialog.java:268
if ( parameters != null
&& parameters.getOperation() != null && parameters.getOperation().getInput() != null
&& parameters.getOperation().getInput().getName() != null ) {
request = wsdlOperation.getParameters().getOperation().getInput().getName().toString();
}
wOperationRequest.setText( request );
for ( int cpt = 0; cpt < wsdlOperation.getParameters().size(); cpt++ ) {
WsdlOpParameter param = wsdlOperation.getParameters().get( cpt );
if ( param.isArray() ) {
// setInFieldArgumentName(param.getName().getLocalPart());
if ( param.getItemXmlType() != null ) {
ComplexType type = param.getItemComplexType();
if ( type != null ) {
for ( Iterator<String> itrType = type.getElementNames().iterator(); itrType.hasNext(); ) {
String attributeName = itrType.next();
QName attributeType = type.getElementType( attributeName );
if ( !WebServiceMeta.XSD_NS_URI.equals( attributeType.getNamespaceURI() ) ) {
throw new KettleStepException( BaseMessages.getString(
PKG, "WebServiceDialog.ERROR0007.UnsupporteOperation.ComplexType" ) );
}
}
}
if ( ParameterMode.IN.equals( param.getMode() )
|| ParameterMode.INOUT.equals( param.getMode() )
|| ParameterMode.UNDEFINED.equals( param.getMode() ) ) {
if ( inWsdlParamContainer != null ) {
throw new KettleStepException( BaseMessages.getString(
PKG, "WebServiceDialog.ERROR0006.UnsupportedOperation.MultipleArrays" ) );
} else {
inWsdlParamContainer = new WsdlOpParameterContainer( param );
}
} else if ( ParameterMode.OUT.equals( param.getMode() )
|| ParameterMode.INOUT.equals( param.getMode() )
|| ParameterMode.UNDEFINED.equals( param.getMode() ) ) {
if ( outWsdlParamContainer != null ) {
throw new KettleStepException( BaseMessages.getString(View on GitHub (pinned to f3058517a1)