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
- 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.
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
- 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.
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
- Cannot load WSDL file: + _wsdlName
- WebServices.ERROR0013.ExceptionLoadingWSDL
- WebServices.Exception.OperarationNotSupported
- ERROR_0003_UNABLE_TO_DELETE_USERS
- ERROR_0007_UNABLE_TO_UPDATE_USER
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)