Comment changer le point de terminaison d'url de webservice?

J'ai généré un client de service web en utilisant JBoss utils (compatible JAX-WS) utilisation D'Eclipse 'Client de service web à partir d'un wsdl'.

Donc, la seule chose que j'ai fournie était une url vers un service web WSDL.

Maintenant, le fournisseur de services web me dit de changer l '"url de client Endpoint application access" du service web.

Qu'est-ce que c'est et comment le changer?

82
demandé sur EugeneP 2010-03-22 11:15:30

3 réponses

IMO, le fournisseur vous dit de changer le point de terminaison du service (c'est-à-dire où atteindre le service web), pas le point de terminaison du client (Je ne comprends pas ce que cela pourrait être). Pour modifier le point de terminaison de service, vous avez essentiellement deux options.

Utilisez le fournisseur de liaison pour définir L'URL du point de terminaison

La première option consiste à modifier la valeur de la propriété BindingProvider.ENDPOINT_ADDRESS_PROPERTY de BindingProvider (chaque proxy implémente l'interface 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]));
...

L'inconvénient est que cela ne fonctionne que lorsque le WSDL d'origine est toujours accessible. Pas recommandé.

Utilisez le WSDL pour obtenir l'URL du point de terminaison

La deuxième option consiste à obtenir L'URL du point de terminaison à partir du 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
répondu Pascal Thivent 2010-03-22 08:59:21

Pour ajouter quelques éclaircissements ici, lorsque vous créez votre service, la classe de service utilise la valeur par défaut 'wsdlLocation', qui y a été insérée lorsque la classe a été construite à partir du wsdl. Donc, si vous avez une classe de service appelée SomeService, et que vous créez une instance comme celle-ci:

SomeService someService = new SomeService();

Si vous regardez dans SomeService, vous verrez que le constructeur ressemble à ceci:

public SomeService() {
        super(__getWsdlLocation(), SOMESERVICE_QNAME);
}

Donc, si vous voulez qu'il pointe vers une autre URL, vous utilisez simplement le constructeur qui prend un argument URL (il y a 6 constructeurs pour définir qname et features aussi bien). Par exemple, si vous avez configuré un moniteur TCP/IP local qui écoute sur le port 9999 et que vous souhaitez rediriger vers cette URL:

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

Et qui appellera ce constructeur à l'intérieur du service:

public SomeService(URL wsdlLocation) {
    super(wsdlLocation, SOMESERVICE_QNAME);
}
14
répondu MattC 2015-03-19 23:31:39

Pour modifier la propriété end address, modifiez votre fichier 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
répondu Femi 2013-11-09 10:29:43