【问题标题】:Generating Java from WSDL for use on Android with ksoap2-android SOAP client?使用 ksoap2-android SOAP 客户端从 WSDL 生成 Java 以在 Android 上使用?
【发布时间】:2012-02-25 20:31:22
【问题描述】:

我必须从 Android 应用程序访问现有的 SOAP 网络服务。我得到了一些描述 web 服务的 WSDL 文件。阅读一些other answers here on SO,似乎ksoap2-android 是要走的路,关于使用哪个SOAP 客户端。

接下来的问题是如何从 WSDL 文件生成所需的 Java 类,这就是我的不足之处。据我所知,有以下选项:

  1. AXIS2 code generator
  2. WSDL2ksoap
  3. JAX-WS wsimport tool

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

我无法成功运行 wsdl2ksoap,因为它似乎需要一个正在运行的 web 服务,而我目前只有 WSDL 文件。同样从浏览网页来看,这似乎是一个处于初期阶段的项目,并没有真正准备好迎接黄金时段。

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

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

非常感谢。

(PS:是的,选择是 SOAP,它不适合 Android 使用,但我无法更改。)

【问题讨论】:

  • 您是否成功地从 WSDL for android 生成文件?
  • @Jashan:最后我们使用 AXIS2 转换了 WSDL 文件,然后编写了一堆自定义脚本来剥离生成的 java 文件并将其转换为使用 ksoap2-android 库构建在 android 上的东西.非常hackish,需要大量的体力劳动才能运行。很遗憾。如果您找到更好的方法,请告诉我。 :)
  • 谢谢你,如果我找到了我会分享的东西.. :)
  • 实际上,现在我可以在 eclipse 中使用项目菜单中的 eclipse webservice 客户端转换 wsdl url 来获取类。
  • 希望即将到来。我们正在开发一个使用 ksoap 库的 Android 代码生成器。现在它适用于 WCF 服务,我们编写了一个易于使用的 Eclipse 插件 + 热键,可以轻松刷新。到目前为止,我们没有遇到任何问题,它可以节省数小时编写 ksoap 类的时间

标签: java android soap wsdl ksoap2


【解决方案1】:

我发现这个工具可以自动生成 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);
}

【讨论】:

  • 但这仅适用于 .net 网络服务
  • 它也适用于其他网络服务,除了像肥皂方法名称这样的小改动
  • 这个工具非常棒,为我节省了大量时间。我是粉丝。
  • 现在不可用
  • @SergeyUr 这也是困扰我的地方。更改了 WebService,需要重新生成 Android 类。你找到好的替代品了吗?
【解决方案2】:

我有类似的情况(我只有 wsdl 文件而没有工作的 web 服务)。我用过

http://easywsdl.com/

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

【讨论】:

  • 我第二个是他们为我们项目中的 Java 客户端提供了高质量的代码。
【解决方案3】:

经过大量研究,我得出的结论是,不幸的是,没有这样的(成熟的)工具可用。 AXIS2 或 JAX-WS 都不能在 Android 上运行,而且 WSDL2ksoap 太不成熟,无法真正使用。

但是有一个名为wsclient++ 的专有工具可以很好地完成这项工作。 (看下面的更新,实际使用的时候,根本站不住脚。)它不使用kso​​ap2-android客户端库,它有自己的。

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

wsdl 到 java 的生成器非常完美,可以为我们节省大量时间。

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

我们不再使用 wsclient++,我不会推荐任何人使用它! 不幸的是,我们还没有真正找到任何可行的替代方案。 :/

最后,我们使用 AXIS2 转换了 WSDL 文件,然后编写了一堆自定义脚本来剥离生成的 java 文件并将其转换为使用 ksoap2-android 库构建在 android 上的东西。非常hackish,需要大量的体力劳动才能运行。很遗憾。如果您找到更好的方法,或者出现了一种方法,请提供新的答案。

【讨论】:

  • @Bjarke,我正在尝试在 Android 上实现 wsdl,您是否假装出售您的 wsclient++ 许可证?我想试试看,wsdl2ksoap 不是很好。
  • 这还那么麻烦吗?或者现在我们在 2017 年有一些不错的工具
  • @sliders_alpha 不知道,我不再从事那个项目了。考虑到可能已经过去了几年,您可以在要求更好解决方案的问题上打开奖金?
  • 很抱歉提出这么老的话题。您是否尝试过使用 ksoup2 库?它是否完成了这项工作,而不是必须使用问题中提到的存根生成器来生成所有这些类?
  • @BjarkeFreund-Hansen 我知道您不再从事该项目,但如果您能回答,我有一个问题,请。为什么需要从 WSDL 文件生成 java 文件? ksoup2 库不能完成这项工作吗?
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

    http://ksoap2-stub-gen.sourceforge.net/

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

    http://www.davidgouveia.net/2011/04/online-stub-generator-for-android-applications-using-ksoap2/

    【讨论】:

    • 我不得不承认,当前版本(截至 2012.04.23)相当糟糕 - 它无法为某些复杂类型和数组正确生成存根。
    • 它似乎不再可用了。
    • @Hong 刚刚对其进行了测试,并且可以下载和在线版本。
    • 感谢您的检查。我想知道我是否正在查看错误的页面。我按照第一个链接登陆:sourceforge.net/projects/ksoap2-stub-gen/files 页面显示:“这个项目没有文件”
    • @Hong 你说得对,文件不见了(我刚刚检查了项目主页)。通过第二个链接访问的在线存根生成器仍然有效(我昨天测试了那个)。此外,可下载版本似乎移至此处:sourceforge.net/projects/ksoap2genstub/files/?source=navbar
    【解决方案6】:

    我也为 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 次单击向导而我们执行其他单击表单以获取生成的代码会不好。至少虽然应用程序不是一个庞大的应用程序,但甚至超出了为移动设备优化一些接口实现的预算。

    【讨论】:

      猜你喜欢
      • 2013-08-20
      • 1970-01-01
      • 2010-12-01
      • 2014-01-24
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多