有哪些方法可以从WSDL文件自动生成Java客户端存根?

我是Web服务的新手,已阅读有关XML,SOAP和WSDL的一些信息。 这很有趣! 我正在开发一个拥有Web服务和客户端的现有项目。 然而,客户端’高层’对客户端应用程序不满意。 它太复杂了,他们想要一个更容易扩展的用户友好和更简单的应用程序。

该项目使用Apache Axis2。 我找到了WSDL文件,并希望基于此构建一个客户端。 但是出于上述原因(他们的意见)我不想使用Axis2。 我想知道如果我必须使用已经存在的代码(wsdl文件),我可以做一个更简单的客户端有没有人知道我可以用来根据现有的WSDL文件自动生成客户端存根的任何其他方法? 我听说过wsimport,即使wsdl文件是使用Axis2创建的,这仍然可以工作吗?

非常感谢任何帮助或提示。

好吧,我们使用的是xfire,但不是以wsdl为中心的方法:wsdl是从暴露的远程接口动态创建的。 客户端具有相同的接口,这些接口自动映射到生成的wsdl。

AFAICS xfire演变为CXF, CXF主页告诉我:

CXF支持使用WSDL进行合同优先开发,以及从Java开始进行代码优先开发。 对于REST,CXF还支持JAX-RS(符合TCK)前端。

据我所知 ,如果你选择基于wsdl,你需要wsdl2java工具从现有的WSDL文件生成客户端存根。 如果两个对等体都运行java,那么以Java为中心的方法是适用的并且更加透明(因为服务接口/ POJO可以在客户端/服务器之间共享,运行时生成的传输没有任何存根/代理生成步骤)。

请参阅步骤1:生成骨架代码 :

要生成框架和必需的类,可以使用Axis2中提供的WSDL2Java工具。 此工具位于发行版的bin目录中,可以使用提供的脚本(.bat或.sh)执行。

$ wsdl2java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans -o ../samples -p org.apache.axis2.userguide 

试试wsimport 。 我以前用过它。 那时我决定反对Axis2,因为它产生了更复杂和更臃肿的存根来编码。

使用SOAP的一个优点是可用的客户端库丰富。 最好向您的客户询问他们首选的实施技术。

能够支持Java或C#客户端的客户将立即声明他们对他们最喜欢的锤子的忠诚:-)

如果您的客户不关心它意味着他们只是想要一些“有效”且“容易/便宜维护”的东西。 如果是这种情况,那么我建议在下面的答案中给出一个解决方案

我是Axis2的忠实粉丝,但根据我的经验,CXF从复杂的WSDL中生成更多可读代码。 即便如此,API很少可用…… WSDL倾向于过度设计复杂且多层次的XML模式inheritance……客户端总是责怪“不可读”客户端代码的代码生成框架在没有昂贵的XML设计工具的帮助下无法解释无法解释的接口规范:-)

我的建议? 如果您控制服务器端代码,那么简化WSDL以便它validation相同的SOAP消息。 您会注意到客户端代码也变得更加简单,您将更好地了解您的Web服务提供的内容。

替代方案(如果您不控制WSDL)使用像SOAPUI这样的工具来查看正在交换的实际SOAP / XML,并直接生成这些XML消息。

我使用在使用Eclipse的3个步骤中创建Web服务客户端中描述的方法

Spring Web服务可以提供帮助。 我推荐Spring一般。