使用ksoap2 Android SOAP客户端从WSDL生成用于Android的Java?

使用ksoap2 Android SOAP客户端从WSDL生成用于Android的Java?,java,android,soap,wsdl,ksoap2,Java,Android,Soap,Wsdl,Ksoap2,我必须从Android应用程序访问现有的SOAP Web服务。已经向我提供了一些描述Web服务的WSDL文件。阅读一些文章,就使用哪种SOAP客户端而言,这似乎是一条路要走 接下来的问题是如何从WSDL文件中生成所需的Java类,这就是我要讨论的问题。据我所知,有以下几种选择: 我最初尝试了#1,使用用于wsdl2code generator的AXIS2 eclipse插件。该向导确实成功地生成了大量Java代码,但是它也将我的android项目更改为某种Web服务项目,而且我永远无法获得

我必须从Android应用程序访问现有的SOAP Web服务。已经向我提供了一些描述Web服务的WSDL文件。阅读一些文章,就使用哪种SOAP客户端而言,这似乎是一条路要走

接下来的问题是如何从WSDL文件中生成所需的Java类,这就是我要讨论的问题。据我所知,有以下几种选择:

  • 我最初尝试了#1,使用用于wsdl2code generator的AXIS2 eclipse插件。该向导确实成功地生成了大量Java代码,但是它也将我的android项目更改为某种Web服务项目,而且我永远无法获得生成的任何东西进行编译,更不用说使用ksoap2 android了。有人在这方面取得了成功吗

    我无法成功运行wsdl2ksoap,因为它似乎需要一个正在运行的Web服务,而在当前时间点,我只有WSDL文件。同样,从网页上看,这似乎是一个处于初始阶段的项目,并没有真正做好黄金时段的准备

    JAX-wsimport我还没有机会尝试。但是,我不确定它生成的内容是否适用于ksoap2 android

    问题:如何从WSDL文件生成Java文件,以便在Android上使用ksoap2 Android SOAP客户端库?

    先谢谢你


    (注:是的,选择是SOAP,它对于Android的使用是次优的,但我不能改变这一点。)

    经过一番研究后,我得出的结论是,不幸的是,没有这样的(成熟的)工具可用。AXIS2和JAX-WS都不能在Android上工作,WSDL2ksoap对于任何实际使用来说都太不成熟了

    然而,有一个名为的专有工具可以很好地完成这项工作。(阅读下面的更新,当它投入实际使用时,它根本站不住距离。)它不使用ksoap2 android客户端库,它有自己的

    客户端库有点粗糙,因为它对http传输有很强的依赖性,这使得(单元)测试有点复杂。但是可以很容易地修改它以允许DI,因为源代码在分布式jar文件中可用

    然而,wsdl-to-java生成器工作得非常完美,将为我们节省大量时间

    更新 使用
    wsclient++
    一段时间后,很明显生成的类非常粗糙,根本不处理错误情况。(每个方法都声明
    抛出异常

    我们不再使用wsclient++,我不建议任何人使用它 不幸的是,我们还没有找到任何可行的替代方案/


    最后,我们使用AXIS2转换了WSDL文件,然后编写了一组自定义脚本,将生成的java文件剥离并转换为使用ksoap2 android库在android上构建的文件。非常老练,需要大量的人工来运行。不幸的是。如果您找到了更好的方法,或者有了更好的方法,请提供一个新的答案。

    我使用ApacheCXF工具只是为了创建dto,并且我编写了一个类来基于元素名称执行基本的解组。

    在这方面有点晚,但是有一个ksoap2存根生成器正在开发中,我成功地使用它来创建存根

    还有人将其作为在线服务提供(即,您提供WSDL的URL,服务将返回包含存根的zip文件)


    我发现这个工具可以自动生成wsdl到android代码

    代码如下:

    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);
    }
    

    我在iPhone上也使用了一些我想在这里看到的自动生成类

    是我在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个点击向导,而我们使用其他的点击表单来获取生成的代码,那就不好了。至少,虽然该应用程序不是一个庞大的应用程序,但它甚至超出了为一些移动接口实现进行优化的预算

    我也遇到过类似的情况(我只有wsdl文件,没有使用webservice)。我用过


    为android生成类而没有任何问题。此工具使用ksoap库。该工具最大的优点是它支持WCF扩展和类型,如带有IsReference属性或Guid的数据协定。

    我必须承认,当前版本(截至2012.04.23),非常蹩脚-它将无法为某些复杂类型和数组正确生成存根。它似乎不再可用。@Hong刚刚测试了它并正常工作,包括可下载版本和在线版本。感谢您的检查。我想知道我是不是看错了一页。我按照第一个链接登陆:页面显示:“这个项目没有文件”@Hong You是对的,文件不见了(我刚刚查看了项目主页)。可通过第二条链路访问的在线存根生成器仍然工作(即