2011-09-16 11 views
5

Abbiamo un file WSDL centrale che descrive un servizio Web. Utilizziamo CXF per generare codice client, ma questo codice sembra essere associato a 1 endpoint. Come posso creare un client CXF che utilizza WSDL, ma dove posso specificare l'endpoint? È possibile modificare l'endpoint in un URL che implementa lo stesso WSD :?Come creare un client Webservice CXF con endpoint dinamico?

risposta

9

Se il servizio other implementa lo stesso WSDL, quando si crea l'oggetto MyClientService, è possibile passare l'URL al WSDL del nuovo servizio direttamente al costruttore e lo farà. La maggior parte dei servizi esporrà la sua wsdl su? Wsdl, quindi l'uso di quest'ultima potrebbe "funzionare".

In alternativa, è possibile ignorare l'URL endpoint tramite:

((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_URL, "http://my.service.url.com/...") 

dove proxy è l'oggetto MyClientService.

+0

L'implementazione del servizio "altro" implementa effettivamente lo stesso wsdl. Ho controllato il codice generato e ho un oggetto factory che mi dà un oggetto. non vedo alcun modo su come specificare l'url sofar .. qualche suggerimento su questo? – Marco

1

è possibile utilizzare JaxWsProxyFactoryBean per chiamare in modo dinamico un servizio

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 

factory.setServiceClass(ChangeStudentDetails.class); 
factory.setAddress("http://localhost:8081/CXFTutorial/ChangeStudent"); 
+1

non ti sei dimenticato di chiamare 'factory.create()'? – Zarathustra

4

Lavorare in cxf 2.6.1

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

javax.xml.ws.WebServiceException: Impossibile trovare wsdl: informazioni sull'operazione vincolante per il metodo web XXXX.
a org.apache.cxf.jaxws.JaxWsClientProxy.invoke (JaxWsClientProxy.java:125)
a com.sun.proxy. $ Proxy82.getUser (fonte sconosciuta)

Se questo errore si è verificato poi aggiungere annotazione Webservice alla tua interfaccia lato client che è già sviluppata sul lato del servizio.

Ho affrontato questo problema, ho configurato Spring con CXF. Ho già sviluppato il servizio e chiamandolo dal client.

Spero che questo possa essere d'aiuto.