【发布时间】:2015-02-10 12:46:10
【问题描述】:
使用 Jdeveloper 10.1.3.2 构建了一个客户端应用程序,它在 OC4J 服务器上运行。此应用程序正在向外部服务器应用程序发送数据。它工作了很长时间没有任何问题。最近发生了连接问题,并生成了以下堆栈跟踪:
com.sun.xml.ws.client.ClientTransportException: HTTP transport error: java.net.SocketException: Connection reset
at com.sun.xml.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:133)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:153)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:93)
at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:629)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:588)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:573)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:470)
at com.sun.xml.ws.client.Stub.process(Stub.java:319)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:157)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:140)
at $Proxy44.sendRem(Unknown Source)
经过仔细观察,我发现了一个关于错误sockets - What's causing my java.net.SocketException: Connection reset? 的很好的讨论。此链接中的一个答案说问题主要来自客户端,因为如果它来自服务器端,异常将是 (SocketException reset by peer)。
我做了什么:
我尝试借助此表单How to change OC4J HTTP Timeout 增加 OC4J 的套接字超时时间。我所做的是我将适当的 oracle.j2ee.http.socket.timeout 更改为 5000 而不是 500(长 10 倍)
但错误仍然存在。那么,有什么建议可以解决这个问题吗?
注意:我可以使用telnet 命令获取外部服务器IP 和端口,并且工作正常。
------------------------------------------ ------------ 更新 1 ------------------------------------ --------------------
我在服务器启动时使用以下命令增加运行客户端应用程序的服务器时钟偏差:
-Dweblogic.wsee.security.clock.skew=72000000
-Dweblogic.wsee.security.delay.max=72000000
但运气不好,问题没有解决。
------------------------------------------ ------------ 更新 2 ------------------------ --------------------
我意识到问题根本不在于应用程序;我使用 SoapUI 测试了外部 URL,我得到了同样的错误 Connection rest。我认为这个新的更新 clreay 表明程序代码没有任何问题。但我现在需要知道去哪里或检查。现在解决问题的起点在哪里。任何线索都会有所帮助。
【问题讨论】:
-
链接中的答案是错误的。两边的错误是一样的。建立连接后,客户端与服务器就无法区分了,当然就错误代码而言。
-
@EJP 有什么建议可以解决这个问题?任何线索会有帮助吗?我应该从哪里开始?我需要检查任何其他日志文件吗?
-
查看我对该答案的新评论。 “连接重置”表示您的端重置连接。通常的原因是您在没有读取所有传入数据的情况下关闭了套接字,但还有其他原因。贴一些代码。
-
@EJP 请检查问题中的(更新 2)。
标签: java xml web-services sockets