{"record":{"id":"67053bd5434109c0","repo":"pentaho/pentaho-kettle","slug":"cannot-find-wsdl-file-wsdlname","errorCode":null,"errorMessage":"Cannot find WSDL file:  + _wsdlName","messagePattern":"Cannot find 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":106,"sourceCode":"      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\n  /**\n   * Get the base URI for the wsdl file.\n   *\n   * @return null if _wsdlName is not a valid URI.\n   */\n  public String getBaseURI() {\n\n    try {\n      URI uri = new URI( _wsdlName );\n      return uri.toString();\n    } catch ( URISyntaxException e ) {\n      return null;","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/ControlWsdlLocator.java#L88-L124","documentation":"Thrown by ControlWsdlLocator.getBaseInputSource when the WSDL resource named by _wsdlName cannot be opened, first from the configured URL/base input source and then from the classpath. The locator is used by the web-services step to feed the WSDL to the WSDL4J parser, and it aborts with an unchecked RuntimeException when no stream can be obtained.","triggerScenarios":"Calling getBaseInputSource (directly or via the WSDL parser it feeds) when the WSDL name/URI given to the web services transform does not resolve: neither a URL fetch nor getClassLoader().getResourceAsStream(_wsdlName) returns a stream.","commonSituations":"Misspelled WSDL filename or path in the transform settings; WSDL file not on the classpath or missing from the plugin/lib directory; typo in the resource name (case-sensitive on Linux); WSDL deleted from the deployment archive.","solutions":["Verify the WSDL name/URL in the Web Services Lookup transform points to an existing, reachable file or resource","If loading from classpath, copy the WSDL into a location on the classpath (e.g. plugins/.../lib) with the exact name and casing","Test the URL in a browser or curl to confirm reachability before running the transformation","If the WSDL is remote and requires auth, use the username/password constructor instead of the plain locator"],"exampleFix":"// before\nString wsdl = \"my-service.wsdl\"; // file not on classpath\n// after\nInputStream in = getClass().getClassLoader().getResourceAsStream(\"wsdl/my-service.wsdl\");\nif (in == null) throw new IllegalStateException(\"WSDL missing from classpath: wsdl/my-service.wsdl\");","handlingStrategy":"validation","validationCode":"String name = _wsdlName;\ntry (InputStream is = getClass().getClassLoader().getResourceAsStream(name)) {\n  if (is == null) throw new IllegalArgumentException(\"WSDL not on classpath: \" + name);\n}","typeGuard":"boolean wsdlResolvable(String name) {\n  return name != null && !name.isEmpty()\n    && getClass().getClassLoader().getResource(name) != null;\n}","tryCatchPattern":"try {\n  locator.getBaseInputSource();\n} catch (RuntimeException e) {\n  throw new KettleException(\"WSDL resource unavailable: \" + e.getMessage(), e);\n}","preventionTips":["Place the WSDL in a directory on the classpath of the transformation's execution classloader","Use full URLs (verified with curl) instead of bare filenames when possible","Keep WSDL names case-exact across environments (Linux is case-sensitive)","Add a pre-flight check in the transform init step that resolves the WSDL before the run"],"tags":["wsdl","classpath","file-not-found","webservices"],"backgroundTag":"resource-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"}