我必须从Android应用程序访问现有的SOAP Web服务。我已经提供了一些描述webservice的WSDL文件。阅读一些other answers here on SO,似乎ksoap2-android是关于使用哪个SOAP客户端的方法。
接下来的问题是如何从WSDL文件中生成所需的Java类,这就是我要做的事情。据我所知,有以下几种选择:
我最初尝试#1,使用AXIS2 eclipse插件为wsdl2code生成器。该向导确实成功生成了大量的Java代码,但是它也将我的android项目改为某种web服务项目,我从来没有能够获得任何生成的编译,更不用说使用ksoap2-android。有人有这个成功吗?
我无法成功运行wsdl2ksoap,因为它似乎需要一个正在运行的Web服务,而我目前所拥有的只是WSDL文件。同样,从阅读网页开始,它似乎是一个初始阶段的项目,并没有真正准备好迎接黄金时段。
JAX-WS wsimport我还没有机会尝试。但我不确定它生成的内容是否适用于ksoap2-android?
问题:如何从WSDL文件生成Java文件,以便在Android上使用ksoap2-android SOAP客户端库?
提前多多感谢。
(PS:是的,选择是SOAP,它对于Android使用来说不是最理想的,但我无法改变它。)
答案 0 :(得分:14)
我发现这个工具可以自动生成wsdl到android代码,
http://www.wsdl2code.com/example.aspx
以下是代码:
public void callWebService() {
SampleService srv1 = new SampleService();
Request req = new Request();
req.companyId = "1";
req.userName = "userName";
req.password = "pas";
Response response = srv1.ServiceSample(req);
}
答案 1 :(得分:11)
我有类似的情况(我只有wsdl文件没有工作webservice)。我用过
为android生成类没有任何问题。此工具使用ksoap库。这个工具的优点是它支持WCF扩展和类型,如与IsReference属性或Guid的数据合同。
答案 2 :(得分:10)
经过大量研究后得出的结论是,遗憾的是,没有这样的(成熟的)工具可用。 AXIS2或JAX-WS都不适用于Android,而WSDL2ksoap对于任何实际用途来说都太不成熟了。
然而,有一个名为wsclient++的专有工具可以很好地完成这项工作。 (阅读下面的更新,当实际使用时,它根本没有距离。)它不使用ksoap2-android客户端库,它有自己的。
客户端库有点粗糙,因为它对http传输有很强的依赖性,使(单元)测试有点复杂。但它可以很容易地修改以允许DI,因为源在分布式jar文件中可用。
然而,wsdl到java生成器的工作非常完美,并且可以为我们节省大量时间。
<强>更新强>
使用wsclient++
一段时间后,显然生成的类非常粗糙,并且根本不处理错误情况。 (每个方法都声明throws Exception
)。
我们不再使用wsclient ++,我不建议任何人使用它! 不幸的是,我们还没有找到任何可行的替代方法。 :/
最后我们使用AXIS2转换了我们的WSDL文件,然后写了一堆自定义脚本来剥离并将生成的java文件转换为使用ksoap2-android库在android上构建的东西。非常hackish,需要大量的体力劳动才能运行。不幸。如果您找到了更好的方法,或者提出了更好的方法,请提供新的答案。
答案 3 :(得分:1)
我也曾在iPhone上使用过一些我想在这里看到的自动生成的类。
wsdl2code是我在iPhone上使用的类似之一。使用wsdl文件提供一个url,您将获得一些要下载的类。对我来说,下载所需部件最困难的部分。搜索需要花费超过2分钟的时间:) ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar
需要下载广告拖放到ADT(Eclipse)。它非常简单,特别是如果你在iPhone上使用了对应物。 - 我用过的类似工具。
然而在我的情况下,我对解决方案一点都不满意,因为我看到我正在使用大炮,一套大炮射击麻雀。在我的情况下,它应该使用HTTP Post并且不包括来自其他库的依赖项。
老实说我并不在乎,因为一旦服务器方面认为我们拥有无限的电池电量和无限的数据计划,我就会闭上眼睛而不关心编组 - 解组开销,使用CPU(电池)增加通过网络传输的数据。
在更糟糕的情况下,它应该是JSON + HTTP POST而不是移动设备的SOAP ...
我建议在服务器端人员谈谈,并解释为什么如果他们做2次点击向导并且我们做其他点击表单来获取生成的代码就不好。至少虽然应用程序不是一个巨大的应用程序,甚至应该是预算优化移动一些接口实现。
答案 4 :(得分:0)
我使用Apache CXF工具只是为了创建dto,我写了一个类来执行基于元素名称的基本解组
答案 5 :(得分:0)
有点晚了,但是正在开发一个ksoap2存根生成器,我成功地使用它来创建存根。
http://ksoap2-stub-gen.sourceforge.net/
也有人将其作为在线服务提供(即您提供WSDL的URL,该服务将返回包含存根的zip文件)。
http://www.davidgouveia.net/2011/04/online-stub-generator-for-android-applications-using-ksoap2/