Java Axis2请求期间突然发生SocketTimeoutException

Java Axis2请求期间突然发生SocketTimeoutException,java,sockets,httpclient,axis2,Java,Sockets,Httpclient,Axis2,所以我在tomcat中有一个web应用程序,它使用来自外部提供者的Axis2 web服务。我已经根据提供者的WSDL生成了web服务客户端的代码 该代码至少已经正常运行了6个月。6天前它停止工作了,我收到了SocketTimeoutException。测试服务器至少有一个月没有接触过,因此我可以排除对服务器中Java二进制文件或设置的更改 以下是我的stacktrace中有趣的部分: [2012-12-12 13:33:15.718 MEZ]: org.apache.axis2.AxisFaul

所以我在tomcat中有一个web应用程序,它使用来自外部提供者的Axis2 web服务。我已经根据提供者的WSDL生成了web服务客户端的代码

该代码至少已经正常运行了6个月。6天前它停止工作了,我收到了SocketTimeoutException。测试服务器至少有一个月没有接触过,因此我可以排除对服务器中Java二进制文件或设置的更改

以下是我的stacktrace中有趣的部分:

[2012-12-12 13:33:15.718 MEZ]: org.apache.axis2.AxisFault: Read timed out
[2012-12-12 13:33:15.718 MEZ]:  at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
[2012-12-12 13:33:15.718 MEZ]:  at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
[2012-12-12 13:33:15.718 MEZ]:  at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
[2012-12-12 13:33:15.718 MEZ]:  at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:389)
[2012-12-12 13:33:15.718 MEZ]:  at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:222)
[2012-12-12 13:33:15.718 MEZ]:  at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)
[2012-12-12 13:33:15.734 MEZ]:  at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
[2012-12-12 13:33:15.734 MEZ]:  at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
[2012-12-12 13:33:15.734 MEZ]:  at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
[2012-12-12 13:33:15.734 MEZ]:  at my.generated.webservice.client.Quoting_ServiceStub.getQuotesByRequest(Quoting_ServiceStub.java:4215)
...
[2012-12-12 13:33:15.781 MEZ]: Caused by: java.net.SocketTimeoutException: Read timed out
[2012-12-12 13:33:15.781 MEZ]:  at java.net.SocketInputStream.socketRead0(Native Method)
[2012-12-12 13:33:15.781 MEZ]:  at java.net.SocketInputStream.read(SocketInputStream.java:129)
[2012-12-12 13:33:15.781 MEZ]:  at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
[2012-12-12 13:33:15.781 MEZ]:  at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
[2012-12-12 13:33:15.796 MEZ]:  at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
[2012-12-12 13:33:15.796 MEZ]:  at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
[2012-12-12 13:33:15.796 MEZ]:  at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
这在所有测试和生产系统Windows和Linux上都会发生。 对于通信,我使用的是HttpClient 3.1 Apache commons,并且已经重新启动了应用程序和机器,但没有成功

现在有一件奇怪的事情:我调试了我的web服务客户端,能够使用Windows上的SoapUI和Linux上的curl将请求XML发送到web服务服务器,并在1,5秒内得到了合理的快速响应。因此,它也没有DNS、防火墙或权限问题


我很感激您能提出任何解决此问题的方法。

您的库方法之一是设置套接字超时:这当然不是DNS、防火墙或权限问题。这是读取超时。要么重新配置了客户端,要么服务器速度变慢,例如因为负载增加。我建议你增加超时时间。