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

2022-09-02 21:20:41

从客户端,如果我想访问Web服务,我只需使用.这是我的 Web 服务参考。wsimport

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


答案 1

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

public class HelloServlet extends HttpServlet {

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

    ...
}

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

但你可以有这样的东西

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

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


答案 2

为了补充Paul Vargas的答案,注释是完成Java EE平台向完全托管环境的演进的工具。可以这样想:@WebServiceRef

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

  • EJB
  • Servlets (在 Servlet 3.0 下)
  • JSF 管理豆
  • CDI 豆
  • 多边开发银行

推荐