2012-02-14 87 views
2

我有一個解析SOAP消息的問題。
這是消息:帶附件的肥皂SAAJ

------=_Part_3_5438437.1107262647279 

Content-Type: text/xml 

<?xml version="1.0" encoding="UTF-8"?> 
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap-env:Body> 
    <content> 
    [...] 
    </content> 
    </soap-env:Body> 
</soap-env:Envelope> 

------=_Part_3_5438437.1107262647279 
Content-Type: text/plain; charset=ISO-8859-1 

text 
------=_Part_3_5438437.1107262647279-- 

這是我的Java servlet的提取物,應當接收並解析消息:

messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); 
message = messageFactory.createMessage(mimeHeaders, req.getInputStream()); 

要測試的servlet,我使用JMeter的。我把SOAP消息放在HTTP請求的原始郵件正文中。 在我把這個頭: 內容類型多部分/相關;邊界= ---- = _ Part_3_5438437.1107262647279

問題號1:似乎在SAAJ解析被竊聽,因爲調試我看到邊界被視爲---- null,就像if =可以用作令牌一樣。所以我把它從身體和頭部都拿走了。這是一個巨大的問題,因爲我無法改變我收到的輸入,但讓我們暫時假裝我可以。 好吧,這讓我轉移到問題2:現在邊界被正確解析,但我獲得此異常:com.sun.xml.messaging.saaj.SOAPExceptionImpl:錯誤的內容類型的SOAP部分:文本/純

好吧,我相信我知道如何解決這個問題,我要補充的Content-type頭類型: 內容類型多部分/相關;類型=文本/ XML;邊界= ----_ Part_3_5438437.1107262647279

是的,但我當然還有一個討厭的例外:com.sun.xml.messaging.saaj.SOAPExceptionImpl:無法在com.sun.xml.messaging.saaj.soap.MessageImpl.parseContentTy內化消息 pe(MessageImpl.java:337)

我正在使用saaj-impl-1.3.18和saaj-api-1.3.3。
Java版本 「1.6.0_29」
的Java(TM)SE運行時環境(建立1.6.0_29-b11-402-11D50b)
的HotSpot的Java(TM)64位服務器VM(生成20.4 b02-402,混合模式)

回答

2

解決問題的2號就出在這裏了行:

------=_Part_3_5438437.1107262647279 

Content-Type: text/xml 

必須離開,否則,內容類型被假定爲文本/默認平原。 感謝Brian Joh http://twitter.com/brianwjoh指出了這一點。
對於問題1,我簡單地通過在「之間加上邊界值」來解決它。「

type="text/xml";boundary="----=_Part_3_5438437.1107262647279"