我想知道是否有人可以推荐一个好的库来生成java webservices存根作为客户端。
目前我正在使用嵌入了生成器的产品,该生成器只需要WSDL,然后创建所需的类和方法。
我的问题是它会抛出警告而不会为我正在尝试使用的某些web服务创建任何方法。
真正的问题是它没有解释问题是什么(因此我可以与网络服务的所有者一起进行修改)也不让我修改输出,这样我就可以解决问题了。
然而,网络服务的所有者(因为这发生在几个不同的ws)说他们的ws运行良好,实际上如果我使用soapUI他们实际上工作!
我快速浏览了它自己使用的soapUI库,看起来很有希望。
我知道有Axis应该做的工作,但我担心的是我失败的生成器已经使用了该库(这使我的东西再次失败)
最近我不知道这两个库是否生成了java源存根或只有像
这样的方法Object [] args = ...;
service.inkvoke("updateCustomer", args );
当我想拥有的东西是:
CustomerWs cws = ....
cws.updateCustomer(custId, custName, custAddress /*etc*/ );
那么,任何人都有推荐的 GOOD ws存根生成器?
我要自己手工编码,但肯定需要几天才能接受
答案 0 :(得分:3)
当你提到“Axis”时要非常小心:Apache Axis 1在2006年初被遗弃,线程安全漏洞导致死锁和CPU旋转(我们都经历过)。你会深感遗憾地使用它。 Apache Axis 2是一个完整的重写,可能值得一看。但我建议您先查看Apache CXF和Glassfish Metro。
更新:以下是deadlock和100% CPU spin的错误报告。这是三年前Cyrille Le Clerc的proposed patch,从未犯下过。
我们通过直接Java重新编码客户端来消除我们的死锁和旋转。然后Axis服务器拒绝与我们交谈,发回HTTP 500错误。我们需要错误地声称我们是Axis客户以获得正确的回复。 SOAP互操作性不是Axis 1团队的优先考虑事项。
答案 1 :(得分:2)
你目前在使用什么?我使用Axis Wsdl2Java作为Ant任务。它会生成所需的存根类型。虽然设置运行构建的类路径很有用,但Eclipse中有点痛苦(我需要追踪并包含一些罐子)。在我的ant buildfile中,它看起来像这样:
<taskdef name="axis-wsdl2java" classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask" />
<target name="foo">
<axis-wsdl2java
output="${build.dir}"
testcase="false"
verbose="true"
typemappingversion="1.2"
url="http://ws.domain.com/url/of/WebService?wsdl" />
<!-- Compile, etc... -->
</target>
答案 2 :(得分:2)
我喜欢Apache CXF - 它通过插件与Maven很好地集成,它可以工作。我已经使用它一段时间来生成客户端存根代码,而在我工作的最后一家公司,他们也将它用于WS的服务器部分。
在我使用CXF + Maven + Subversion工作的最后一个项目中,我们没有在Subversion中包含生成的类,只包含WSDL文件的副本 - 存根类是在Maven的“生成”目标中生成的
答案 3 :(得分:1)
Apache Axis 2是要走的路......虽然你可能需要玩一下才能做到正确。这可能是最常见的方式。也许您使用的工具基于Axis 1?
答案 4 :(得分:1)
我肯定会建议使用基于标准API的东西。这意味着JAX-WS API。 Apache CXF和Metro是两个主要的JAX-WS实现,尽管JBoss也有一个实现。 Axis2有一个未经认证的实现,但没有代码生成支持。
使用基于标准的API的最佳部分是,如果您遇到产品问题,您可以尝试另一个。在很多情况下,我已经看到,其他产品也不起作用,但会吐出不同的错误信息或类似信息,这有助于诊断它在我们自己的代码或wsdl中确实存在问题这一事实。
此外,JAX-WS内置于Java6中。如果你打算在Java6上运行,你可以使用它而不必处理额外的jar等。
答案 5 :(得分:0)
作为metro(http://metro.dev.java.net)的一部分,最新的JAX-WS是一个非常好的抽象层。需要稍加调整,但对我来说比其他一些选项更直观。