質問

私は、Javaサービス・クライアントは、WCFサービスと正常に通信してき腹立たしい問題に遭遇してきました。私は多くのハードルを克服してきた、と私はこれが私の最後のものであると信じています。問題は、Java軸+ WSS4Jは、XML名前空間を扱うように見えるかに沸きます。 Javaプラットフォームは、WCFの応答メッセージを理解していない、彼らは、XML名前空間接頭辞のために期待するもので、そのように非常に剛性であるように見える。

次のように

一言で言えば私の問題はあります。私は私のWCFサービスから次のようなXMLレスポンスを持っています:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
   <s:Header>
      <a:Action s:mustUnderstand="1" u:Id="_3">http://tempuri.org/IProcessor/DoProcessingResponse</a:Action>
      <h:CorrelationID xmlns:h="http://tempuri.org/">1234</h:CorrelationID>
      <a:RelatesTo u:Id="_4">uuid:40f800a0-9613-4f4a-96c5-b9fd98085deb</a:RelatesTo>
      <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <!-- WS-Security header stuff -->
      </o:Security>
   </s:Header>
   <s:Body u:Id="_1">
      <e:EncryptedData Id="_2" Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns:e="http://www.w3.org/2001/04/xmlenc#">
         <e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
         <e:CipherData>
            <e:CipherValue>NfA6XunmyLlT2ucA+5QneoawHm+imcaCltDAJC1mRZOSxoB6YGpDLY1FyVykPbPGDoFGUESLsmvvbD62sNnRrgE+AuKPo+1CD3DF4LfurRcEv9A50ba9V+ViqlrhydhK</e:CipherValue>
         </e:CipherData>
      </e:EncryptedData>
   </s:Body>
</s:Envelope>
すなわち、「WS-Securityの」の「O」

この応答は「」WS-Addressingをするための、「S」SOAPエンベロープ用としてほとんどのもの、のために、単純な1文字の名前空間接頭辞を使用して、などのザ・Javaクライアント、 WSS4Jは、以下のことを期待しているようだ。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
   <soap:Header>
      <wsa:Action soap:mustUnderstand="1" wsu:Id="_3">http://tempuri.org/IProcessor/DoProcessingResponse</wsa:Action>
      <h:CorrelationID xmlns:h="http://tempuri.org/">1234</h:CorrelationID>
      <wsa:RelatesTo wsu:Id="_4">uuid:40f800a0-9613-4f4a-96c5-b9fd98085deb</a:RelatesTo>
      <wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <!-- WS-Security header stuff -->
      </wsse:Security>
   </soap:Header>
   <soap:Body u:Id="_1">
      <xenc:EncryptedData Id="_2" Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
         <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
         <xenc:CipherData>
            <xenc:CipherValue>NfA6XunmyLlT2ucA+5QneoawHm+imcaCltDAJC1mRZOSxoB6YGpDLY1FyVykPbPGDoFGUESLsmvvbD62sNnRrgE+AuKPo+1CD3DF4LfurRcEv9A50ba9V+ViqlrhydhK</xenc:CipherValue>
         </xenc:CipherData>
      </xenc:EncryptedData>
   </soap:Body>
</soap:Envelope>
私の応答メッセージを受信すると、JavaクライアントとWSS4Jは、WS-Addressingのための「WSA」、およびWS-Securityの拡張機能のための「WSSE」など、独自の内部XMLエイリアスによって要素を検索したいように見えます。これらの名前空間のどちらが実際の応答XMLに存在しているので、例外がスローされます。

C#,. NET、およびSystem.Xml名前空間を使用して別のセットに名前空間の1セットからXML文書を変換するための任意の簡単な方法がある場合は、

私は疑問に思って。私はてXmlNamespaceManagerで少し周りつついてきましたが、それは完全に私は必要なものをサポートしていないようです...または、少なくとも、私は、任意の本当に有用な例を見つけることができなかった、と完全に必ずそれがどのように動作するかではないと思います。私はJavaの軸/ WSS4Jクライアントによって呼び出されたとき、私は劇的に当社のサービスのパフォーマンスに影響を与えたくないと、手動で自分自身をこれを処理するために、いくつかの大型プロセスを記述することを避けるためにしようとしています。

役に立ちましたか?

解決

この特定の問題がWSS4Jの古いバギーバージョンに由来するように見えました。新しいバージョンでは、この問題を持っているように見えるません、それはもはや問題である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top