{"record":{"id":"7b46bea0e37d7802","repo":"pentaho/pentaho-kettle","slug":"webservices-error0013-exceptionloadingwsdl","errorCode":"WebServices.ERROR0013.ExceptionLoadingWSDL","errorMessage":"WebServices.ERROR0013.ExceptionLoadingWSDL","messagePattern":"WebServices\\.ERROR0013\\.ExceptionLoadingWSDL","errorType":"error_code","errorClass":"KettleStepException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java","lineNumber":425,"sourceCode":"    } finally {\n      data.argumentRows.clear(); // ready for the next batch.\n      if ( vHttpMethod != null ) {\n        vHttpMethod.releaseConnection();\n      }\n    }\n  }\n\n  private void initWsdlEnv() throws KettleException {\n    if ( meta.equals( cachedMeta ) ) {\n      return;\n    }\n    cachedMeta = meta;\n\n    try {\n      cachedWsdl = new Wsdl( new java.net.URI( data.realUrl ), null, null, environmentSubstitute( meta.getHttpLogin() ),\n        Encr.decryptPasswordOptionallyEncrypted( environmentSubstitute( meta.getHttpPassword() ) ) );\n    } catch ( Exception e ) {\n      throw new KettleStepException( BaseMessages.getString( PKG, \"WebServices.ERROR0013.ExceptionLoadingWSDL\" ), e );\n    }\n\n    cachedURLService = cachedWsdl.getServiceEndpoint();\n    cachedHostConfiguration = HttpClientContext.create();\n    cachedHttpClient = getHttpClient( cachedHostConfiguration );\n    // Generate the XML to send over, determine the correct name for the request...\n    //\n    cachedOperation = cachedWsdl.getOperation( meta.getOperationName() );\n    if ( cachedOperation == null ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"WebServices.Exception.OperarationNotSupported\", meta\n        .getOperationName(), meta.getUrl() ) );\n    }\n\n  }\n\n  static String getLocationFrom( HttpPost method ) {\n    Header locationHeader = method.getFirstHeader( \"Location\" );\n    return locationHeader.getValue();","sourceCodeStart":407,"sourceCodeEnd":443,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java#L407-L443","documentation":"KettleStepException thrown by WebService.initWsdlEnv when constructing the Wsdl object fails. The Wsdl constructor fetches and parses the WSDL document from data.realUrl (with optional HTTP auth), so any network, HTTP, or XML parsing failure surfaces as 'ExceptionLoadingWSDL'. The step cannot proceed without a valid WSDL and aborts initialization.","triggerScenarios":"new Wsdl(new java.net.URI(data.realUrl), ...) throws inside initWsdlEnv, which is invoked from requestSOAP: WSDL URL unreachable (connection refused, 404, DNS failure), WSDL returns HTML/invalid XML, HTTP authentication rejected (401/403), or URI malformed.","commonSituations":"Wrong URL in the Web Services step (HTTP instead of HTTPS, missing ?wsdl suffix); server requires credentials not configured in the step's login/password fields; SOAP service moved or is behind a proxy; firewall blocks the transformation host; service returns an error page instead of WSDL XML.","solutions":["Open data.realUrl in a browser/curl from the same host running Pentaho and confirm a valid WSDL XML is returned; fix the URL if not.","Verify the Web Services step's HTTP login/password and that the server accepts them (Encr-decrypted password is substituted at runtime).","Check network reachability: proxy settings, DNS, firewall, TLS (self-signed certs may need JVM truststore updates).","If the service requires ?wsdl appended, make sure the URL includes it."],"exampleFix":"// before\nString url = \"http://host/service\"; // returns 404 for WSDL\n// after\nString url = \"http://host/service?wsdl\"; // serves the WSDL document","handlingStrategy":"validation","validationCode":"// Before running the transformation, verify the WSDL is fetchable:\ntry (java.io.InputStream in = new java.net.URL(wsdlUrl + (wsdlUrl.contains(\"?\") ? \"\" : \"?wsdl\")).openStream()) {\n  if (in.read() == -1) throw new IllegalStateException(\"WSDL stream empty: \" + wsdlUrl);\n}","typeGuard":null,"tryCatchPattern":"try {\n  // run transformation\n} catch (KettleStepException e) {\n  if (e.getMessage() != null && e.getMessage().contains(\"ExceptionLoadingWSDL\")) {\n    // log realUrl and the wrapped cause e.getCause() (network/auth/parse) and abort\n  }\n}","preventionTips":["Validate the WSDL URL with curl from the runtime host before deploying transformations.","Store credentials in Pentaho's encrypted environment variables, not hardcoded.","Include the explicit ?wsdl suffix where the service requires it.","Test after any service-side URL or TLS change."],"tags":["kettle","webservice","wsdl","network"],"backgroundTag":"http-request-failed","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"}