2

WS-Security を実装しているが、WSDL でポリシーを定義していない Web サービスがあります。Axis 2 をクライアントとして使用して、この Web サービスを正常に使用できます。

Metro 2 を使用して同じ Web サービスを使用しようとしていますが、wsse:security ヘッダーが使用できません。サービスが私の管理下にないセキュリティポリシーを定義している場合にのみ機能します。サンプル Web サービスを作成してこれをテストしました。ポリシーを定義しない限り、メトロ クライアントは wsse:security ヘッダーを送信しません。

Metro の使用に欠けているものはありますか?

編集 - - - - - - - - - - - - - - - - - - - - - - - - - ----------------------------------------------

wsdl のローカル コピーを作成し、その中でポリシーを定義しました。この wsdl を使用して Web サービス クライアントを作成しましたが、まだセキュリティ ヘッダーが機能しません。wsit-client.xml ファイルは問題ないようです。すべての構成を、ポリシーを定義する Web サービスのクライアントと比較したところ、構成は同じですが、それでも機能しません。現時点での私の結論は、metro クライアントには実際の Web サービスでポリシーを定義する必要があるということです。

編集 - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------------------------------

wsit-client.xml の内容

<?xml version="1.0" encoding="UTF-8"?> 
<definitions 
xmlns="http://schemas.xmlsoap.org/wsdl/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="mainclientconfig"
>
<import location="NewWebService.xml" namespace="http://test.com/"/>

NewWebService.xml は wsit-client.xml と一緒に配置され、次のポリシー情報が含まれています。

<wsp:Policy wsu:Id="NewWebServicePortBindingPolicy">
        <wsp:ExactlyOne>
            <wsp:All>
                <sc:CallbackHandlerConfiguration wspp:visibility="private">
                    <sc:CallbackHandler default="dsfsd" name="usernameHandler"/>
                    <sc:CallbackHandler default="sdfsdfds" name="passwordHandler"/>
                </sc:CallbackHandlerConfiguration>
            </wsp:All>
        </wsp:ExactlyOne>
    </wsp:Policy>

これはバインディングで次のように参照されます -

<binding name="NewWebServicePortBinding" type="tns:NewWebService">
    <wsp:PolicyReference URI="#NewWebServicePortBindingPolicy"/>

変更された wsdl には次のポリシーが含まれています -

<wsp:Policy xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" wsu:Id="NewWebServicePortBindingPolicy"> 
    <sp:SignedEncryptedSupportingTokens> 
        <wsp:Policy> 
            <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
                <wsp:Policy> 
                    <sp:WssUsernameToken10 /> 
                </wsp:Policy> 
            </sp:UsernameToken> 
        </wsp:Policy> 
    </sp:SignedEncryptedSupportingTokens> 
    <sp:TransportBinding> 
        <wsp:Policy> 
            <sp:AlgorithmSuite> 
                <wsp:Policy> 
                    <sp:Basic128 /> 
                </wsp:Policy> 
            </sp:AlgorithmSuite> 
            <sp:IncludeTimestamp /> 
            <sp:Layout> 
                <wsp:Policy> 
                    <sp:Lax /> 
                </wsp:Policy> 
            </sp:Layout> 
            <sp:TransportToken> 
                <wsp:Policy> 
                    <sp:HttpsToken RequireClientCertificate="false" /> 
                </wsp:Policy> 
            </sp:TransportToken> 
        </wsp:Policy> 
    </sp:TransportBinding> 
    <sp:Wss10 /> 
    <wsam:Addressing wsp:Optional="true" /> 
</wsp:Policy> 
4

2 に答える 2

0

非常によく似た状況でここに書いた私の質問を見てみてください - Calling a .NET web service (WSE 3.0, WS-Security) from JAXWS-RI。私はまだ(!)それを処理しようとしています.b / cサーバー側からエラーが発生していますが、これを機能させるために行ったプロセスの詳細で質問を更新しました. そこには、Metro java.net フォーラムに投稿した投稿へのリンクがあり、役に立ちました。ただし、wsse ヘッダーを生成することはできました。

要するに、WSDL のローカル コピーに ws:Policy セクションを含める (そして、サービスを作成するときにその WSDL をパラメーターとして送信する) ことだと思います。これは、クライアント オブジェクトを作成するコード スニペットです。Spring ファクトリを使用してクライアント参照を別のサービスに挿入しているため、ここでは単純化する必要がありました。

String wsdlDocumentLocation = "localVersion.wsdl";
QName serviceName = new QName("mynamespace", "myServiceName");
Service service = Service.create(wsdlDocumentLocation, serviceName);
//send the port the fully qualified name of the Metro generated
//client interface
Object port = service.getPort("my.client.package.ClientServiceInterface");

それは、 wsit-client.xml とともに機能するはずです。wsit-client.xml ファイルをどこに置いていますか? それがクラスパス上にある場合 (私の場合は WEB-INF/classes にあります)、それが読み取られていることを示すログ ステートメントがコンソールに表示されます。コンソールに表示されるメッセージは次のとおりです。

[13:12:06.779] WSP5018: ファイルから WSIT 構成をロードしました: file:/C:/projects/target/my-webapp/WEB-INF/classes/wsit-client.xml。

于 2010-03-29T17:16:25.027 に答える
0

ws:Policyを WSDL のローカル コピーとに追加する必要がありますwsit-client.xmlこのスレッド(および特にこの回答) は、全体をセットアップするのに役立つ場合があります。

于 2010-03-29T07:05:14.653 に答える