使用SOAP WebServices时遇到一个非常奇怪的错误。奇怪的是,客户端可以在测试服务器上正常运行,但是在尝试在生产服务器上运行时,它将失败,并出现读取超时:
[com.ctc.wstx.exc.WstxLazyException] Read timed out
甚至奇怪的是,当我在计算机上针对生产SOAP WebService服务器在本地本地运行时,我在生产中拥有的相同SOAP客户端代码库运行得很好。只有在我们的生产客户端环境中,生产SOAP WebService服务器才会出现此异常而失败。我对此一无所知,并且在过去的4个小时里,我一直试图与我的一位网络同事一起解决这个问题,但没有成功。有任何线索吗?
我正在使用Apache CXF!
这是一个很难解决的问题。这是我得到的例外:
Caused by: com.ctc.wstx.exc.WstxIOException: Read timed out
at com.ctc.wstx.sr.StreamScanner.constructFromIOE(StreamScanner.java:633) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.sr.StreamScanner.loadMore(StreamScanner.java:1007) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.sr.BasicStreamReader.readTextSecondary(BasicStreamReader.java:4647) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.sr.BasicStreamReader.finishToken(BasicStreamReader.java:3722) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3676) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
... 39 common frames omitted
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.7.0_51]
at java.net.SocketInputStream.read(SocketInputStream.java:152) ~[na:1.7.0_51]
at java.net.SocketInputStream.read(SocketInputStream.java:122) ~[na:1.7.0_51]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) ~[na:1.7.0_51]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) ~[na:1.7.0_51]
at java.io.BufferedInputStream.read(BufferedInputStream.java:334) ~[na:1.7.0_51]
at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:552) ~[na:1.7.0_51]
at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609) ~[na:1.7.0_51]
at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696) ~[na:1.7.0_51]
at java.io.FilterInputStream.read(FilterInputStream.java:133) ~[na:1.7.0_51]
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3053) ~[na:1.7.0_51]
at com.ctc.wstx.io.BaseReader.readBytes(BaseReader.java:155) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.io.UTF8Reader.loadMore(UTF8Reader.java:368) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.io.UTF8Reader.read(UTF8Reader.java:111) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.io.MergedReader.read(MergedReader.java:105) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.io.ReaderSource.readInto(ReaderSource.java:86) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.io.BranchingReaderSource.readInto(BranchingReaderSource.java:56) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
at com.ctc.wstx.sr.StreamScanner.loadMore(StreamScanner.java:1001) ~[org.codehaus.woodstox.woodstox-core-asl-4.4.1.jar:4.4.1]
... 42 common frames omitted
请注意,WstxIOException指向应用程序无法解析传入的SOAP消息。在我们的例子中,SOAP消息是由服务器以块的形式发送的,而我们的应用程序并未接收到所有的块。有一些网络防火墙正在丢弃一些大于1024kb的数据包。这是在tcp级别上发生的。
我们的网络人员增加了传入数据包的大小后,它立即开始工作!
您怎么知道您的服务无法读取所有传入的块