我写了一个Web服务,并使用Eclipse向导生成了Web客户端。
我的客户端应用程序正在请求String
和Object
。
可以成功检索字符串,当我尝试检索对象时,它会给出以下异常(我正在使用JBoss 5):
Exception in thread "main" org.apache.axis2.AxisFault: Read timed out
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:203)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at se.cambio.cimonitor.ws.implmnt.GetDataStub.retrieveDetails(GetDataStub.java:203)
at se.cambio.cimonitor.ws.client.WebServiceClient.main(WebServiceClient.java:44)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
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:77)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115)
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1373)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346)
at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:560)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199)
我找不到出路,请帮助我。
答案 0 :(得分:2)
我只能从您放置的唯一异常堆栈跟踪中提供帮助。
异常的 root 原因是:
引起:java.net.SocketTimeoutException:读取超时
这表示套接字尝试读取或接受时发生超时。在您的情况下,有一个读取超时。
您需要弄清楚服务器服务器框的套接字超时是什么,如果可以的话,请将其无限期地生效。
答案 1 :(得分:1)
我在项目上遇到了这个错误,根本原因是代理服务器设置。我不得不修改代理以允许与我试图访问的服务进行通信。我的代码是作为使用自己的代理的自定义应用程序的一部分运行的。所以这也可以尝试。
答案 2 :(得分:0)
最后我可以克服这个问题。我的对象是一个包含其中的另一个对象的对象。然后我使用String和int构造一个对象,并且可以成功发送。
谢谢...
答案 3 :(得分:0)
我们遇到了类似的问题,我们在尝试调用安全的Web服务时获得了Read Time Out,经过长时间的分析,我们发现传输协议版本存在不匹配。 Web服务在http1.0上提供服务,我们使用http1.1调用它。我们在客户端代码中修改了协议版本,解决了这个问题:
以下是指定http version-1.0 options.setProperty的代码(org.apache.axis2.transport.http.HTTPConstants.HTTP_PROTOCOL_VERSION,org.apache.axis2.transport.http.HTTPConstants.HEADER_PROTOCOL_10);