GlassFish にデプロイされた Web サービスを持つ実用的なソリューションがあり、クライアントが Web サービスに XML 要求を送信すると、SOAPBody から最初の子を抽出します。これは、Windows 7、Server 2003、および Server 2008 R2 で実行されている GlassFish 3.1.1 および Java ランタイム 1.6.0_06-b02 で正常に動作します。
GlassFish 3.1.2 および Ubuntu 12.10 で実行されている Java ランタイム 1.7.0_09 にソリューションをデプロイするように依頼されました。
SOAPEnvelope の XML に空白を含まないテスト ハーネスを使用して実行すると、3.1.1 と 3.1.2 の両方のシステムが正しく動作しますが、SoapUI を使用して空白を含むメッセージを送信すると、Windows のインストールは正しく動作しますが、Ubuntu は正しく動作します。バージョンはキャスト例外を発生させます。
次のコード フラグメント (Web サービスに割り当てられたメッセージ ハンドラー) を実行しようとすると:
public boolean handleMessage(SOAPMessageContext messageContext) {
SOAPElement requestElt = (SOAPElement) messageContext.getMessage().getSOAPBody().getFirstChild();
// Do things here
}
Envelope に空白が含まれている場合、次の例外がスローされます。
com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPElement
誰でもこの問題を説明してもらえますか?