{"record":{"id":"7cf2cfe4e08c7e5a","repo":"pentaho/pentaho-kettle","slug":"error-wsdl-path-is-null","errorCode":null,"errorMessage":"ERROR: WSDL path is null!","messagePattern":"ERROR: WSDL path is null!","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/ControlWsdlLocator.java","lineNumber":51,"sourceCode":" * its <tt>cleanup()</tt> method should always be called once the WSDL file has been parsed.\n */\npublic final class ControlWsdlLocator implements WSDLLocator {\n  private final String _wsdlName;\n  private final BeanContext _beanContext;\n  private List<InputStream> _openStreams = new ArrayList<InputStream>();\n\n  /**\n   * Create a new wsdl locator for the wsdl file with the specified name.\n   *\n   * @param wsdlName\n   *          Name of the WSDL file to try to load. Name may include file path elements.\n   * @param beanContext\n   *          The ControlBeanContext of the control which wants to load a WSDL file.\n   */\n  public ControlWsdlLocator( String wsdlName, BeanContext beanContext ) {\n\n    if ( wsdlName == null ) {\n      throw new IllegalArgumentException( \"ERROR: WSDL path is null!\" );\n    }\n\n    _wsdlName = wsdlName;\n    _beanContext = beanContext;\n  }\n\n  /**\n   * Close any InputStreams opened by this locator.\n   */\n  public void cleanup() {\n\n    for ( InputStream inputStream : _openStreams ) {\n      try {\n        inputStream.close();\n      } catch ( IOException ioe ) {\n        // TODO: log a warning!!\n      }\n    }","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/ControlWsdlLocator.java#L33-L69","documentation":"IllegalArgumentException thrown by the ControlWsdlLocator constructor when wsdlName is null. The locator needs a non-null WSDL path/URL to resolve the document later; failing immediately in the constructor prevents a confusing downstream failure.","triggerScenarios":"Calling new ControlWsdlLocator(null, beanContext) — in the WebServices step flow this happens when the resolved URL passed to Wsdl/wsdl locator construction is null (e.g. environment variable substitution produced null or the URL field was never populated).","commonSituations":"Transformation variable used for the Web Services URL is undefined at runtime; step cloned/copied without the URL field; programmatic use of the Wsdl API passing a null locator name.","solutions":["Set the WSDL URL in the Web Services step dialog before running.","If the URL uses variables, verify the variable is defined (kettle.properties, transformation parameter, environment) and non-empty at runtime.","In programmatic code, assert the wsdlName argument is non-null and non-empty before constructing ControlWsdlLocator."],"exampleFix":"// before\nnew ControlWsdlLocator(System.getProperty(\"svc.wsdl\"), beanContext); // property unset -> null\n// after\nString wsdl = System.getProperty(\"svc.wsdl\", \"http://host/service?wsdl\");\nnew ControlWsdlLocator(wsdl, beanContext);","handlingStrategy":"type-guard","validationCode":"if (wsdlName == null || wsdlName.trim().isEmpty()) {\n  throw new IllegalArgumentException(\"WSDL URL must be set before building the locator\");\n}","typeGuard":null,"tryCatchPattern":"String wsdlName;\ntry {\n  wsdlName = resolveWsdlNameFromVariables();\n} catch (IllegalArgumentException e) {\n  // fall back to configured default and log which variable was missing\n  wsdlName = DEFAULT_WSDL_URL;\n}","preventionTips":["Never leave the Web Services step's URL field empty.","Resolve all variables used in the URL before execution (set kettle.properties/parameters).","Fail fast in your own code with a clear message when substitution yields null."],"tags":["kettle","webservice","wsdl","null-argument"],"backgroundTag":"null-argument","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"}