2012-09-24 79 views
0

我正在使用wsdl2java生成服務。對於代論據如下:Axis2實現和存根問題

-p com.dummy.tst.service -u -f -sp -s -b -ssi -d xmlbeans -uri /some/path/service.wsdl -ss -g -sd -o /some/path/gen 

代我有跟線services.xml文件後像

<parameter name="ServiceClass">com.dummy.tst.service.TestSoapBindingImpl</parameter> 

然後在根目錄下我有TestSoapBindingImpl.java用的方法列表,但每個方法的定義如下

throw new java.lang.UnsupportedOperationException("Please implement " + this.getClass().getName() + "#myMethod"); 

而且也有它實際上包含實施方法TestSoapBindingStub.java文件。在axis-1中只有一個文件帶有方法描述和實現,而在axis-2中我有兩個文件。

我應該如何處理這些文件? Impl文件(指定爲默認服務方法容器(在services.xml中)僅包含虛擬變量),因此我無法使用已部署的服務,並將ServiceSoapBindingImpl替換爲services.xml中的T​​estSoapBindingStub,也不會導致所需的結果。

回答

1

TestSoapBindingStub.java是爲客戶端。它包含調用遠程系統上的Web服務的代碼。

在服務方面,每次請求進入時,Axis2都會創建一個類型爲services.xml的對象作爲ServiceClass。然後它將使用客戶端提供的對象在ServiceClass對象內調用請求的函數。

使用由wsdl2java生成的代碼,每次調用該服務都將創建一個om.dummy.tst.service.TestSoapBindingImpl類型的對象,正如您所指出的那樣,它將爲每個調用都引發異常。有兩種方法可以提供工作服務。

  1. 您可以使用TestSoapBindingImpl.java文件,你必須作爲一個起點。從每個功能中刪除throws行,並在請求進入時用實際想要執行的代碼填充每個功能體。

  2. 或者,您可以使用services.xml作爲起點。定義一個你自己的類作爲服務類。將引用com.dummy.tst.service.TestSoapBindingImpl替換爲您自己的服務類的名稱。 wsdl2java可能生成了一個名爲TestSoapBindingSkeleton.java的文件,它定義了服務類應實現的接口。你的自定義服務類應該實現這個接口。

我一直在使用的項目使用方法#2。我們編寫自己的實現骨架接口的服務類。將服務打包到AAR文件時,需要在AAR中包含services.xml文件。我們的包裝規則在生成的services.xml上執行文本替換,以使用我們的服務類別的名稱更新ServiceClass。