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
- Regenerate/reload the WSDL in the dialog ('Get operations') so containers are rebuilt consistently.
- Use an operation with a homogeneous parameter style (all simple parts or a single complex request).
- Normalize the WSDL: make all request parameters simple, or wrap everything in one request element.
- 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
- Reload operations from the WSDL after any service-side schema change
- Avoid WSDLs that mix bare parts with complex request elements
- Pin a known-good WSDL copy locally when the provider changes schemas
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
- ERROR0006
- ERROR0007
- 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/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)