Issue: SAP Cloud SDK SoapRequest timeout after 60s Reproduce issue:
Adopt SAP Cloud SDK version: 5.1.0 with jdk17
Configure destination with adding two parameters: HTML5.ConnectionTimeoutInSeconds=120 HTML5.SocketReadTimeoutInSeconds=300
Using connectivity service and destination service to consume on-premise SAP SOAP API
Error log:
STDOUT Caused by: org.apache.axis2.AxisFault: Read timed out STDOUT at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) ~[axis2-kernel-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.sendViaPost(HTTPSenderImpl.java:242) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:121) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:403) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:234) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431) ~[axis2-kernel-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:399) ~[axis2-kernel-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225) ~[axis2-kernel-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.client.OperationClient.execute(OperationClient.java:150) ~[axis2-kernel-1.7.9.jar:1.7.9] STDOUT at com.xxx.xxx.xxx.soapclient.QCD_011_SALESORDERMAStub.simulateSalesOrder(QCD_011_SALESORDERMAStub.java:524) ~[classes/:na] STDOUT at com.xxx.xxx.xxx.controllers.ToolController.lambda$testOrderSimulation$504d6b90$1(ToolController.java:140) ~[classes/:na] STDOUT at com.sap.cloud.sdk.s4hana.connectivity.soap.SoapRequest.execute(SoapRequest.java:442) ~[soap-5.1.0.jar:na]
Detailed logs
STDOUT java.net.SocketTimeoutException: Read timed out STDOUT at java.base/sun.nio.ch.NioSocketImpl.timedRead(Unknown Source) ~[na:na] STDOUT at java.base/sun.nio.ch.NioSocketImpl.implRead(Unknown Source) ~[na:na] STDOUT at java.base/sun.nio.ch.NioSocketImpl.read(Unknown Source) ~[na:na] STDOUT at java.base/sun.nio.ch.NioSocketImpl$1.read(Unknown Source) ~[na:na] STDOUT at java.base/java.net.Socket$SocketInputStream.read(Unknown Source) ~[na:na] STDOUT at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:161) ~[httpcore-4.4.16.jar:4.4.16] STDOUT at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:82) ~[httpcore-4.4.16.jar:4.4.16] STDOUT at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:276) ~[httpcore-4.4.16.jar:4.4.16] STDOUT at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) ~[httpclient-4.5.14.jar:4.5.14] STDOUT at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.14.jar:4.5.14] STDOUT at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.16.jar:4.4.16] STDOUT at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:294) ~[httpcore-4.4.16.jar:4.4.16] STDOUT at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:257) ~[httpclient-4.5.14.jar:4.5.14] STDOUT at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:207) ~[httpclient-4.5.14.jar:4.5.14] STDOUT at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.16.jar:4.4.16] STDOUT at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.16.jar:4.4.16] STDOUT at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:679) ~[httpclient-4.5.14.jar:4.5.14] STDOUT at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:481) ~[httpclient-4.5.14.jar:4.5.14] STDOUT at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.14.jar:4.5.14] STDOUT at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) ~[httpclient-4.5.14.jar:4.5.14] STDOUT at org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.executeMethod(HTTPSenderImpl.java:873) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl.sendViaPost(HTTPSenderImpl.java:238) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:121) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:403) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:234) ~[axis2-transport-http-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431) ~[axis2-kernel-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:399) ~[axis2-kernel-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225) ~[axis2-kernel-1.7.9.jar:1.7.9] STDOUT at org.apache.axis2.client.OperationClient.execute(OperationClient.java:150) ~[axis2-kernel-1.7.9.jar:1.7.9]
The SAP Cloud SDK for Java does neither evaluate the
HTML5.ConnectionTimeoutInSecondsnor theHTML5.SocketReadTimeoutInSecondsdestination properties.As far as I can tell (according to SAP Note 2680207), these properties are specific to the SAP Approuter when being deployed within the SAP Neo cloudplatform.
Nevertheless, the SAP Cloud SDK offers some configuration APIs for applications to tune the HTTP client creation - including a connection timeout. These timeouts, however, are shared for all HTTP clients (i.e. independent of the destination configuration).