0

CXF で断続的なエラーが発生しています。応答はかなり大きく (数百 KB)、MTOM が有効になっており、CXF 要求/応答ロギング インターセプターの DEBUG を有効にすると、この投稿(未解決) と同様に問題が修正されます。私たちのプロジェクトは、CXF バージョン 2.2.9 を利用しています。

javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: [was class java.io.IOException] Strange I/O stream, returned 0 bytes on read 
                at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:146)
                at com.sun.proxy.$Proxy751.browseFiles(Unknown Source)
…
                at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: [was class java.io.IOException] Strange I/O stream, returned 0 bytes on read
                at com.ctc.wstx.util.ExceptionUtil.throwRuntimeException(ExceptionUtil.java:18)
                at com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:731)
                at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3657)
                at com.ctc.wstx.sr.BasicStreamReader.getTextCharacters(BasicStreamReader.java:830)
                at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleCharacters(StAXStreamConnector.java:323)
…
                at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
                ... 51 more
Caused by: java.io.IOException: Strange I/O stream, returned 0 bytes on read
                at com.ctc.wstx.io.BaseReader.reportStrangeStream(BaseReader.java:148)
                at com.ctc.wstx.io.UTF8Reader.loadMore(UTF8Reader.java:373)
…

私は当初、これは応答データの不正/無効な文字 (エンコーディング?) が原因であると考えていました。ただし、現在はネットワークの問題のように見えます。非常に奇妙です。サービスは、この問題が発生する前に問題なく長期間 (何年も) 動作していました。

なぜこのエラーが発生するのですか? デバッグ ログを有効にせずにこれを解決する方法はありますか?

4

2 に答える 2

2

CXF の新しいバージョンにアップグレードすると、これが修正される可能性があります。CXF MIME ストリームにいくつかのバグがありました。特に、これは次のように見えます。

https://issues.apache.org/jira/browse/CXF-3068

于 2013-04-25T14:22:14.667 に答える
1

これに基づいて、 com.ctc.wstx.io.UTF8Reader.loadMoreのソース コードを考慮すると、BaseReader(ReaderConfig, InputStream, byte[], int, int)を介してmBufferに渡されるバッファの長さがゼロの場合に問題が発生する可能性があります。

loadMore ()メソッドの実装は正しいですか? read()が 0 を返す場合、彼らはそれを行うべきですか?

于 2013-04-24T23:41:46.737 に答える