Comment spécifier l'hôte et le port lors de l'accès à un service Web à partir du code généré par JAX-WS?

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

  •  19-08-2019
  •  | 
  •  

Question

J'ai un fichier WSDL pour un service Web. J'utilise JAX-WS / wsimport pour générer une interface client vers le service Web. Je ne connais pas à l'avance l'hôte sur lequel le service Web sera exécuté, et je peux presque garantir que ce ne sera pas http : // localhost: 8080 . Comment spécifier l'URL de l'hôte au moment de l'exécution, par exemple à partir d'un argument de ligne de commande?

Le constructeur généré MyService (URL wsdlLocation, QName serviceName) ne semble pas ce que je veux, mais c'est peut-être? Peut-être une des variantes de Service.getPort (...) ?

Merci!

Était-ce utile?

La solution

Le constructeur doit bien fonctionner selon vos besoins. Lorsque vous créez MyService, transmettez-y l'URL du fichier WSDL souhaité, par exemple http: // someurl: someport / service? wsdl .

Autres conseils

Si vous examinez la source générée à proximité du constructeur généré, vous devriez être en mesure de trouver ce qu'il faut y insérer à partir du constructeur par défaut. Cela devrait ressembler à ceci:

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

Vous devriez pouvoir trouver la définition de WSDL_LOCATION dans le champ statique situé plus haut dans la classe.

Dans votre code généré (par exemple: dites "HelloWorldWebServiceImplService"), recherchez le bloc statique en haut qui contiendra une référence à l'URL WSDL ou au fichier WSDL qui se trouve sous 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;
}
*/

Une fois que vous avez commenté ceci, vous devez également commenter le constructeur par défaut et inutile de dire que vous devez initialiser le WSDL_LOCATION statique = null; (à null) Ainsi, vous ne disposerez pas de deux constructeurs, comme indiqué ci-dessous.

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

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

Appel du service Web: maintenant dans l'appel du client où vous instanciez cet objet, transmettez l'URL du service Web en tant qu'argument, comme indiqué

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

Vous pouvez donc ici pointer dynamiquement l'URL du webservice.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top