[ 
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

Reply via email to