pentaho/pentaho-kettle · error · IllegalArgumentException

ERROR: WSDL path is null!

Error message

ERROR: WSDL path is null!

What it means

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.

Solutions

  1. Set the WSDL URL in the Web Services step dialog before running.
  2. If the URL uses variables, verify the variable is defined (kettle.properties, transformation parameter, environment) and non-empty at runtime.
  3. In programmatic code, assert the wsdlName argument is non-null and non-empty before constructing ControlWsdlLocator.

Example fix

// before
new ControlWsdlLocator(System.getProperty("svc.wsdl"), beanContext); // property unset -> null
// after
String wsdl = System.getProperty("svc.wsdl", "http://host/service?wsdl");
new ControlWsdlLocator(wsdl, beanContext);
Defensive patterns

Strategy: type-guard

Validate before calling

if (wsdlName == null || wsdlName.trim().isEmpty()) {
  throw new IllegalArgumentException("WSDL URL must be set before building the locator");
}

Try / catch

String wsdlName;
try {
  wsdlName = resolveWsdlNameFromVariables();
} catch (IllegalArgumentException e) {
  // fall back to configured default and log which variable was missing
  wsdlName = DEFAULT_WSDL_URL;
}

Prevention

When it happens

Trigger: 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).

Common situations: 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.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/7cf2cfe4e08c7e5a. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/webservices/wsdl/ControlWsdlLocator.java:51

 * its <tt>cleanup()</tt> method should always be called once the WSDL file has been parsed.
 */
public final class ControlWsdlLocator implements WSDLLocator {
  private final String _wsdlName;
  private final BeanContext _beanContext;
  private List<InputStream> _openStreams = new ArrayList<InputStream>();

  /**
   * Create a new wsdl locator for the wsdl file with the specified name.
   *
   * @param wsdlName
   *          Name of the WSDL file to try to load. Name may include file path elements.
   * @param beanContext
   *          The ControlBeanContext of the control which wants to load a WSDL file.
   */
  public ControlWsdlLocator( String wsdlName, BeanContext beanContext ) {

    if ( wsdlName == null ) {
      throw new IllegalArgumentException( "ERROR: WSDL path is null!" );
    }

    _wsdlName = wsdlName;
    _beanContext = beanContext;
  }

  /**
   * Close any InputStreams opened by this locator.
   */
  public void cleanup() {

    for ( InputStream inputStream : _openStreams ) {
      try {
        inputStream.close();
      } catch ( IOException ioe ) {
        // TODO: log a warning!!
      }
    }

View on GitHub (pinned to f3058517a1)