{"record":{"id":"8d260ae23ff05d2e","repo":"pentaho/pentaho-kettle","slug":"binding-type-soapbindingelem-encountered-the-web-service","errorCode":null,"errorMessage":"Binding type  + soapBindingElem +  encountered. The Web Service Lookup step only supports SOAP Bindings!","messagePattern":"Binding type  \\+ soapBindingElem \\+  encountered\\. The Web Service Lookup step only supports SOAP Bindings!","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/WsdlUtils.java","lineNumber":108,"sourceCode":"\n  /**\n   * Get the SOAPBinding style for the specified WSDL Port.\n   *\n   * @param binding\n   *          A WSDL Binding instance.\n   * @return String either 'document' or 'rpc', if not found in WSDL defaults to 'document'.\n   */\n  protected static String getSOAPBindingStyle( Binding binding ) throws KettleException {\n    String style = SOAP_BINDING_DEFAULT;\n    ExtensibilityElement soapBindingElem = findExtensibilityElement( binding, SOAP_BINDING_ELEMENT_NAME );\n\n    if ( soapBindingElem != null ) {\n      if ( soapBindingElem instanceof SOAP12Binding ) {\n        style = ( (SOAP12Binding) soapBindingElem ).getStyle();\n      } else if ( soapBindingElem instanceof SOAPBinding ) {\n        style = ( (SOAPBinding) soapBindingElem ).getStyle();\n      } else {\n        throw new KettleException( \"Binding type \"\n          + soapBindingElem + \" encountered. The Web Service Lookup step only supports SOAP Bindings!\" );\n      }\n    }\n    return style;\n  }\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 ) {","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/WsdlUtils.java#L90-L126","documentation":"WsdlUtils.getSOAPBindingStyle(Binding) reads the style (document/rpc) from the binding's <soap:binding> extensibility element. It only understands wsdl4j SOAPBinding and SOAP12Binding implementations; any other binding extensibility element type (e.g., HTTP binding, unknown/custom) triggers a KettleException stating only SOAP bindings are supported.","triggerScenarios":"Calling getSOAPBindingStyle on a binding whose <soap:binding> slot contains an extensibility element that is neither SOAP 1.1 nor SOAP 1.2 — for instance an <http:binding>, or a binding element parsed by an unknown extension registry.","commonSituations":"WSDL describes a REST/HTTP (non-SOAP) service; a custom or nonstandard binding namespace is used; the wsdl4j extension registry lacks the SOAP extension factory so elements deserialize into a generic type; pointing the Web Service Lookup step at a non-SOAP endpoint.","solutions":["Verify the service exposes a SOAP binding (<soap:binding transport=...>) and use its WSDL; the step does not support HTTP/REST bindings.","Ask the service provider for a SOAP (document/literal) WSDL endpoint.","If the WSDL is SOAP but still failing, ensure the wsdl4j SOAP extension factories are registered so elements deserialize as SOAPBinding/SOAP12Binding.","Handle SOAP 1.2 endpoints explicitly — they require the SOAP12Binding path, which is supported."],"exampleFix":"<!-- before: non-SOAP binding -->\n<binding name=\"myBinding\" type=\"tns:myPortType\">\n  <http:binding verb=\"GET\"/>\n<!-- after: SOAP binding -->\n<binding name=\"myBinding\" type=\"tns:myPortType\">\n  <soap:binding style=\"document\" transport=\"http://schemas.xmlsoap.org/soap/http\"/>","handlingStrategy":"validation","validationCode":"// Verify the binding is SOAP before resolving style\nList<ExtensibilityElement> els = binding.getExtensibilityElements();\nboolean soap = els.stream().anyMatch(x -> x instanceof SOAPBinding || x instanceof SOAP12Binding);\nif (!soap) throw new IllegalArgumentException(\"Binding '\" + binding.getQName()\n  + \"' has no SOAP 1.1/1.2 binding element — step supports SOAP only\");","typeGuard":"boolean isSoapBinding(ExtensibilityElement el) {\n  return el instanceof javax.wsdl.extensions.soap.SOAPBinding\n      || el instanceof javax.wsdl.extensions.soap12.SOAP12Binding;\n}","tryCatchPattern":"try {\n  String style = WsdlUtils.getSOAPBindingStyle(binding);\n} catch (KettleException ke) {\n  if (ke.getMessage() != null && ke.getMessage().contains(\"only supports SOAP Bindings\")) {\n    logError(\"Non-SOAP binding encountered; use a SOAP WSDL endpoint\", ke);\n  }\n  throw ke;\n}","preventionTips":["Confirm the endpoint is SOAP, not HTTP/REST","Ensure wsdl4j SOAP extension factories are registered","Request document/literal SOAP WSDLs from providers"],"tags":["wsdl","soap","binding","unsupported"],"backgroundTag":"unsupported-operation","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"}