2010-06-10 24 views
25

Używam teraz Apache CXF jako klienta usług WWW dla usługi .NET, aby obejść uwierzytelnianie NTLM. Działa wspaniale, ale zastanawiam się, dlaczego nie mogę ustawić docelowego punktu końcowego usługi WWW. Wydaje się, że CXF chce WSDL w czasie wykonywania z jakiegoś dziwnego powodu - nie jestem pewien. Wymaga fizycznego punktu końcowego z WSDL, który działa dobrze w środowiskach testowych, ale w czasie wdrażania na pewno się zmieni.Klient Apache CXF dla dynamicznych punktów końcowych

Oto niektóre kodu do wykazania:

 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(); 

Ponownie, nie ma miejsca, które można zobaczyć w kliencie CXF API, które pozwala mi ustawić punkt końcowy serwisowym. Wcale nie mogę tego zobaczyć. W tym przypadku celem jest http://localhost/integration/webservices/mywebservices.asmx, ale mogę być wszędzie. Z pewnością ten problem z pieszymi został jakoś rozwiązany?

Odpowiedz

44

Spróbuj wykonać następujące czynności:

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

Alternatywnie MyWebServices może mieć inne metody, które mają getXXX URL dla lokalizacji WSDL

+0

nie wiem, co masz na myśli ostatnie zdanie tutaj – andyczerwonka

+0

W klasie MyServices istnieją inne metody, które zwrócą port akceptujący parametr adresu URL? Czy możesz edytować swój wpis, aby wkleić podpis tej klasy? – Kevin

+0

działa jak urok - dziękuję – andyczerwonka

10

Praca w CXF 2.6.1

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

To nie działało dla mnie w CXF 2.7.12. –

Powiązane problemy