[ https://issues.apache.org/jira/browse/AXIS2-5791?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andreas Veithen moved TRANSPORTS-56 to AXIS2-5791: -------------------------------------------------- Affects Version/s: (was: 1.7.0) 1.7.0 Component/s: (was: Base) transports Key: AXIS2-5791 (was: TRANSPORTS-56) Project: Axis2 (was: Axis2 Transports) > Issue with Axis2, jax-ws web service call - HttpClient 3.1/4 > java.net.SocketException: Socket Closed due to stale SSL connection, java 8 > ---------------------------------------------------------------------------------------------------------------------------------------- > > Key: AXIS2-5791 > URL: https://issues.apache.org/jira/browse/AXIS2-5791 > Project: Axis2 > Issue Type: Bug > Components: transports > Affects Versions: 1.7.0 > Environment: Oracle Linux: 2.6.18-274.el5 x86_64, tomcat 7.0.68 > Reporter: Jon Hargreaves > > We are in the process of upgrading an axis2 application from java 6 to java 8 > and have been running tests against existing jax-ws axis2 services. > We have a web service, running on tomcat, that is placing a client call, also > via jax-ws to an external web service via an SSL connection. > After switching from java 6 to java 8 we have found that the client call is > still working. > However, when placing a second call to the same web service the call fails > with a "java.net.SocketException: Socket Closed" exception. > This issue is occurring consistently, i.e. if we restart the tomcat server > and then execute the web service which places the client call, via SoapUI, > the same exception is logged. > On further analysis of the log file it seems that, on the second call, the > http connection is being returned from the cache via the httpclient > MultiThreadedHttpConnectionManager class. > The exception is logged, as below: > DEBUG org.apache.commons.httpclient.HttpConnection - An error occurred while > reading from the socket, is appears to be stale > java.net.SocketException: Socket Closed > at > java.net.AbstractPlainSocketImpl.setOption(AbstractPlainSocketImpl.java:212) > at java.net.PlainSocketImpl.setOption(PlainSocketImpl.java:176) > at java.net.Socket.setSoTimeout(Socket.java:1141) > at > sun.security.ssl.BaseSSLSocketImpl.setSoTimeout(BaseSSLSocketImpl.java:631) > at sun.security.ssl.SSLSocketImpl.setSoTimeout(SSLSocketImpl.java:2526) > at > org.apache.commons.httpclient.HttpConnection.isStale(HttpConnection.java:515) > at > org.apache.commons.httpclient.HttpConnection.closeIfStale(HttpConnection.java:431) > at > org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.closeIfStale(MultiThreadedHttpConnectionManager.java:1313) > at > org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:382) > at > org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) > at > org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) > at > org.apache.axis2.transport.http.impl.httpclient3.HTTPSenderImpl.executeMethod(HTTPSenderImpl.java:872) > at > org.apache.axis2.transport.http.impl.httpclient3.HTTPSenderImpl.sendViaPost(HTTPSenderImpl.java:212) > at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:121) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:403) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:234) > at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:431) > It therefore seems that the remote server, to which we are placing the client > jax-ws call, is closing the connection immediately after sending the response > but that the client is not detecting this. > When the next web service call is placed via the client the connection is > retrieved from the connection pool, the httpclient.HttpConnection.isStale() > check is performed, the connection is not correctly detected as being stale > and then the ssl.SSLSocketImpl.setSoTimeout() method is called to reset the > socket timeout, java net then detects that the connection is no longer active > and raises the socket exception. > Note that when this issue occurs it is no longer possible to run this web > service, i.e. the socket exception is then output on every invocation of the > service until the tomcat server is restarted. > Also, note that this issue only occurs with java 8. The socket exception is > not output with java 6. > I have performed tests with different versions of axis2 and found that, with > version 1.6.0, the same socket exception is output but that a new connection > is then opened and the web service then executes and returns a response > without issue. > Finally, I read the Apache Axis2 1.7.0 release note which states that Axis2 > 1.7.0 and above supports Apache HttpClient 4.x in addition to the no longer > maintained Commons HttpClient 3.x. > I have attempted to follow the instructions for upgrading the HttpClient to > release 4.x but in the log file I'm still seeing output for > org.apache.commons.httpclient.HttpConnection. > It seems that the change applied to the axis2.xml config file is not taking > effect. > Please could you help with the resolution for the socket exception issue and > also give guidance with upgrading the HttpClient to version 4.2.5. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org For additional commands, e-mail: java-dev-h...@axis.apache.org