私は現在、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);
あるいは、MyWebServices
WSDLの場所のURLを受け取る他のgetXXXメソッドがあるかもしれません