{"record":{"id":"8eddddd449667f3f","repo":"pentaho/pentaho-kettle","slug":"webservices-error0005-ioexception","errorCode":"WebServices.ERROR0005.IOException","errorMessage":"WebServices.ERROR0005.IOException","messagePattern":"WebServices\\.ERROR0005\\.IOException","errorType":"error_code","errorClass":"KettleStepException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java","lineNumber":402,"sourceCode":"        processRows( httpEntity.getContent(), rowData, rowMeta, cachedWsdl.getWsdlTypes()\n          .isElementFormQualified( cachedWsdl.getTargetNamespace() ), charSet.toString() );\n      } else if ( responseCode == HttpStatus.SC_UNAUTHORIZED ) {\n        throw new KettleStepException( BaseMessages.getString( PKG, \"WebServices.ERROR0011.Authentication\",\n          cachedURLService ) );\n      } else if ( responseCode == HttpStatus.SC_NOT_FOUND ) {\n        throw new KettleStepException( BaseMessages.getString( PKG,\n          \"WebServices.ERROR0012.NotFound\", cachedURLService ) );\n      } else {\n        throw new KettleStepException( BaseMessages.getString( PKG,\n          \"WebServices.ERROR0001.ServerError\", Integer.toString( responseCode ),\n          Const.NVL( new String( EntityUtils.toString( httpEntity, charSet.toString() ) ), \"\" ), cachedURLService ) );\n      }\n      // requestTime += Const.nanoTime() - currentRequestTime;\n    } catch ( UnknownHostException e ) {\n      throw new KettleStepException( BaseMessages\n        .getString( PKG, \"WebServices.ERROR0013.UnknownHost\", cachedURLService ), e );\n    } catch ( IOException e ) {\n      throw new KettleStepException( BaseMessages\n        .getString( PKG, \"WebServices.ERROR0005.IOException\", cachedURLService ), e );\n    } catch ( URISyntaxException e ) {\n      throw new KettleStepException( BaseMessages.getString( PKG, \"WebServices.ERROR0002.InvalidURI\",\n        cachedURLService ), e );\n    } finally {\n      data.argumentRows.clear(); // ready for the next batch.\n      if ( vHttpMethod != null ) {\n        vHttpMethod.releaseConnection();\n      }\n    }\n  }\n\n  private void initWsdlEnv() throws KettleException {\n    if ( meta.equals( cachedMeta ) ) {\n      return;\n    }\n    cachedMeta = meta;\n","sourceCodeStart":384,"sourceCodeEnd":420,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/webservices/WebService.java#L384-L420","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nmeta.setReadTimeOut( \"1000\" ); // service needs ~10s\n// after\nmeta.setReadTimeOut( \"30000\" ); // raise read timeout in the step dialog","handlingStrategy":"retry","validationCode":"// pre-flight reachability + TLS check\nHttpsURLConnection c = (HttpsURLConnection) new URL( serviceUrl ).openConnection();\nc.setConnectTimeout( 5000 );\ntry {\n  c.connect();\n} catch ( IOException ioe ) {\n  throw new IllegalStateException( \"Endpoint unreachable: \" + ioe.getMessage(), ioe );\n}","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute( null );\n} catch ( KettleStepException e ) {\n  if ( e.getMessage() != null && e.getMessage().contains( \"ERROR0005\" ) ) {\n    logError( \"I/O error calling SOAP service: \" + e.getCause() );\n    // retry with backoff for transient network failures\n  }\n}","preventionTips":["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"],"tags":["io","network","http","timeout"],"backgroundTag":"network-request-failed","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"}