2011-10-17 3 views
0

Je crée un client webservice en utilisant Metro avec JAX-ws et je veux remplacer l'adresse de point de terminaison.Metro avec point de terminaison de priorité JAX-ws adresse

En utilisant l'exemple suivant de 2.11.1. BindingProvider.ENDPOINT_ADDRESS_PROPERTY Je peux le faire: http://metro.java.net/guide/How_to_invoke_and_endpoint_by_overriding_endpoint_address_in_the_WSDL.html

//Create service and proxy from the generated Service class. 
HelloService service = new HelloService(); 
HelloPort proxy = service.getHelloPort(); 

((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
                "http://new/endpointaddress"); 

proxy.sayHello("Hello World!"); 

Mais je ne comprends pas pourquoi je ne peux pas utiliser le service.getHelloPort() sayHello ("Bonjour tout le monde!") au lieu de . proxy.sayHello ("Bonjour tout le monde!") comme le montre l'exemple. Si c'est le cas, le client webservice utilise son adresse de point de terminaison par défaut à la place de celle que je souhaite utiliser.

On dirait que je reçois une nouvelle instance de HelloPort chaque fois que j'appelle getHelloPort()

Quelqu'un peut-il expliquer cela?

+0

Quel est votre code? Comment remplacez-vous l'adresse de point de terminaison? – Osw

+0

mis à jour avec un exemple de code. J'ai aussi eu quelques indications ailleurs. System.out.println (service.getHelloPort() == service.getHelloPort()) affiche false, il semble donc que je reçois une nouvelle instance pour chaque appel getHelloPort() – Gotcha

Répondre

1

il y a peu (lire: non) différence entre ceux-ci:

service.getHelloPort().sayHello("Hello World"); 

et

HelloPort proxy = service.getHelloPort(); 
proxy.sayHello("Hello World!"); 

l'appel service.getHelloPort() va toujours retourner un nouveau proxy/instance port. Ainsi, chaque fois que vous modifiez le contexte de la demande pour un objet de port donné, cette modification est locale à l'instance de port spécifique. En règle générale, l'instance de port que vous récupérez est réutilisable et thread sûre tant que vous ne modifiez pas les contextes de requête/réponse. Pour l'exemple de code que vous avez posté, il modifie le contexte de la requête pour définir l'adresse du point de terminaison. Il est donc conseillé d'obtenir un nouvel objet port chaque fois que vous en avez besoin ou d'obtenir un nouvel objet pour chaque thread. un. (threadlocal est votre ami pour cela)

Questions connexes