{"record":{"id":"d48491f0ff026d44","repo":"pentaho/pentaho-kettle","slug":"could-not-retrieve-wsdl-operator-for-operation-name","errorCode":null,"errorMessage":"Could not retrieve WSDL Operator for operation name:  + operationName","messagePattern":"Could not retrieve WSDL Operator for operation name:  \\+ operationName","errorType":"exception","errorClass":"KettleStepException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/Wsdl.java","lineNumber":208,"sourceCode":"  public WsdlOperation getOperation( String operationName ) throws KettleStepException {\n\n    // is the operation in the cache?\n    if ( _operationCache.containsKey( operationName ) ) {\n      return _operationCache.get( operationName );\n    }\n\n    Binding b = _port.getBinding();\n    PortType pt = b.getPortType();\n    Operation op = pt.getOperation( operationName, null, null );\n    if ( op != null ) {\n      try {\n        WsdlOperation wop = new WsdlOperation( b, op, _wsdlTypes );\n        // cache the operation\n        _operationCache.put( operationName, wop );\n        return wop;\n      } catch ( KettleException kse ) {\n        LogChannel.GENERAL.logError( \"Could not retrieve WSDL Operator for operation name: \" + operationName );\n        throw new KettleStepException(\n          \"Could not retrieve WSDL Operator for operation name: \" + operationName, kse );\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Get a list of all operations defined in this WSDL.\n   *\n   * @return List of WsdlOperations.\n   */\n  @SuppressWarnings( \"unchecked\" )\n  public List<WsdlOperation> getOperations() throws KettleStepException {\n\n    List<WsdlOperation> opList = new ArrayList<WsdlOperation>();\n    PortType pt = _port.getBinding().getPortType();\n\n    List<Operation> operations = pt.getOperations();","sourceCodeStart":190,"sourceCodeEnd":226,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/Wsdl.java#L190-L226","documentation":"getOperation() wraps failures that occur while building a WsdlOperation from the WSDL binding into a KettleStepException (after logging \"Could not retrieve WSDL Operator\"). It means the named operation exists in the lookup but its binding/schema parts could not be resolved, so the step cannot proceed with that operation.","triggerScenarios":"Calling Wsdl.getOperation(operationName) (e.g. via operation()) when constructing the WsdlOperation throws KettleException — typically because the operation's binding, input/output message parts, or schema types in _wsdlTypes cannot be resolved.","commonSituations":"Operation name not present in the binding (typo or wrong binding selected); RPC/encoded or document styles the resolver can't map; schemas with unsupported/complex types missing from _wsdlTypes; WSDL imports partially failed so type info is incomplete.","solutions":["Verify operationName exactly matches an operation in the WSDL binding for the chosen port","Inspect the wrapped KettleException (kse) for the part/type that failed to resolve","Ensure all imported XSDs of the WSDL are reachable so WsdlTypes is fully populated","Simplify or re-export the WSDL (e.g. use document/literal wrapped style) if the style is unsupported"],"exampleFix":"// before\nWsdlOperation op = wsdl.getOperation(\"SubmitOrder\"); // actual name is submitOrder\n// after\nWsdlOperation op = wsdl.getOperation(\"submitOrder\"); // exact binding operation name","handlingStrategy":"try-catch","validationCode":"if (wsdl.getOperations().stream().noneMatch(o -> o.getOperationName().equals(operationName)))\n  throw new IllegalArgumentException(\"Operation not in binding: \" + operationName);","typeGuard":null,"tryCatchPattern":"try {\n  WsdlOperation op = wsdl.getOperation(operationName);\n} catch (KettleStepException e) {\n  logError(\"Cannot build operation \" + operationName + \": \" + e.getCause());\n  throw e;\n}","preventionTips":["Use the exact operation name from the WSDL <binding> section","Ensure all schema imports resolve so WsdlTypes is complete before getOperation","Prefer document/literal wrapped WSDLs, which the resolver handles reliably","Inspect the nested KettleException cause to identify unresolvable parts/types early"],"tags":["wsdl","operation","schema","webservices"],"backgroundTag":"unexpected-response-shape","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"}