我的网络应用程序是组织提供的一些内部Web服务的使用者。我已经看到了几个例子,其中使用类似的东西注入Web服务引用:
@WebServiceRef(name="services/MyService")
MyService myService;
但是我不知道如何在Glassfish v3中定义services / MyService JNDI对象以便它被注入。我希望通过Glassfish管理定义Web服务客户端类,并通过管理控制台指定端点URL。这样,URL就不会被硬编码并且易于管理。
最终,我还需要以与URL相同的方式指定HTTP身份验证的用户名和密码。我该怎么做呢?
答案 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");