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

Jop*_*ops 17 java jax-ws

从客户端来看,如果我想访问Web服务,我只需使用它生成代理wsimport.这是我的Web服务参考.

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

Pau*_*gas 20

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

public class HelloServlet extends HttpServlet {

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

HelloMessengerService类是短截线,并且具有@WebServiceClient具有注释 wsdlLocation属性(点到本地ö远程WSDL文档).

但你可以有类似的东西

@WebServiceRef(wsdlLocation = "META-INF/wsdl/AnyService/Any.wsdl")
private HelloMessengerService service;
Run Code Online (Sandbox Code Playgroud)

要么

@WebServiceRef
public HelloMessengerService service;
Run Code Online (Sandbox Code Playgroud)

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

@WebServiceRef(HelloMessengerService.class)
@HandlerChain(file="handler-chain.xml")
private HelloMessenger port;
Run Code Online (Sandbox Code Playgroud)

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


kol*_*sus 5

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

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

  • EJB的
  • Servlet(在Servlet 3.0下)
  • JSF Managed Beans
  • CDI豆
  • 多边开发银行