无法sendViaPost - 在Axis2客户端存根上

时间:2012-06-28 15:44:53

标签: multithreading axis2 stub

我正在使用wsdl2java生成的Axis 2(1.6.1)java客户端。

它似乎工作正常,但我不时会收到以下错误:

14:38:04,855 INFO [HTTPSender]无法将viaPost发送到网址[...]

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:755)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)

我想知道这是否是一个多线程问题,并希望就此事得到一些答案。 我使用一个缓存HttpClient的存根。 HttpClient使用MultiThreadedHttpConnectionManager,我将setDefaultMaxConnectionsPerHost设置为20。

据我所知,HttpClient凭借相关的MultiThreadedHttpConnectionManager将是线程安全的。 问题是Axis2存根会发生什么?存根是否也是线程安全的?

我已经看到一些帖子,其中声明Axis存根在设计上不是线程安全的。 如果是这种情况,使用多线程HttpClient有什么好处? 如何确保Axis客户端存根在多线程环境中可用?

谢谢

1 个答案:

答案 0 :(得分:0)

“连接重置”错误表示服务器意外关闭了连接。当您收到该错误时,问题出在远程服务器上,而不是您的客户端。

MultiThreadedHttpConnectionManager是HTTP连接的多线程安全缓存。多个线程可以从缓存中获取连接或将其返回到缓存,而缓存不会成为瓶颈。单个HttpClient或拥有HttpClient的存根应该一次只能由一个线程使用。 HttpClient拥有与远程服务器的实际TCP连接,并且该连接一次仅支持一个正在进行的请求。