spring-ws - 如何从WSDL创建java-interface?

时间:2016-02-26 13:51:55

标签: java spring soap wsdl spring-ws

我正在使用gradle中的spring-ws创建一个WSDL优先的Web服务。

我一直在关注的一些例子   (e g https://spring.io/guides/gs/producing-web-service/) 它们似乎从XSD架构生成java-classes, 但是WSDL服务操作中的没有 java-interface(或抽象类)?

另外,在spring-ws doc中,它说“...在Spring-WS中,不需要手工编写WSDL ......”。

  • 是否正确理解spring-ws 为实际服务本身生成任何java接口或类?

  • 是否可以覆盖此默认行为,强制呢?

我想确保正确完整地实现完整的WSDL ......

3 个答案:

答案 0 :(得分:1)

使用spring-ws,你可以构建契约优先WS,虽然没有必要构建你的WSDL,因为它可以动态生成它。

对于java对象,spring-ws允许你使用jaxb2或类似方法编组/取消编组。这样,您就可以从XSD获取java类,但是这个代码生成是由编组器生成的。

从服务器的角度来看,您创建了与WSDL操作匹配的WS端点。该端点被注释并绑定到请求/响应java对象。因此,spring可以动态生成WSDL,但您可以使用自己的WSDL。

从客户端的角度来看,您需要一个需要检索WSDL的WSTemplate(静态或动态,它不介意)。使用这种方式,WSTemplate可确保您可以调用所有服务器端点,而无需实现客户端存根或生成的代码。

我更喜欢使用静态WSDL,因为如果升级Spring,动态生成无法确保您的WSDL发生更改,这可能会破坏与客户端的兼容性。

然而,在我开发的过程中,我使用动态WSDL,以简化操作。一旦我拥有了我想要的服务,我就会获得动态生成的WSDL(如果需要,可以自定义)并将其用作静态。所有端点的WSDL都已满。

希望它有所帮助!

答案 1 :(得分:1)

如果只想使用WSDL接口,只需使用wsimport命令。它是jdk的一部分所以不需要额外的东西。

运行推荐:wsimport -keep wsdlUrl 它将生成所有接口和客户端代码(.java以及.class)以访问Web服务。只需搜索你的界面。

让您生成的网址为:http://www.host.com/testservice?WSDL

然后推荐将是wsimport -keep http://www.host.com/testservice?WSDL wsimport有更多选项可以根据需要使用。 http://docs.oracle.com/javase/7/docs/technotes/tools/share/wsimport.html

答案 2 :(得分:0)

ws import生成所有客户端代码。 asn wellm更多的东西尝试wsimport,wsgen了解更多细节