Axis2和Eclipse是否可以生成Web服務客戶端,並讓它使用包中已有的Java類型,而不是創建它自己的類型。理由當然是如果我已經創建了類型A並創建它自己的類型AI不能只將類型A的變量分配給類型B的變量。Axis2 Web服務客戶端生成 - 無需修改客戶端的類型
wsdl是從部署到應用程序的Web Service生成的服務器。 如果無法從中生成它,可以從已有的java文件生成客戶端。
Axis2和Eclipse是否可以生成Web服務客戶端,並讓它使用包中已有的Java類型,而不是創建它自己的類型。理由當然是如果我已經創建了類型A並創建它自己的類型AI不能只將類型A的變量分配給類型B的變量。Axis2 Web服務客戶端生成 - 無需修改客戶端的類型
wsdl是從部署到應用程序的Web Service生成的服務器。 如果無法從中生成它,可以從已有的java文件生成客戶端。
如果你真的想重用現有的類,可以直接調用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);
您正在從wsdl生成Web服務客戶端,是否正確?
wsdl2java工具知道的唯一信息就是wsdl中的信息,因此它不會知道您已創建的任何類型。
如果你可以得到類型信息到wsdl中,你可能會得到它的工作,雖然我從來沒有嘗試過。
如果你想從A型複製到B型,那麼你可以嘗試BeanUtils.copyProperties,只要類型A和類型B的設置者和獲得者匹配。
幾乎大部分的java webservices項目都是通過這個。我不知道.NET/C#世界是否有更優雅的解決方案。
正如Mike提到的,使用BeanUtils.copyProperties是有道理的。
BR,
〜一個
如果你使用Eclipse作爲IDE,那就是你需要啥子:http://www.eclipse.org/webtools/。它超越了其他事情,正是你想要的。
您可以直接使用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.devdaily.com/blog/post/java/java-web-service-client-read-array-list/
感謝。
www.techlads.com
如果這個崗位仍然是任何使用別人的我讀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代碼生成器創建數據類作爲單獨的類而不是存根中的內部類。