2010-06-16 37 views
0

我有使用spring-ws庫來響應soap請求的工作代碼。我將這段代碼移到了不同​​的項目中(我正在合併項目),現在它失敗了。我想找出失敗的原因。如何修復spring-ws中的「Stream closed」錯誤?

我得到的症狀是:當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 

在調試器中檢查它,似乎春天成功處理HTTP頭,但是當它開始處理SOAP消息本身的內容,它讀取非常時扼流圈身體的第一個字符。一些谷歌搜索錯誤消息表明,問題是顯然用於讀取套接字的PushbackInputStream被讀取兩次,或者可能調用close(),然後被讀取。

它發生在spring-ws裏面,不是我的代碼,而且因爲它在我將代碼移動到一個新項目之前工作得很好,所以它必須與spring的版本或者像axis或xerces一樣使用的東西。但是我無法在這些版本中找到任何區別!有沒有人遇到過這個錯誤?或者你有什麼方法可以解決這個問題?

回答

1

我的猜測是在嘗試閱讀郵件正文之前,某些內容正在讀取數據流。 這是典型的情況。

如果別的東西讀取流也可能是消耗整個流和調用flush()和close(),這將導致局勢有何英寸

你有沒有把一個嗅探器的兩端,並指出,肥皂信息實際上包含一個身體?這是不太可能的imo,因爲流實際上是關閉的,並拋出一個空指針或任何東西。

+0

我同意有些東西可能是事先閱讀的,它必須是Spring-ws的一部分:無論是spring本身,還是xalan或saaj ......其中之一。感謝關於檢查身體是否爲空的建議:我懷疑它(因爲我沒有改變關於客戶端的任何事情),但它很容易檢查,因此值得去做。 – mcherm 2010-06-17 11:52:23

1

最後的決議:

事實證明,這個問題是不是在服務器上的。相反,我用來發送請求(SoapUI)的工具出了問題。非常感謝Knife-Action-Jesus建議我仔細研究它。

+0

我也有與SoapUI相同的問題。你是如何解決它的? – Yoni 2015-01-04 19:21:55