{"record":{"id":"8f0d4c3a4e39873d","repo":"pentaho/pentaho-kettle","slug":"cannot-load-wsdl-file-wsdlname","errorCode":null,"errorMessage":"Cannot load WSDL file:  + _wsdlName","messagePattern":"Cannot load WSDL file:  \\+ _wsdlName","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/ControlWsdlLocator.java","lineNumber":94,"sourceCode":"   * <li>Attempt to locate _wsdlName using the bean context's getResourceAsStream()</li>\n   * <li>Attempt to locate _wsdlName using the current class loader's getResourceAsStream()</li>\n   * </ol>\n   *\n   * @return An InputSource for the WSDL file.\n   */\n  public InputSource getBaseInputSource() {\n\n    InputStream wsdlStream = null;\n\n    // try to open as URL first --\n    try {\n      URL url = new URL( _wsdlName );\n      wsdlStream = url.openStream();\n    } catch ( MalformedURLException e ) {\n      // not fatal keep trying\n    } catch ( IOException e ) {\n      // fatal - abort\n      throw new RuntimeException( \"Cannot load WSDL file: \" + _wsdlName, e );\n    }\n\n    if ( wsdlStream == null ) {\n      wsdlStream = _beanContext.getBeanContext().getResourceAsStream( _wsdlName, _beanContext );\n    }\n\n    if ( wsdlStream == null ) {\n      wsdlStream = this.getClass().getClassLoader().getResourceAsStream( _wsdlName );\n    }\n\n    if ( wsdlStream == null ) {\n      throw new RuntimeException( \"Cannot find WSDL file: \" + _wsdlName, null );\n    }\n\n    _openStreams.add( wsdlStream );\n    return new InputSource( wsdlStream );\n  }\n","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/ControlWsdlLocator.java#L76-L112","documentation":"RuntimeException thrown by ControlWsdlLocator.getBaseInputSource when _wsdlName is a syntactically valid URL but opening its stream fails with an IOException. The code treats MalformedURLException as non-fatal (falls through to the bean-context resource lookup) but an IO failure on the URL is considered fatal and aborts with this message naming the WSDL location.","triggerScenarios":"url.openStream() throws IOException in getBaseInputSource: connection refused, HTTP 404/500 on the WSDL URL, DNS failure, TLS handshake error, or socket timeout while fetching the WSDL document.","commonSituations":"SOAP endpoint down or WSDL path wrong (missing ?wsdl); server requires auth and returns 401 on the WSDL; firewall/proxy blocks the JVM; hostname typo; service temporarily unavailable during deployment.","solutions":["Fetch the URL with curl/browser from the Pentaho host to reproduce the failure and see the actual HTTP/network error.","Correct the WSDL URL (scheme, host, port, ?wsdl suffix) in the step configuration.","Provide HTTP credentials if the WSDL is protected, and configure proxy settings if the host requires one.","Confirm the service is running and reachable (ping/DNS, firewall rules, TLS trust for HTTPS)."],"exampleFix":"// before\nlocator = new ControlWsdlLocator(\"http://prod-host:8080/wrongpath?wsdl\", ctx); // 404 on openStream\n// after\nlocator = new ControlWsdlLocator(\"http://prod-host:8080/services/MyService?wsdl\", ctx);","handlingStrategy":"validation","validationCode":"// Verify the WSDL URL is openable before building the locator:\ntry {\n  new java.net.URL(wsdlName).openStream().close();\n} catch (MalformedURLException bad) {\n  throw new IllegalArgumentException(\"Not a URL, will use resource lookup: \" + wsdlName);\n} catch (IOException io) {\n  throw new IllegalStateException(\"WSDL unreachable now: \" + wsdlName + \" -> \" + io.getMessage());\n}","typeGuard":null,"tryCatchPattern":"try {\n  // load WSDL via locator\n} catch (RuntimeException e) {\n  if (e.getMessage() != null && e.getMessage().startsWith(\"Cannot load WSDL file:\")) {\n    // check e.getCause(): connection refused / 404 / DNS; fix URL or service availability\n  }\n}","preventionTips":["Health-check the WSDL URL from the runtime host before scheduling transformations.","Include credentials/proxy config when the WSDL requires them.","Alert on service downtime so runs don't fire while the endpoint is down."],"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"}