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

  1. Pick an operation with a single input parameter, or ask the service for a single-request-object variant.
  2. Wrap multiple parameters into one complex request element on the server (single wrapper type).
  3. Use the REST/HTTP Post step or a custom SOAP client step instead of the Web Services step.
  4. 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

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


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)