2008-10-15 196 views
3

Axis2和Eclipse是否可以生成Web服務客戶端,並讓它使用包中已有的Java類型,而不是創建它自己的類型。理由當然是如果我已經創建了類型A並創建它自己的類型AI不能只將類型A的變量分配給類型B的變量。Axis2 Web服務客戶端生成 - 無需修改客戶端的類型

wsdl是從部署到應用程序的Web Service生成的服務器。 如果無法從中生成它,可以從已有的java文件生成客戶端。

回答

3

如果你真的想重用現有的類,可以直接調用Axis2的API,而不會產生使用WSDL2Java的客戶端。以下是調用Web服務的一些相對簡單的代碼。您只需填寫Web服務端點,方法QName,期望的返回類(es)和參數到服務。你可以重用你現有的類作爲返回值或參數。

如果您的Web服務非常複雜,那麼您可能會發現您必須深入API才能使此方法奏效。

serviceClient = new RPCServiceClient(); 
Options options = serviceClient.getOptions(); 

EndpointReference targetEPR = new EndpointReference("http://myservice"); 

options.setTo(targetEPR); 

QName methodName = new QName("ns","methodName"); 

Class<?>[] returnTypes = new Class[] { String.class }; 

Object[] args = new Object[] { "parameter" }; 

Object[] response = serviceClient.invokeBlocking(methodName, args, 
       returnTypes); 
1

您正在從wsdl生成Web服務客戶端,是否正確?

wsdl2java工具知道的唯一信息就是wsdl中的信息,因此它不會知道您已創建的任何類型。

如果你可以得到類型信息到wsdl中,你可能會得到它的工作,雖然我從來沒有嘗試過。

如果你想從A型複製到B型,那麼你可以嘗試BeanUtils.copyProperties,只要類型A和類型B的設置者和獲得者匹配。

0

幾乎大部分的java webservices項目都是通過這個。我不知道.NET/C#世界是否有更優雅的解決方案。

正如Mike提到的,使用BeanUtils.copyProperties是有道理的。

BR,
〜一個

0

您可以直接使用ServiceClient類來調用Web服務,該服務僅使用XML提供調用並返回XML響應。對於不同的Web服務方法,您必須將XML響應轉換爲一些Java POJO才能使用它。只有響應處理需要在你的最後完成。你可以像從XML到Map等一樣做...

所以你不需要任何其他存根類來調用任何Web服務,只需要處理響應XML。您可以使用Castor或JAXB庫將XML轉換爲POJO。

這是你不需要每次修改你的客戶端的方式。網頁服務。你可以開發像從外部爲客戶提供響應處理程序。因此,對於每種不同的Web服務,你都會有差異。響應處理程序類即執行你的接口。

//common interface for response handlers... 
//implement this for diff. web service/methods 
public interface WSRespHandler{ 
    public Object getMeResp(Object respData); 
} 


//pass particular handler to client when you call some WS 
public class WebServiceClient { 
    public Object getResp(WSRespHandler respHandler) { 
     .. 

     return repHandler.getMeResp(xmlData); 
    } 
} 

參考:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the-Client-Side.htm

http://www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

感謝。

www.techlads.com

0

如果這個崗位仍然是任何使用別人的我讀Axis2的生成客戶指南:http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html

看來,Axis2 Eclipse插件被配置爲在集成模式下調用ADB代碼生成(請參閱http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html),從而在Web服務存根中創建內部類。我不知道,如果改變生成模式,以擴展模式(生成數據類進行stub類的)是可能的,但你可以使用WSDL2JAVA做到這一點的命令行:

%AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u 

-u選項告訴ADB代碼生成器創建數據類作爲單獨的類而不是存根中的內部類。