2013-02-07 54 views
1

我有一個可以在GlassFish上部署Web服務的工作解決方案,當客戶端向Web服務發送XML請求時,我從SOAPBody中提取第一個子項。這適用於在Windows 7,Server 2003和Server 2008 R2上運行的GlassFish 3.1.1和java runtime 1.6.0_06-b02。saaj.soap到xml.soap Glassfish中的castException

我被要求部署在GlassFish 3.1.2解決方案和Java運行時1.7.0_09在Ubuntu 12.10運行

當使用具有在雙方的SoapEnvelope 3.1的XML沒有空格我的測試工具運行.1和3.1.2系統工作正常,但是,如果我使用SoapUI發送包含空白的消息,則Window安裝將正常工作,而Ubuntu版本會引發轉換異常。

當我試圖運行下面的代碼片段(分配給Web服務的消息處理函數):

public boolean handleMessage(SOAPMessageContext messageContext) { 
    SOAPElement requestElt = (SOAPElement) messageContext.getMessage().getSOAPBody().getFirstChild(); 
    // Do things here 
} 

當信封包含空格以下異常被拋出:

com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPElement 

燦任何人都能爲我解釋這個問題嗎?

回答

0

將Windows機器更新到jdk1.7.0_13和GlassFish 3.1.2後,我遇到了同樣的問題,我無法用空格對SOAP消息進行處理。

我不知道這是爲什麼,以及問題是否與JDK或GlassFish相關,以及它是引入問題還是收緊XML處理。

結果是,我現在已經創建了一個例程,您也可以通過SOAPBody來迭代ChildElements,直到找到Element而不是Node。

如果你正在閱讀這可能不是你想聽到的,但它目前適用於我。