pentaho/pentaho-kettle · error · KettleStepException
WebServices.ERROR0005.IOException
WebServices.ERROR0005.IOException
Error message
WebServices.ERROR0005.IOException
What it means
Thrown by WebService.requestSOAP() when an java.io.IOException occurs during the HTTP request/response cycle (connection failures, stream errors) other than unknown host or invalid URI. It is wrapped in a KettleStepException with message key WebServices.ERROR0005.IOException including the service URL. This is a low-level I/O problem talking to the SOAP service.
Solutions
- Read the wrapped cause — it distinguishes connect timeout vs reset vs SSL errors
- Increase connect/read timeout values if the service is slow
- Verify network/firewall/TLS trust store on the Pentaho host (test with curl)
- Retry the transformation if the failure was transient
Example fix
// before meta.setReadTimeOut( "1000" ); // service needs ~10s // after meta.setReadTimeOut( "30000" ); // raise read timeout in the step dialog
Defensive patterns
Strategy: retry
Validate before calling
// pre-flight reachability + TLS check
HttpsURLConnection c = (HttpsURLConnection) new URL( serviceUrl ).openConnection();
c.setConnectTimeout( 5000 );
try {
c.connect();
} catch ( IOException ioe ) {
throw new IllegalStateException( "Endpoint unreachable: " + ioe.getMessage(), ioe );
} Try / catch
try {
trans.execute( null );
} catch ( KettleStepException e ) {
if ( e.getMessage() != null && e.getMessage().contains( "ERROR0005" ) ) {
logError( "I/O error calling SOAP service: " + e.getCause() );
// retry with backoff for transient network failures
}
} Prevention
- Set generous connect/read timeouts for slow SOAP services
- Ensure the JVM trust store trusts the service's TLS certificate
- Check firewall rules between the Pentaho host and the service
- Log e.getCause() to distinguish timeout vs reset vs SSL errors
When it happens
Trigger: requestSOAP() catches IOException from executing the HTTP method, reading the entity stream, or EntityUtils.toString() — e.g., connection reset, socket timeout, premature EOF, SSL handshake failures surfaced as IOException.
Common situations: Firewall dropping connections, service closing connections mid-response, read/connect timeouts on slow services, TLS certificate problems in some HttpClient versions, or network flaps in containerized deployments.
Related errors
- Carte.Error.NoServerFound
- Client error creating folder
- CmsTokenProvider: Keycloak token request failed — HTTP
- Failed to download file:
- Failed to fetch driver metadata for
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/8eddddd449667f3f.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java:402
processRows( httpEntity.getContent(), rowData, rowMeta, cachedWsdl.getWsdlTypes()
.isElementFormQualified( cachedWsdl.getTargetNamespace() ), charSet.toString() );
} else if ( responseCode == HttpStatus.SC_UNAUTHORIZED ) {
throw new KettleStepException( BaseMessages.getString( PKG, "WebServices.ERROR0011.Authentication",
cachedURLService ) );
} else if ( responseCode == HttpStatus.SC_NOT_FOUND ) {
throw new KettleStepException( BaseMessages.getString( PKG,
"WebServices.ERROR0012.NotFound", cachedURLService ) );
} else {
throw new KettleStepException( BaseMessages.getString( PKG,
"WebServices.ERROR0001.ServerError", Integer.toString( responseCode ),
Const.NVL( new String( EntityUtils.toString( httpEntity, charSet.toString() ) ), "" ), cachedURLService ) );
}
// requestTime += Const.nanoTime() - currentRequestTime;
} catch ( UnknownHostException e ) {
throw new KettleStepException( BaseMessages
.getString( PKG, "WebServices.ERROR0013.UnknownHost", cachedURLService ), e );
} catch ( IOException e ) {
throw new KettleStepException( BaseMessages
.getString( PKG, "WebServices.ERROR0005.IOException", cachedURLService ), e );
} catch ( URISyntaxException e ) {
throw new KettleStepException( BaseMessages.getString( PKG, "WebServices.ERROR0002.InvalidURI",
cachedURLService ), e );
} finally {
data.argumentRows.clear(); // ready for the next batch.
if ( vHttpMethod != null ) {
vHttpMethod.releaseConnection();
}
}
}
private void initWsdlEnv() throws KettleException {
if ( meta.equals( cachedMeta ) ) {
return;
}
cachedMeta = meta;
View on GitHub (pinned to f3058517a1)