gpt4 book ai didi

java - 如何修复 spring-ws 中的 "Stream closed"错误?

转载 作者:行者123 更新时间:2023-12-02 08:32:10 26 4
gpt4 key购买 nike

我有使用 spring-ws 库的工作代码来响应肥皂请求。我将此代码移至另一个项目(我正在合并项目),但现在失败了。我想找出失败的原因。

我得到的症状是这样的:当HTTP请求到达时,spring开始处理调用。然后我得到以下异常:

org.springframework.ws.soap.saaj.SaajSoapEnvelopeException: Could not access envelope: java.io.IOException: Stream closed; nested exception is javax.xml.soap.SOAPException: java.io.IOException: Stream closed
at org.springframework.ws.soap.saaj.SaajSoapMessage.getEnvelope(SaajSoapMessage.java:109)
<<more lines that don't matter>>
Caused by: java.io.IOException: Stream closed
at java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:57)
at java.io.PushbackInputStream.read(PushbackInputStream.java:116)
at org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.read(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
... 30 more

在调试器中检查它,似乎 spring 成功处理了 HTTP header ,但是当它开始处理 SOAP 消息本身的内容时,它在读取正文的第一个字符时出现阻塞。对错误消息的一些谷歌搜索表明问题在于,显然用于从套接字读取的 PushbackInputStream 被读取了两次,或者可能调用了 close(),然后再读取。

它发生在 spring-ws 内部,而不是我的代码中,并且由于在我将代码移动到新项目之前它运行良好,因此它必须与 spring 的版本或其使用的某些东西(如 axis 或 xerces)有关。但我找不到这些版本的任何差异!以前有人遇到过这个错误吗?或者您对我可以采取的解决此问题的方法有什么建议吗?

最佳答案

我的猜测是,在您尝试读取消息正文之前,有东西正在读取流。这是典型的情况。

如果其他东西正在读取流,它可能会消耗整个流并调用flush()和close(),这会导致您所处的情况。

您是否在两端放置了嗅探器并观察到肥皂消息实际上包含正文?在我看来,这种情况不太可能发生,因为流实际上已关闭并抛出空指针或任何东西。

关于java - 如何修复 spring-ws 中的 "Stream closed"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056612/

26 4 0