2010-10-05 71 views
2

環顧四周,嘗試不同的建議解決方案後,我正在寫這個。的2級最常見的解決方案建議從MTOM /非MTOM SOAP消息中提取二進制數據是:Axis2/Axiom處理SOAP MTOM /非MTOM附件

  1. 檢索OMText節點,並使用在其內
  2. 存在的DataHandler實例發現包含所述的OMElement節點'href'屬性。獲取'cid:xxxxx'值,並使用'xxxxx'部分從消息上下文實例中存在的附件映射中檢索附件。

我面臨的問題是我的客戶端指出SOAP響應消息是MTOM [我使用消息上下文實例的isDoingMTOM()方法確定了這一點]。但是,沒有包含'href'屬性的OMElement節點。在打印SOAP信封時,我發現二進制數據在主體內部呈現。所以我嘗試了OMText節點方法來獲取數據,但每當我嘗試將OMElement轉換爲相應的OMText節點時,我都會收到一個classCastException。

有人能指出我錯過了什麼嗎?

回答

1

如何打印出SOAPEnvelope Axiom對象?如果你正在調用toString()方法,這有一些不幸的副作用。具體來說,toString()方法將導致Axiom解析底層的SOAP消息,並構建代表原始XML的Axiom Object圖(OMElement節點等)。作爲對象圖正在修建,公理會改變輕微的XML的表示:

下面是Axiom的網站的鏈接,講述的toString的)行爲(: http://ws.apache.org/axiom/userguide/ch05.html#d0e1111

特別是對於MTOM的消息,因爲Axiom正在構建對象圖,它將用原始二進制文件的Base64編碼文本表示替換指向原始二進制MTOM附件的元素 - 有效地消除了使用MTOM的任何好處(MTOM允許您放棄Base64編碼過程這擴大了二進制的大小)。如果您查看調試器中的Axiom Object圖,也會發生元素的替換(因爲這樣也會調用toString()方法)。

您是否使用ADB作爲XML綁定框架?