動的エンドポイント用の Apache CXF クライアント 質問する

動的エンドポイント用の Apache CXF クライアント 質問する

私は現在、NTLM 認証を回避するために、.NET サービスの Web サービス クライアントとして Apache CXF を使用しています。うまく機能していますが、Web サービスのターゲット エンドポイントを設定できないのはなぜでしょうか。CXF は、何らかの奇妙な理由で実行時に WSDL を必要とするようですが、理由はわかりません。CXF は WSDL から物理エンドポイントを取得します。これはテスト環境では問題なく機能すると思いますが、展開時には必ず変更されます。

以下にデモ用のコードを示します。

        MyWebServices service = new MyWebServices ();
        MyWebServicesSoap port = service.getMyWebServicesSoap12();

        // Turn off chunking so that NTLM can occur
        Client client = ClientProxy.getClient(port);
        HTTPConduit http = (HTTPConduit) client.getConduit();
        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
        httpClientPolicy.setConnectionTimeout(36000);
        httpClientPolicy.setAllowChunking(false);
        http.setClient(httpClientPolicy);

        port.doSomethingUseful();

繰り返しになりますが、CXFクライアントAPIにはサービスエンドポイントを設定できる場所がありません。少なくとも私が見る限りでは。この場合、ターゲットはhttp://localhost/integration/webservices/mywebservices.asmx、でもどこにいても構いません。この歩行者問題はきっと解決されるのでしょうか?

ベストアンサー1

次のことを試してください。

MyWebServicesSoap port = service.getMyWebServicesSoap12();
BindingProvider provider = (BindingProvider) port;
provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint); 

あるいは、MyWebServicesWSDLの場所のURLを受け取る他のgetXXXメソッドがあるかもしれません

おすすめ記事