pentaho/pentaho-kettle · error · KettleStepException

ERROR0008

ERROR0008

Error message

WebServiceDialog.ERROR0008.UnsupportedOperation.IncorrectParams

What it means

WebServiceDialog.loadOperation throws ERROR0008 'Incorrect params' when an IN/INOUT/UNDEFINED parameter is encountered while inWsdlParamContainer already holds a plain parameter container rather than a WsdlOperationContainer — a parameter/operation container mix the step cannot reconcile.

Solutions

  1. Regenerate/reload the WSDL in the dialog ('Get operations') so containers are rebuilt consistently.
  2. Use an operation with a homogeneous parameter style (all simple parts or a single complex request).
  3. Normalize the WSDL: make all request parameters simple, or wrap everything in one request element.
  4. Upgrade PDI — newer versions improved Web Services step parameter handling.

Example fix

// before (mixed)
<part name="id" type="xsd:string"/><part name="req" type="tns:Req"/>
// after (uniform)
<part name="req" type="tns:Req"/> <!-- req contains id -->
Defensive patterns

Strategy: validation

Validate before calling

if (inWsdlParamContainer != null && !(inWsdlParamContainer instanceof WsdlOperationContainer)) {
  throw new KettleStepException("Mixed parameter styles in WSDL input message; reload WSDL or pick a uniform operation");
}

Type guard

boolean hasConsistentInputStyle(WsdlOperation op) { return op.getParameters().stream().map(p -> p.getClass()).distinct().count() <= 1; }

Try / catch

try { loadOperation(op); } catch (KettleStepException e) { logError("Inconsistent WSDL parameter style — click 'Get operations' to reload, or pick another operation"); }

Prevention

When it happens

Trigger: An operation's parameter list combines simple (non-complex) parameters after array/complex parameters, or vice versa: first path created a WsdlOpParameterContainer, then a simple param path finds it non-null and not a WsdlOperationContainer.

Common situations: Mixed-style WSDLs combining bare parts and complex request elements; document/literal vs RPC encoding inconsistencies; WSDL updated by the service team breaking previously working operations.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/493433d45bda9ad6. Report an issue: GitHub.

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/trans/steps/webservices/WebServiceDialog.java:297

              } 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() ) ) {
            if ( inWsdlParamContainer != null && !( inWsdlParamContainer instanceof WsdlOperationContainer ) ) {
              throw new KettleStepException( BaseMessages.getString(
                PKG, "WebServiceDialog.ERROR0008.UnsupportedOperation.IncorrectParams" ) );
            } else {
              inWsdlParamContainer = new WsdlOperationContainer( wsdlOperation, param.getMode() );
            }
          } else if ( ParameterMode.OUT.equals( param.getMode() )
            || ParameterMode.INOUT.equals( param.getMode() ) || ParameterMode.UNDEFINED.equals( param.getMode() ) ) {
            if ( outWsdlParamContainer != null && !( outWsdlParamContainer instanceof WsdlOperationContainer ) ) {
              throw new KettleStepException( BaseMessages.getString(
                PKG, "WebServiceDialog.ERROR0008.UnsupportedOperation.IncorrectParams" ) );
            } else {
              outWsdlParamContainer = new WsdlOperationContainer( wsdlOperation, param.getMode() );
            }
          } else {
            System.out.println( "Parameter : "
              + param.getName().getLocalPart() + ", mode=" + param.getMode().toString() + ", is not considered" );
          }
        }
      }

View on GitHub (pinned to f3058517a1)