从客户端,如果我想访问Web服务,我只需使用wsimport
为其生成代理。这是我的网络服务参考。
注释@WebServiceRef在哪里发挥作用?它是否仅用于服务器端,以获取对同一环境中托管的Web服务的注入引用?
答案 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服务引用的功能,以下是准备注入目标: