{"record":{"id":"57582ddeecf3f72a","repo":"pentaho/pentaho-kettle","slug":"can-not-find-operation-operationname","errorCode":null,"errorMessage":"Can not find operation:  + operationName","messagePattern":"Can not find operation:  \\+ operationName","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/WsdlUtils.java","lineNumber":131,"sourceCode":"  }\n\n  /**\n   * Get the SOAP Use type for the specified operation.\n   *\n   * @param binding\n   *          A WSDL Binding instance.\n   * @param operationName\n   *          The name of the operation.\n   * @return Either 'literal' or 'encoded'.\n   * @throws RuntimeException\n   *           If the use type cannot be determined.\n   */\n  protected static String getSOAPBindingUse( Binding binding, String operationName ) {\n\n    BindingOperation bindingOperation = binding.getBindingOperation( operationName, null, null );\n\n    if ( bindingOperation == null ) {\n      throw new IllegalArgumentException( \"Can not find operation: \" + operationName );\n    }\n\n    // first try getting the use setting from the input message\n    BindingInput bindingInput = bindingOperation.getBindingInput();\n    if ( bindingInput != null ) {\n      ExtensibilityElement soapBodyElem =\n        WsdlUtils.findExtensibilityElement( bindingInput, SOAP_BODY_ELEMENT_NAME );\n      if ( soapBodyElem != null ) {\n        if ( soapBodyElem instanceof SOAP12BodyImpl ) {\n          return ( (SOAP12BodyImpl) soapBodyElem ).getUse();\n        } else {\n          return ( (SOAPBody) soapBodyElem ).getUse();\n        }\n      }\n    }\n\n    // if there was no input message try getting the use from the output message\n    BindingOutput bindingOutput = bindingOperation.getBindingOutput();","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/WsdlUtils.java#L113-L149","documentation":"WsdlUtils.getSOAPBindingUse(Binding, String) resolves the SOAP use (literal/encoded) for a specific operation by first fetching the binding's BindingOperation. If binding.getBindingOperation(operationName, null, null) returns null — no such operation in this binding — an IllegalArgumentException 'Can not find operation: <name>' is thrown before any use attribute can be read.","triggerScenarios":"Calling getSOAPBindingUse with an operationName that does not match any <operation name=\"...\"> under the given <binding>: typo, wrong case, or the operation exists in the portType but was omitted from the binding section.","commonSituations":"Typo or case mismatch in the operation name passed to the Web Service Lookup step; WSDL binding omits operations present in portType; using the fully-qualified name instead of the local operation name; stale WSDL after service update.","solutions":["Copy the exact <operation name=\"...\"> string from the <binding> element of the WSDL.","Check case sensitivity — operation lookup is an exact string match.","Ensure the operation is present in the binding section, not just in portType; if missing, regenerate/fix the WSDL.","Re-fetch the current WSDL in case the operation was renamed."],"exampleFix":"// before\nString use = WsdlUtils.getSOAPBindingUse(binding, \"getPrice\"); // actual name: GetPrice\n// after\nString use = WsdlUtils.getSOAPBindingUse(binding, \"GetPrice\");","handlingStrategy":"validation","validationCode":"// Check the operation exists in the binding first\nif (binding.getBindingOperation(operationName, null, null) == null) {\n  throw new IllegalArgumentException(\"Operation '\" + operationName + \"' not in binding; available: \"\n    + binding.getBindingOperations() != null ? binding.getBindingOperations().toString() : \"none\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  String use = WsdlUtils.getSOAPBindingUse(binding, opName);\n} catch (IllegalArgumentException iae) {\n  if (iae.getMessage() != null && iae.getMessage().startsWith(\"Can not find operation:\")) {\n    logError(\"Unknown operation '\" + opName + \"' — check binding section of WSDL\", iae);\n  }\n  throw iae;\n}","preventionTips":["Copy operation names verbatim from the <binding> section","Remember matching is case-sensitive and local-part only","Re-sync operation names after service upgrades"],"tags":["wsdl","soap","operation","illegal-argument"],"backgroundTag":"entity-not-found","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"}