2013-03-11 125 views
0

背景:生成CXF使用WSDL2Java的Web服務的服務器實現

我以前的經驗對消費的Apache CXF Web服務的工作,但我是一個有點新的生成服務端點接口(SEI)和使用Apache CXF分發版附帶的wsdl2java工具的服務實現。

任務:

我目前的工作將由外部系統消耗的SOAP基於Web的服務的實現。我已經定義了消息(XSD)和WSDL文件。我曾嘗試使用Apache CXF的wsdl2java工具生成SEI。使用JAXB類型作爲輸入參數並將返回類型返回到Web服務方法時,SEI會正確生成。

當我看看爲服務實現類生成的代碼時,我發現它擴展了javax.xml.ws.Service類。此外,還會生成許多重載的方法,它們與方法名稱中附加的「Soap12Http」的服務端點接口中的方法名稱相同。其中一些方法採用類型WebServiceFeature ...特性的參數,而其他方法不採用任何參數。例如:

public class Query extends Service { 

     @WebEndpoint(name = "product_query-soap12-http") 
    public IQuery getProductsSoap12Http(WebServiceFeature... features) { 
     return super.getPort(getProductsSoap12Http, IQuery.class,features); 
    } 
} 

*其中IQUERY是服務端點接口

問題:

  1. 我期待的服務實現類來實現服務端點接口,而不是擴展的javax。 xml.ws.Service。這是一個有效的期望嗎?
  2. 我在等待服務實現類實現服務端點接口中的方法。這是一個有效的期望嗎?
  3. 我也想知道是否可以要求wsdl2java命令爲JAXB POJOS生成一個jar,而不是生成它們作爲類文件。

回答

0

對於1和2,答案是否定的。生成的XXXXService類幾乎是WSDL中各種SEI代理的工廠。 wsdl中的每個端點/綁定/端口類型組合應導致對服務對象進行一系列「getXYZPort(...)」調用,以返回該特定SEI的實例。

對於3,上週cxf的工具添加了一個-clientjar選項(尚未發佈,需要最新的快照),可能接近需要。

+0

這是否意味着我需要手動編寫自己的名爲Query的類來實現IQuery並定義Web服務方法,或者是否應該將生成的服務實現類直接用作我的Web服務實現? – CKing 2013-03-11 13:20:06