1

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

誰でもこの問題を説明してもらえますか?

4

1 に答える 1

0

Windows マシンを jdk1.7.0_13 および GlassFish 3.1.2 に更新した後、空白を含む SOAP メッセージを処理できないという同じ問題が発生しました。

これがなぜなのか、問題が JDK にあるのか GlassFish にあるのか、導入された問題なのか XML 処理の強化なのか、私にはわかりません。

つまり、ノードではなくエレメントが見つかるまで、ChildElements を反復処理する SOAPBody も渡すルーチンを作成しました。

あなたがこれを読んでいるなら、おそらくあなたが聞きたいことではないでしょうが、私にとっては今のところうまくいきます.

于 2013-02-13T13:12:40.433 に答える