現在、NTLM認証を回避するための.NETサービスのWebサービスクライアントとしてApacheCXFを使用しています。うまく機能しますが、なぜWebサービスのターゲットエンドポイントを設定できないように見えるのか疑問に思います。 CXFは、奇妙な理由で実行時にWSDLを必要としているようです-確かではありません。これは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 ですが、どこにでもいる可能性があります。確かにこの歩行者問題はなんとか解決されたのでしょうか?
次のことを試してください。
MyWebServicesSoap port = service.getMyWebServicesSoap12();
BindingProvider provider = (BindingProvider) port;
provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint);
あるいは、MyWebServices
には、WSDLの場所のURLを受け取る他のgetXXXメソッドがある場合があります
Cxf2.6.1での作業
Client client = ClientProxy.getClient(port);
client.getRequestContext().put(Message.ENDPOINT_ADDRESS, "http://some-valid-endpoint") ;
これは私のために働いた。
String customerEndPoint = "https://localhost:8080/customerService/v1"
customerWebService = service.getCustomerWebServicePort();
((BindingProvider) customerWebService).getRequestContext()
.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
customerEndPoint);