5

外部 Web サービスから情報を取得するために CXF JAXWS クライアントを使用しています。したがって、基本的には、外部から .xsd および .wsdl ファイルを取得し、cxf-codegen-plugin を使用してクライアント スタブを生成することにより、ws コンシューマーを実装しようとします。.xsd および .wsdl ファイルは変更できません。すべて正常に動作し、外部サービスから SOAP メッセージを送信および取得できます。しかし、ログから SOAP 要求メッセージを調べると、WS クライアントから送信された SOAP (本体) メッセージに未使用の名前空間が多数見つかります。以下は例です

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:aheaderns="http://xxx.xxx.xxx.xxx/header.xsd">
<soap:Header>
    ...
</soap:Header>
<soap:Body>
    <ns7:requestQuery xmlns:ns15="http://xxx.xxx.xxx.xxx/AAA" xmlns:ns14="http://xxx.xxx.xxx.xxx/BBB" xmlns:ns13="http://xxx.xxx.xxx.xxx/DDD" xmlns:ns12="http://xxx.xxx.xxx.xxx/CCC" xmlns:ns11="http://xxx.xxx.xxx.xxx/EEE" xmlns:ns10="http://xxx.xxx.xxx.xxx/FFF" xmlns:ns9="http://xxx.xxx.xxx.xxx/GGG" xmlns:ns8="http://xxx.xxx.xxx.xxx/HHH" xmlns:ns7="http://xxx.xxx.xxx.xxx/III" xmlns:ns6="http://xxx.xxx.xxx.xxx/JJJ" xmlns:ns5="http://xxx.xxx.xxx.xxx/KKK">
        <ns7:sample>
            <ns7:type>A</ns7:type>
            <ns7:ref>1</ns7:ref>
        </ns7:sample>
    </ns7:requestQuery>
</soap:Body>

クライアントから送信されるアウトバウンド SOAP メッセージから未使用の名前空間を削除する方法はありますか?

4

2 に答える 2

0

この問題をしばらく掘り下げた後、解決策を見つけました。ただし、私の解決策は根本的な原因で問題を解決することではなく、今のところ機能していると思います。

基本的に、CXF の XSLTOutInterceptor を使用して、XSL を out メッセージに適用します。ただし、デフォルトの PRE_STEAM フェーズが機能していません。次に、XSLTOutInterceptor を拡張して、その PHASE を WRITE に変更することにしました。そのため、未使用の名前空間は、プロトコル メッセージを送信する前に書き込み中に削除されます。

私が使用する XSL は、使用されていない名前空間をソース xml から削除する方法からのものです。

ちなみに、なぜこれらの未使用の名前空間が生成されたのかはまだわかりません。誰かが私に提案を与えることができれば、私はそれを感謝します.

ありがとう :)

于 2013-09-18T09:43:10.777 に答える