¿Cómo cambiar el punto final de url de servicio web?


Generé un cliente de servicio web utilizando JBoss utils (compatible con JAX-WS) usando Eclipse 'cliente de servicio web desde un wsdl'.

Entonces, lo único que proporcioné fue una url a un servicio web WSDL.

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?

Author: EugeneP, 2010-03-22

3 answers

IMO, el proveedor le está diciendo que cambie el extremo del servicio (es decir, dónde llegar al servicio web), no el extremo del cliente (no entiendo qué podría ser esto). Para cambiar el extremo del servicio, básicamente tiene dos opciones.

Utilice 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 del 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 el WSDL original sigue siendo accesible. No se recomienda.

Use el WSDL para obtener la URL del endpoint

La segunda opción es obtener la URL del endpoint desde el 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]));
...
 144
Author: Pascal Thivent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-22 08:59:21

Para agregar algunas aclaraciones aquí, cuando crea su servicio, la clase de servicio utiliza el valor predeterminado 'wsdlLocation', que se insertó en él cuando la clase se construyó desde el wsdl. Así que si tienes una clase de servicio llamada SomeService, y creas 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);
}

Así que si desea que apunte a otra URL, simplemente use el constructor que toma un argumento de URL (hay 6 constructores para establecer qname y características también). Por ejemplo, si ha configurado un monitor TCP/IP local que está escuchando en el puerto 9999 y desea redirigir a esa URL:

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

Y que llamará a este constructor dentro del servicio:

public SomeService(URL wsdlLocation) {
    super(wsdlLocation, SOMESERVICE_QNAME);
}
 14
Author: MattC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-19 23:31:39

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>
 -4
Author: Femi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-09 10:29:43