如何通过Glassfish JNDI注入@WebServiceRef资源?

时间:2010-05-27 21:24:15

标签: glassfish jax-ws jndi

我的网络应用程序是组织提供的一些内部Web服务的使用者。我已经看到了几个例子,其中使用类似的东西注入Web服务引用:

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

但是我不知道如何在Glassfish v3中定义services / MyService JNDI对象以便它被注入。我希望通过Glassfish管理定义Web服务客户端类,并通过管理控制台指定端点URL。这样,URL就不会被硬编码并且易于管理。

最终,我还需要以与URL相同的方式指定HTTP身份验证的用户名和密码。我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

我不知道定义“全局”JNDI名称的方法,但您可以在web.xml中编写一个可以工作的service-ref元素:

<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>

然后,您可以使用您提到的带注释的字段。

对于用户名和密码,一旦从服务获得代理,您可以将其转换为BindingProvider,然后设置属性:

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