pentaho/pentaho-kettle · error · KettleException
WebServices.Exception.OperarationNotSupported
WebServices.Exception.OperarationNotSupported
Error message
WebServices.Exception.OperarationNotSupported
What it means
KettleException thrown by WebService.initWsdlEnv when cachedWsdl.getOperation(meta.getOperationName()) returns null, i.e. the WSDL loaded successfully but does not define an operation with the configured name. The step cannot build a SOAP request for a nonexistent operation and fails fast.
Solutions
- Click 'Get operations' in the Web Services step dialog (or call cachedWsdl.getOperation(...) in a probe) to list valid operation names and pick the exact one.
- Verify the URL serves the WSDL you expect and not a different service/version.
- Re-save the transformation after updating the operation name in the step metadata.
- If the operation was removed server-side, migrate to the replacement operation or restore the old service contract.
Example fix
// before
meta.setOperationName("getCustomerRecord"); // WSDL defines getCustomer
// after
meta.setOperationName("getCustomer"); // matches WSDL operation Defensive patterns
Strategy: validation
Validate before calling
// Confirm the operation exists before running:
Wsdl wsdl = new Wsdl(new java.net.URI(wsdlUrl), null, null, login, pass);
if (wsdl.getOperation(operationName) == null) {
throw new IllegalArgumentException("Operation not in WSDL: " + operationName);
} Try / catch
try {
// run transformation
} catch (KettleException e) {
if (e.getMessage() != null && e.getMessage().contains("OperarationNotSupported")) {
// re-list WSDL operations and correct the step's operation name
}
} Prevention
- Always use the step dialog's 'Get operations' button instead of typing names.
- Re-verify operation names after any WSDL/service upgrade.
- Keep test and production transformations pointing at their matching WSDL versions.
When it happens
Trigger: requestSOAP -> initWsdlEnv, after WSDL load: meta.getOperationName() does not match any operation in the fetched WSDL (typo, renamed service, wrong WSDL version, or stale saved transformation).
Common situations: Server upgraded and the operation was renamed or moved to a different WSDL; developer hand-typed the operation name; transformation built against a test WSDL but pointed at production with different operations; WSDL fetched conditionally returns a different service than expected.
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
- Cannot load WSDL file: + _wsdlName
- ERROR: WSDL path is null!
- ERROR0014
- ERROR0015
- WebServices.ERROR0013.ExceptionLoadingWSDL
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/e1a6079e6730e098.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java:435
return;
}
cachedMeta = meta;
try {
cachedWsdl = new Wsdl( new java.net.URI( data.realUrl ), null, null, environmentSubstitute( meta.getHttpLogin() ),
Encr.decryptPasswordOptionallyEncrypted( environmentSubstitute( meta.getHttpPassword() ) ) );
} catch ( Exception e ) {
throw new KettleStepException( BaseMessages.getString( PKG, "WebServices.ERROR0013.ExceptionLoadingWSDL" ), e );
}
cachedURLService = cachedWsdl.getServiceEndpoint();
cachedHostConfiguration = HttpClientContext.create();
cachedHttpClient = getHttpClient( cachedHostConfiguration );
// Generate the XML to send over, determine the correct name for the request...
//
cachedOperation = cachedWsdl.getOperation( meta.getOperationName() );
if ( cachedOperation == null ) {
throw new KettleException( BaseMessages.getString( PKG, "WebServices.Exception.OperarationNotSupported", meta
.getOperationName(), meta.getUrl() ) );
}
}
static String getLocationFrom( HttpPost method ) {
Header locationHeader = method.getFirstHeader( "Location" );
return locationHeader.getValue();
}
HttpPost getHttpMethod( String vURLService ) throws URISyntaxException {
URIBuilder uriBuilder = new URIBuilder( vURLService );
HttpPost vHttpMethod = new HttpPost( uriBuilder.build() );
vHttpMethod.setHeader( "Content-Type", "text/xml;charset=UTF-8" );
String soapAction = "\"" + meta.getOperationNamespace();
if ( !meta.getOperationNamespace().endsWith( "/" ) ) {View on GitHub (pinned to f3058517a1)