J'ai généré un client de service Web à l'aide de JBoss utils (compatible JAX-WS) À l'aide du 'client de service Web Eclipse à partir d'un wsdl'.
Ainsi, la seule chose que j'ai fournie était une URL à un service Web WSDL.
À présent, le fournisseur de services Web me dit de modifier "l'URL de l'accès aux applications client" du service Web.
De quoi s'agit-il et comment le changer?
Messagerie Internet uniquement, le fournisseur vous demande de modifier le point de terminaison du service (c'est-à-dire où accéder au service Web), pas le point de terminaison client (je ne comprends pas ce que cela pourrait être). Pour changer le point de terminaison du service, vous avez essentiellement deux options.
La première option consiste à modifier la valeur de la propriété BindingProvider.ENDPOINT_ADDRESS_PROPERTY
de la 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. Non recommandé.
La deuxième option consiste à obtenir l'URL du noeud final à 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]));
...
Pour ajouter quelques précisions, lorsque vous créez votre service, la classe de service utilise la valeur par défaut 'wsdlLocation', qui lui a été insérée lors de la construction de la classe à partir de 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, utilisez simplement le constructeur qui prend un argument d'URL (il y a 6 constructeurs pour la définition de qname et de fonctionnalités également). 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 cela appellera ce constructeur à l'intérieur du service:
public SomeService(URL wsdlLocation) {
super(wsdlLocation, SOMESERVICE_QNAME);
}
Je n'irais pas aussi loin que @Femi pour change la propriété d'adresse existante. Vous pouvez facilement ajouter de nouveaux services à la section des définitions.
<wsdl:service name="serviceMethodName_2">
<wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
<soap:address location="http://new_end_point_adress"/>
</wsdl:port>
</wsdl:service>
Cela ne nécessite pas une recompilation du WSDL en Java et les mises à jour ne sont pas plus difficiles que si vous utilisiez l'option BindingProvider (qui ne fonctionnait pas pour moi, d'ailleurs).