¿Cómo especifico el host y el puerto cuando accedo a un servicio web desde el código generado por JAX-WS?

StackOverflow https://stackoverflow.com/questions/649019

  •  19-08-2019
  •  | 
  •  

Pregunta

Tengo un archivo WSDL para un servicio web. Estoy usando JAX-WS / wsimport para generar una interfaz de cliente para el servicio web. No sé de antemano el host en el que se ejecutará el servicio web, y casi puedo garantizar que no será http : // localhost: 8080 . Cómo especificar la URL del host en tiempo de ejecución, p. de un argumento de línea de comandos?

El constructor generado MyService (URL wsdlLocation, QName serviceName) no parece ser lo que quiero, pero tal vez lo es. Quizás una de las variantes de Service.getPort (...) ?

¡Gracias!

¿Fue útil?

Solución

El constructor debería funcionar bien para sus necesidades, cuando cree MyService, pásele la url del WSDL que desee, es decir, http: // someurl: someport / service? wsdl .

Otros consejos

Si observa la fuente generada cerca del constructor generado, debería ser capaz de averiguar qué poner en ella desde el constructor predeterminado, debería verse así:

public OrdersService() {
    super(WSDL_LOCATION, new QName("http://namespace.org/order/v1", "OrdersService"));
}

Debería poder encontrar la definición de WSDL_LOCATION en el campo estático más arriba en la clase.

En su código generado (por ejemplo: say " HelloWorldWebServiceImplService ") observe el bloque estático en la parte superior que tendrá referencia al archivo WSDL url o wsdl que se encuentra bajo META-INF.

 /*
static {
    URL url = null;
    try {
        url = new URL("http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
    } catch (MalformedURLException e) {
        java.util.logging.Logger.getLogger(HelloWorldWebServiceImplService.class.getName())
            .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
    }
    WSDL_LOCATION = url;
}
*/

Una vez que comenta esto, también debe comentar el constructor predeterminado y no hace falta decir que inicialice el WSDL_LOCATION estático = nulo; (a nulo) Por lo tanto, no tendrá dos constructores como se muestra a continuación.

public final static URL WSDL_LOCATION = null;
public HelloWorldWebServiceImplService(URL wsdlLocation) {
    super(wsdlLocation, SERVICE);
}

public HelloWorldWebServiceImplService(URL wsdlLocation, QName serviceName) {
    super(wsdlLocation, serviceName);
}

Llamar al servicio web: ahora en la llamada del cliente donde crea una instancia de este objeto Pase la URL del servicio web como argumento como se muestra

   //You can read mywebserviceURL from property file as String.
    String mywebserviceURL = "http://myqamachine.com/HelloWorld/HelloWorldWebServiceImpl?wsdl"
    URL WsURL = new URL(mywebserviceURL);
    HelloWorldWebServiceImplService webService = new HelloWorldWebServiceImplService(WsURL);

Entonces, aquí puede apuntar la URL del servicio web dinámicamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top