Come cambiare l’endpoint url di webservice?

Ho generato un client di servizi Web utilizzando i programmi di utilità JBoss (compatibile JAX-WS) utilizzando il client di servizio Web di Eclipse da un wsdl ‘.

Quindi, l’unica cosa che ho fornito è stata l’URL di un WSDL del servizio web.

Ora, il fornitore di servizi web mi dice di cambiare “l’URL di accesso all’applicazione client endpoint” del servizio web.

Cos’è e come cambiarlo?

IMO, il provider ti sta dicendo di cambiare l’endpoint del servizio (cioè dove raggiungere il servizio web), non l’endpoint del client (non capisco cosa potrebbe essere). Per cambiare l’endpoint del servizio, in pratica hai due opzioni.

Utilizzare il provider di binding per impostare l’URL dell’endpoint

La prima opzione è quella di modificare il valore della proprietà BindingProvider.ENDPOINT_ADDRESS_PROPERTY di BindingProvider (ogni interfaccia implementa javax.xml.ws.BindingProvider proxy):

 ... EchoService service = new EchoService(); Echo port = service.getEchoPort(); /* Set NEW Endpoint Location */ String endpointURL = "http://NEW_ENDPOINT_URL"; BindingProvider bp = (BindingProvider)port; bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); System.out.println("Server said: " + echo.echo(args[0])); ... 

Lo svantaggio è che funziona solo quando il WSDL originale è ancora accessibile. Non consigliato.

Utilizzare WSDL per ottenere l’URL dell’endpoint

La seconda opzione è ottenere l’URL dell’endpoint dal WSDL.

 ... URL newEndpoint = new URL("NEW_ENDPOINT_URL"); QName qname = new QName("http://ws.mycompany.tld","EchoService"); EchoService service = new EchoService(newEndpoint, qname); Echo port = service.getEchoPort(); System.out.println("Server said: " + echo.echo(args[0])); ... 

Per aggiungere qualche chiarimento qui, quando crei il tuo servizio, la class di servizio usa il valore predefinito ‘wsdlLocation’, che è stato inserito al suo interno quando la class è stata creata da wsdl. Quindi se hai una class di servizio chiamata SomeService e crei un’istanza come questa:

 SomeService someService = new SomeService(); 

Se guardi all’interno di SomeService, vedrai che il costruttore ha il seguente aspetto:

 public SomeService() { super(__getWsdlLocation(), SOMESERVICE_QNAME); } 

Quindi, se vuoi che punti a un altro URL, devi semplicemente usare il costruttore che accetta un argomento URL (ci sono 6 costruttori per l’impostazione di qname e anche le caratteristiche). Ad esempio, se è stato impostato un monitor TCP / IP locale in ascolto sulla porta 9999 e si desidera redirect a tale URL:

 URL newWsdlLocation = "http://theServerName:9999/somePath" SomeService someService = new SomeService(newWsdlLocation); 

e questo chiamerà questo costruttore all’interno del servizio:

 public SomeService(URL wsdlLocation) { super(wsdlLocation, SOMESERVICE_QNAME); } 

Per modificare la proprietà dell’indirizzo finale, modifica il tuo file wsdl