{"record":{"id":"a2951afa58751659","repo":"pentaho/pentaho-kettle","slug":"error0015","errorCode":"ERROR0015","errorMessage":"WebServices.ERROR0015.OperationNotSelected","messagePattern":"WebServices\\.ERROR0015\\.OperationNotSelected","errorType":"exception","errorClass":"KettleStepException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java","lineNumber":155,"sourceCode":"    } catch ( ParseException e ) {\n      logError( \"Unexpected error in WebService constructor: \", e );\n      setErrors( 1 );\n      stopAll();\n    }\n  }\n\n  public boolean processRow( StepMetaInterface metaInterface, StepDataInterface dataInterface ) throws KettleException {\n    meta = (WebServiceMeta) metaInterface;\n\n    // if a URL is not specified, throw an exception\n    if ( Utils.isEmpty( meta.getUrl() ) ) {\n      throw new KettleStepException( BaseMessages.getString(\n        PKG, \"WebServices.ERROR0014.urlNotSpecified\", getStepname() ) );\n    }\n\n    // if an operation is not specified, throw an exception\n    if ( Utils.isEmpty( meta.getOperationName() ) ) {\n      throw new KettleStepException( BaseMessages.getString(\n        PKG, \"WebServices.ERROR0015.OperationNotSelected\", getStepname() ) );\n    }\n\n    data = (WebServiceData) dataInterface;\n    Object[] vCurrentRow = getRow();\n\n    if ( first ) {\n      first = false;\n\n      if ( getInputRowMeta() != null ) {\n        data.outputRowMeta = getInputRowMeta().clone();\n      } else {\n        data.outputRowMeta = new RowMeta();\n      }\n      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,\n        metaStore );\n\n      defineIndexList( getInputRowMeta(), vCurrentRow );","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java#L137-L173","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Open the WebService step dialog, reload the WSDL, and select an operation from the operation list","Verify the WSDL URL is reachable so the operation list can be populated","If the operation is set via variable/parameter, ensure it is defined at execution time"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"WebServiceMeta meta = (WebServiceMeta) stepMeta.getStepMetaInterface();\nif ( meta.getOperationName() == null || meta.getOperationName().isEmpty() ) {\n  throw new IllegalArgumentException( \"WebService step has no operation selected; reload WSDL and pick one\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute( null );\n} catch ( KettleException e ) {\n  if ( e.getMessage() != null && e.getMessage().contains( \"ERROR0015\" ) ) {\n    logError( \"WebService step missing operation; open dialog and select operation\" );\n  }\n}","preventionTips":["After setting the URL, always reload the WSDL and select an operation","Re-verify operation selection whenever the WSDL changes upstream","Avoid hand-editing ktr XML for this step","Use transformation metadata validation jobs before production runs"],"tags":["kettle","webservice","soap","configuration"],"backgroundTag":"missing-required-config-field","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}