2010-06-10 19 views
25

Ora utilizzo Apache CXF come client di servizi Web per un servizio .NET per aggirare l'autenticazione NTLM. Funziona alla grande, ma mi chiedo perché non riesco a essere in grado di impostare l'endpoint di destinazione del servizio web. CXF sembra volere il WSDL in fase di esecuzione per qualche strana ragione - non è sicuro. Prende l'endpoint fisico dal WSDL, che funziona bene negli ambienti di test, ma al momento dell'implementazione è sicuro che cambierà.Client Apache CXF per endpoint dinamici

Ecco po 'di codice per dimostrare:

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

Anche in questo caso, non c'è posto che posso vedere nel client API CXF che mi permette di impostare l'endpoint del servizio. Non che io possa vedere comunque. In questo caso, l'obiettivo è http://localhost/integration/webservices/mywebservices.asmx, ma potrei essere ovunque. Sicuramente questo problema pedonale è risolto in qualche modo?

risposta

44

Provare quanto segue:

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

In alternativa, MyWebServices potrebbe avere altri metodi getXXX che prendono un URL per la posizione WSDL

+0

non sicuro di quello intendi con la tua ultima affermazione qui – andyczerwonka

+0

Nella classe MyServices, ci sono altri metodi che restituiranno una porta che accetta un parametro URL? Puoi modificare il tuo post per incollare la firma di quella classe? – Kevin

+0

funziona come un incantesimo - grazie – andyczerwonka

10

Lavorare in cxf 2.6.1

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

Questo non ha funzionato per me in CXF 2.7.12. –

Problemi correlati