java - retrying - ¿Cómo cambiar el punto final de la url del servicio web?
jax ws change endpoint url (3)
Genere un cliente de servicio web usando JBoss utils (JAX-WS compatible) usando el cliente de servicio web de Eclipse desde un wsdl ''.
Entonces, lo único que proporcioné fue una url a un WSDL de servicio web.
Ahora, el proveedor de servicios web me dice que cambie la "URL del acceso a la aplicación de punto final del cliente" del servicio web.
¿Qué es y cómo cambiarlo?
OMI, el proveedor le está diciendo que cambie el punto final del servicio (es decir, dónde llegar al servicio web), no el punto final del cliente (no entiendo lo que podría ser). Para cambiar el punto final del servicio, básicamente tiene dos opciones.
Use el Proveedor de enlace para establecer la URL del punto final
La primera opción es cambiar el valor de la propiedad BindingProvider.ENDPOINT_ADDRESS_PROPERTY
de BindingProvider
(cada proxy implementa la interfaz javax.xml.ws.BindingProvider
):
...
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]));
...
El inconveniente es que esto solo funciona cuando todavía se puede acceder al WSDL original. No recomendado.
Use WSDL para obtener la URL del punto final
La segunda opción es obtener la URL del punto final del 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]));
...
Para agregar algunas aclaraciones aquí, cuando crea su servicio, la clase de servicio usa el predeterminado ''wsdlLocation'', que se insertó cuando la clase se construyó desde el wsdl. Entonces, si tiene una clase de servicio llamada SomeService, y crea una instancia como esta:
SomeService someService = new SomeService();
Si miras dentro de SomeService, verás que el constructor se ve así:
public SomeService() {
super(__getWsdlLocation(), SOMESERVICE_QNAME);
}
Entonces, si quiere que apunte a otra URL, simplemente use el constructor que toma un argumento de URL (hay 6 constructores para configurar qname y las características también). Por ejemplo, si ha configurado un monitor TCP / IP local que está escuchando en el puerto 9999, y desea redireccionar a esa URL:
URL newWsdlLocation = "http://theServerName:9999/somePath"
SomeService someService = new SomeService(newWsdlLocation);
y eso llamará a este constructor dentro del servicio:
public SomeService(URL wsdlLocation) {
super(wsdlLocation, SOMESERVICE_QNAME);
}
Para cambiar la propiedad de la dirección final, edite su archivo wsdl
<wsdl:definitions.......
<wsdl:service name="serviceMethodName">
<wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
<soap:address location="http://service_end_point_adress"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>