我什么时候需要使用@WebServiceRef?

时间:2013-03-27 14:22:14

标签: java jax-ws

从客户端,如果我想访问Web服务,我只需使用wsimport为其生成代理。这是我的网络服务参考。

注释@WebServiceRef在哪里发挥作用?它是否仅用于服务器端,以获取对同一环境中托管的Web服务的注入引用?

2 个答案:

答案 0 :(得分:19)

不一定,但它确实取决于服务器实现。例如要访问远程服务,它需要访问生成的客户端,并可选择访问WSDL文档和方案文件(按照惯例) 应该在WEB-INF/wsdl),以便

public class HelloServlet extends HttpServlet {

    @WebServiceRef(HelloMessengerService.class) // class with @WebServiceClient
    private HelloMessenger port; // the SEI

    ...
}

HelloMessengerService类是存根,并且@WebServiceClient注释具有 wsdlLocation属性(指向本地远程WSDL文档)。

但你可以有类似的东西

@WebServiceRef(wsdlLocation = "META-INF/wsdl/AnyService/Any.wsdl")
private HelloMessengerService service;

@WebServiceRef
public HelloMessengerService service;

如果使用处理程序链来更改传入和传出的SOAP消息:

@WebServiceRef(HelloMessengerService.class)
@HandlerChain(file="handler-chain.xml")
private HelloMessenger port;

@WebServiceRef注释的使用必须应用于JAX-WS管理的客户端,如Servlet,EJB或其他Web服务。

答案 1 :(得分:5)

为了补充Paul Vargas的回答,@WebServiceRef注释是完成Java EE平台向完全托管环境演变的工具。以这种方式思考:

Java EE堆栈中的几乎每个组件都可以通过某种方式注入,EJB,JSF托管bean,CDI bean,@Resources等。为什么不能注入Web服务引用?通过使用此注释注入Web服务引用的功能,以下是准备注入目标:

  • 的EJB
  • Servlets(在Servlet 3.0下)
  • JSF Managed Beans
  • CDI Beans
  • 的MDB