Metro/WSITライブラリを使用してJavaWebサービスクライアントを作成しています。ヒットする必要のあるWebサービスはWCFサービスです。(私はサービス側とWSDLをほとんどまたはまったく制御できません。)
Webサービスは、トランスポートレベルセキュリティ(SSL)と、セキュリティトークンサービス(WS-Trust / WS-Security)を使用したフェデレーションセキュリティモデルの両方で保護されています。Windows Identity Foundationを使用して.NETにクライアントを簡単に実装し、最初にセキュリティトークンを発行してから、(CreateChannelWithIssuedToken)メソッドを使用して他のWebサービスに要求を行いました。
ただし、Metro / WSITを使用して、Javaでこの動作を模倣するのは困難です。WSDLにWS-Policy情報がないため、WSITはサービスとの通信のセキュリティ処理を有効にしないことを理解しています。送信する前にSOAPリクエストヘッダーを操作してリクエストを行う際にこれを手動で行いましたが、.NETクライアント側で受信するのと同じメッセージを受信しています。
今、私の問題は、次のエラーが発生していることです。
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: MustUnderstand headers:[{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] are not understood
at com.sun.xml.ws.protocol.soap.MUTube.createMUSOAPFaultException(MUTube.java:148)
at com.sun.xml.ws.protocol.soap.ClientMUTube.processResponse(ClientMUTube.java:96)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:972)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775)
at com.sun.xml.ws.client.Stub.process(Stub.java:429)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151)
SOAP応答のヘッダーにセキュリティセクションがあるためです。
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2012-05-14T21:20:08.782Z</u:Created>
<u:Expires>2012-05-14T21:25:08.782Z</u:Expires>
</u:Timestamp>
</o:Security>
</s:Header>
<s:Body>
...
WSDLを変更できない場合、Metro / WSDLに手動で強制的に応答のセキュリティ処理を有効にして、この例外がスローされないようにする方法はありますか?セキュリティヘッダーを使用するつもりはありません。応答のペイロードは期待どおりです。クライアントがmustunderstand="1"のヘッダーを理解していない場合、私が見ているのは正しい動作であることは理解していますが、この例外を抑制する方法を探しています。
私はこれのような他の質問を読みましたが、それは私が望むものに近いようですが、私はまだ答えを見つけていません。アドバイス/解決策/など。どうもありがとうございました!