Come specificare host e porta quando si accede a un servizio Web dal codice generato da JAX-WS?

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

  •  19-08-2019
  •  | 
  •  

Domanda

Ho un file WSDL per un servizio web. Sto usando JAX-WS / wsimport per generare un'interfaccia client per il servizio web. Non conosco in anticipo l'host su cui verrà eseguito il servizio Web e posso quasi garantire che non sarà http : // localhost: 8080 . Come specificare l'URL host in fase di runtime, ad es. da un argomento della riga di comando?

Il costruttore generato MyService (URL wsdlLocation, QName serviceName) non sembra quello che voglio, ma forse lo è? Forse una delle varianti di Service.getPort (...) ?

Grazie!

È stato utile?

Soluzione

Il costruttore dovrebbe funzionare bene per le tue esigenze, quando crei MyService, passagli l'URL del WSDL che vuoi cioè http: // someurl:?. Somport / servizio WSDL

Altri suggerimenti

Se dai un'occhiata al sorgente generato vicino al costruttore generato, dovresti essere in grado di capire cosa metterlo dal costruttore predefinito, dovrebbe assomigliare a:

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

Dovresti essere in grado di trovare la def di WSDL_LOCATION nel campo statico più in alto nella classe.

Nel tuo codice generato (ad esempio: say " HelloWorldWebServiceImplService ") cerca nel blocco statico in alto che avrà riferimento all'URL WSDL o al file wsdl che si trova sotto 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;
}
*/

Dopo aver commentato questo, devi anche commentare il costruttore predefinito e, inutile dire, inizializzare il WSDL_LOCATION statico = null; (a null) Quindi non avrai due costruttori come mostrato di seguito.

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

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

Chiamata al servizio web: Ora nella chiamata client in cui si crea un'istanza di questo oggetto Passare l'URL del servizio web come argomento come mostrato

   //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);

Quindi qui puoi indicare l'URL del servizio web in modo dinamico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top