pentaho/pentaho-kettle · error · KettleStepException
ERROR0006
ERROR0006
Error message
WebServiceDialog.ERROR0006.UnsupportedOperation.MultipleArrays
What it means
WebServiceDialog.loadOperation throws ERROR0006 'Multiple arrays' when it encounters a second IN/INOUT/UNDEFINED parameter while an input parameter container was already created — the step supports at most one array-style input parameter per operation.
Solutions
- Pick an operation with a single input parameter, or ask the service for a single-request-object variant.
- Wrap multiple parameters into one complex request element on the server (single wrapper type).
- Use the REST/HTTP Post step or a custom SOAP client step instead of the Web Services step.
- Check 'Operation parameter' handling in the dialog and simplify the WSDL if you own the service.
Example fix
// before (WSDL) <part name="a" .../><part name="b" .../> // after (single request wrapper) <part name="request" type="tns:MyRequest"/>
Defensive patterns
Strategy: validation
Validate before calling
long inParams = wsdlOperation.getParameters().stream()
.filter(p -> p.getMode() == ParameterMode.IN || p.getMode() == ParameterMode.INOUT || p.getMode() == ParameterMode.UNDEFINED)
.count();
if (inParams > 1) throw new KettleStepException("Operation has multiple input parameters; Web Services step supports at most one"); Type guard
boolean singleInputParam(WsdlOperation op) { return op.getParameters().stream().filter(p -> !ParameterMode.OUT.equals(p.getMode())).count() <= 1; } Try / catch
try { loadOperation(op); } catch (KettleStepException e) { showWarning("Pick an operation with a single input parameter or use the REST/HTTP step."); } Prevention
- Review WSDL message parts count before wiring the step
- Ask service providers for single request-object operations
- Use generic SOAP/REST steps for multi-parameter operations
When it happens
Trigger: Selecting a WSDL operation with two or more input parameters (or two array parameters): the first creates inWsdlParamContainer, and hitting another IN/INOUT/UNDEFINED parameter while it is non-null throws.
Common situations: SOAP operations with multiple request arguments (common in document/literal wrapped styles with several parts); WSDLs where each part is an array; services not designed for PDI's single-parameter limitation.
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
- ERROR0007
- 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/f34d820c55c5c9d4.
Report an issue: GitHub.
Appendix: source
Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/webservices/WebServiceDialog.java:277
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(
PKG, "WebServiceDialog.ERROR0006.UnsupportedOperation.MultipleArrays" ) );
} else {
outWsdlParamContainer = new WsdlOpParameterContainer( param );
}
}
}
} else {
if ( ParameterMode.IN.equals( param.getMode() )
|| ParameterMode.INOUT.equals( param.getMode() ) || ParameterMode.UNDEFINED.equals( param.getMode() ) ) {View on GitHub (pinned to f3058517a1)