2010-05-27 14 views
2

Mon application Web est un client de certains services Web internes fournis par l'organisation. Je l'ai vu quelques exemples où une référence de service Web est injecté à l'aide quelque chose comme:Comment injecter des ressources @WebServiceRef via Glassfish JNDI?

@WebServiceRef(name="services/MyService") 
MyService myService; 

Mais je ne sais pas comment définir les services/MyService objet JNDI dans Glassfish v3 telle qu'elle s'injecté. Je souhaite définir la classe client webservice via l'administration Glassfish et également spécifier l'URL du point de terminaison via la console d'administration. De cette façon, les URL ne sont pas codées en dur et peuvent être facilement gérées.

Éventuellement, je devrai également spécifier le nom d'utilisateur et le mot de passe pour l'authentification HTTP, de la même manière en dehors de l'URL. Comment je vais y aller?

Répondre

2

Je ne sais pas d'un moyen de définir un nom JNDI « global », mais vous pouvez écrire un élément de service-ref dans web.xml qui fonctionnera:

<service-ref> 
    <service-ref-name>services/MyService</service-ref-name> 
    <service-interface>service.MyEndpointService</service-interface> 
    <wsdl-file>http://example.com/MyWsdl</wsdl-file> 
</service-ref> 

Vous pouvez alors utiliser la champ annoté que vous avez mentionné.

Pour le nom d'utilisateur et mot de passe, une fois que vous obtenez un proxy du service, vous pouvez le jeter aux BindingProvider puis définir les propriétés:

MySEI proxy = myService.getMyEndpointPort(); 
BindingProvider bp = (BindingProvider)proxy; 
Map<String, Object> rc = bp.getRequestContext(); 
rc.put(BindingProvider.USERNAME_PROPERTY, "myuser"); 
rc.put(BindingProvider.PASSWORD_PROPERTY, "mypass"); 
+0

Merci pour votre réponse à cette question de longue date. Je suppose que l'utilisation de votre méthode fonctionne. Le nom d'utilisateur et le mot de passe peuvent également faire partie du contexte-param de l'application web.xml afin qu'ils soient récupérés au même endroit. Puisque nous le mettons dans web.xml, cela fonctionnerait-il aussi dans Tomcat? – jbx

+0

J'ai des doutes à ce sujet en travaillant dans Tomcat puisque Tomcat n'implémente pas JSR-109. Je n'ai pas essayé, cependant. –

+0

Qu'en est-il de spécifier l'URL réelle du point de terminaison? Idéalement, cela est également configuré ici. L'URL dans les liaisons WSDL n'est parfois pas l'URL réelle du point de terminaison du service Web auquel vous souhaitez vous connecter. – jbx