2010-06-10 90 views
25

我现在使用Apache CXF作为.NET服务的Web服务客户端以避开NTLM身份验证。它工作的很好,但我想知道为什么我似乎无法设置Web服务目标端点。 CXF似乎在运行时需要一些奇怪的原因 - 不确定。它需要来自WSDL的物理端点,我认为在测试环境中工作正常,但在部署时它肯定会改变。用于动态端点的Apache CXF客户端

下面是一些代码来演示:

 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,但我可以在任何地方。当然,这个行人问题是以某种方式解决的?

回答

44

尝试以下操作:

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

另外,MyWebServices可能有需要的URL,WSDL位置

+0

不知道工作的其他getXXX方法是什么你的意思是你最后的陈述在这里 – andyczerwonka 2010-06-10 22:51:32

+0

在MyServices类中,还有其他方法会返回一个接受URL参数的端口吗?你能编辑你的帖子来粘贴该类的签名吗? – Kevin 2010-06-11 12:23:57

+0

就像一个魅力 - 谢谢 – andyczerwonka 2010-06-11 16:10:22

10

在CXF 2.6.1

Client client = ClientProxy.getClient(port); 
client.getRequestContext().put(Message.ENDPOINT_ADDRESS, "http://some-valid-endpoint") ; 
+0

这在CXF 2.7.12中不适用于我。 – 2016-08-15 18:04:58