2013-03-27 219 views
17

從客戶端,如果我想訪問一個Web服務,我就簡單地生成一個代理它使用wsimport了。這是我的Web服務參考。我什麼時候需要使用@WebServiceRef?

凡則沒有註釋@WebServiceRef發揮作用?它是否僅用於服務器端,以獲得對託管在同一環境中的Web服務的注入引用?

+0

在java SE客戶端中並不需要它,因爲看起來像這樣:// @ WebServiceRef(wsdlLocation =「http:// localhost:8080/JaxWsExample/NewWebServiceService?wsdl」) \t私有靜態NewWebServiceService服務= new NewWebServiceService();並且它工作 – ACV 2015-10-26 09:46:51

+0

但是在基於servlet的客戶端中,它是基本的(並且不需要實例化服務) – ACV 2015-10-26 09:51:55

回答

18

不一定,但它確實是一件取決於服務器的實現。例如要訪問一個遠程服務,它需要能夠訪問生成的客戶端和可選的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,o另一個Web服務。

+1

Java EE組件和「標準」Java類之間的區別在於Java EE組件被組裝到一個Java EE應用程序中,它們被驗證爲格式良好並符合Java EE規範,並且它們被部署到生產環境中,在那裏它們由Java EE服務器運行和管理。 [更多...](http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabb) – 2013-03-30 12:51:21

5

爲了增加Paul Vargas的答案,@WebServiceRef註解是一個完成Java EE平臺向完全管理環境的演變的工具。想想這樣:

幾乎Java EE棧中的每個組件都可以通過某些方式注入,EJB,JSF託管的bean,CDI bean,@Resources等。爲什麼不能注入web服務引用?使用此註釋注入一個web服務參考的能力,下面的準備注射的目標:

  • 的EJB
  • Servlet的(下的Servlet 3.0)
  • JSF管Bean
  • CDI豆
  • 的MDB
相關問題