【问题标题】:When will I ever need to use @WebServiceRef?我什么时候需要使用@WebServiceRef?
【发布时间】:2013-03-17 16:14:04
【问题描述】:

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

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

【问题讨论】:

  • 在 java SE 客户端中似乎不需要它://@WebServiceRef(wsdlLocation="http://localhost:8080/JaxWsExample/NewWebServiceService?wsdl") private static NewWebServiceService service = new NewWebServiceService(); 并且它可以工作
  • 但是在基于 servlet 的客户端中,它是强制性的(并且不需要实例化服务)

标签: java jax-ws


【解决方案1】:

不一定,但它确实取决于服务器实现。例如要访问远程服务,它需要访问生成的客户端以及可选的 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 服务。

【讨论】:

  • Java EE 组件和“标准”Java 类之间的区别在于,Java EE 组件被组装到 Java EE 应用程序中,它们被验证为格式正确并符合 Java EE 规范,并且它们被部署到生产环境中,它们由 Java EE 服务器运行和管理more...
【解决方案2】:

补充一下 Paul Vargas 的回答,@WebServiceRef 注释是一个工具,用于完成 Java EE 平台向完全托管环境的演进。这样想:

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

  • EJB
  • Servlet(在 Servlet 3.0 下)
  • JSF 托管 Bean
  • CDI 豆
  • MDB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2015-05-26
    • 1970-01-01
    • 2010-09-21
    • 2018-02-25
    相关资源
    最近更新 更多