pentaho/pentaho-kettle · error · KettleStepException

ERROR0015

ERROR0015

Error message

WebServices.ERROR0015.OperationNotSelected

What it means

Thrown by the WebService step's processRow() when no SOAP operation name is selected in the step meta. The URL may be valid, but the step needs to know which operation to invoke against the WSDL, so an empty operation aborts processing with a KettleStepException naming the step.

Solutions

  1. Open the WebService step dialog, reload the WSDL, and select an operation from the operation list
  2. Verify the WSDL URL is reachable so the operation list can be populated
  3. If the operation is set via variable/parameter, ensure it is defined at execution time
Defensive patterns

Strategy: validation

Validate before calling

WebServiceMeta meta = (WebServiceMeta) stepMeta.getStepMetaInterface();
if ( meta.getOperationName() == null || meta.getOperationName().isEmpty() ) {
  throw new IllegalArgumentException( "WebService step has no operation selected; reload WSDL and pick one" );
}

Try / catch

try {
  trans.execute( null );
} catch ( KettleException e ) {
  if ( e.getMessage() != null && e.getMessage().contains( "ERROR0015" ) ) {
    logError( "WebService step missing operation; open dialog and select operation" );
  }
}

Prevention

When it happens

Trigger: meta.getOperationName() is null/empty at run time — the operation was never chosen in the step dialog, or the WSDL was reloaded/changed so the previously selected operation name no longer resolves and meta holds an empty value.

Common situations: Copying steps between transformations, WSDL updated upstream so saved operation is stale, loading a transformation authored by a different Pentaho version where operation metadata wasn't persisted, or manual XML editing of the ktr.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java:155

    } catch ( ParseException e ) {
      logError( "Unexpected error in WebService constructor: ", e );
      setErrors( 1 );
      stopAll();
    }
  }

  public boolean processRow( StepMetaInterface metaInterface, StepDataInterface dataInterface ) throws KettleException {
    meta = (WebServiceMeta) metaInterface;

    // if a URL is not specified, throw an exception
    if ( Utils.isEmpty( meta.getUrl() ) ) {
      throw new KettleStepException( BaseMessages.getString(
        PKG, "WebServices.ERROR0014.urlNotSpecified", getStepname() ) );
    }

    // if an operation is not specified, throw an exception
    if ( Utils.isEmpty( meta.getOperationName() ) ) {
      throw new KettleStepException( BaseMessages.getString(
        PKG, "WebServices.ERROR0015.OperationNotSelected", getStepname() ) );
    }

    data = (WebServiceData) dataInterface;
    Object[] vCurrentRow = getRow();

    if ( first ) {
      first = false;

      if ( getInputRowMeta() != null ) {
        data.outputRowMeta = getInputRowMeta().clone();
      } else {
        data.outputRowMeta = new RowMeta();
      }
      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
        metaStore );

      defineIndexList( getInputRowMeta(), vCurrentRow );

View on GitHub (pinned to f3058517a1)