非常奇怪的Apache CXF客户端错误

时间:2016-01-29 19:05:14

标签: cxf

使用SOAP WebServices时,我遇到了一个非常奇怪的错误。这里奇怪的是,客户端在测试服务器上运行良好,但在尝试对生产服务器时,它会因读取超时而失败:

[com.ctc.wstx.exc.WstxLazyException] Read timed out 

甚至奇怪的是,我在生产中使用相同的SOAP客户端代码库,在我的机器上本地运行生产SOAP WebService服务器时运行完全正常。只有在我们的生产客户端环境中,生产SOAP WebService服务器才会出现此异常。我对这一点完全无能为力,在过去的4个小时里,我一直试图与我的一位网络同事找到问题的根源,但没有成功。有线索吗?

我正在使用Apache CXF!

1 个答案:

答案 0 :(得分:0)

这是一个非常难以解决的问题。这是我得到的例外:

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级别。

一旦我们的网络人员增加了传入数据包的大小,它就会立即开始工作!