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
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
.
è 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");
non ti sei dimenticato di chiamare 'factory.create()'? – Zarathustra
Lavorare in cxf 2.6.1
Client client = ClientProxy.getClient(port);
client.getRequestContext().put(Message.ENDPOINT_ADDRESS, "http://some-valid-endpoint") ;
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.
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