我正在 gradle 中使用 spring-ws 创建一个 WSDL-first Web 服务。
我看过的一些例子 (例如https://spring.io/guides/gs/producing-web-service/) 看起来他们只会从 XSD 模式生成 java 类, 但是 WSDL 服务操作没有 java 接口(interface)(或抽象类)?
此外,在 spring-ws 文档中,它说“...在 Spring-WS 中,不需要手动编写 WSDL ...”。
spring-ws 不会为实际服务本身生成任何 java 接口(interface)或类,这一点是否正确理解?
是否可以覆盖此默认行为并强制它这样做?
我想确保完整的 WSDL 正确且完整地实现...
最佳答案
使用 spring-ws,您可以首先构建契约 WS,尽管没有必要构建 WSDL,因为它可以动态生成它。
对于java对象,spring-ws允许您使用jaxb2或类似的方式编码/取消编码。这样,您可以从 XSD 获取 java 类,但此代码生成是由编码器生成的。
从服务器的角度来看,您创建与 WSDL 操作匹配的 WS 端点。端点被注释并绑定(bind)到请求/响应 java 对象。因此,spring 可以动态生成 WSDL,但您也可以使用自己的 WSDL。
从客户端的角度来看,您需要一个WSTemplate
来检索WSDL(静态或动态,它不介意)。使用这种方式,WSTemplate
确保您可以调用所有服务器端点,而无需实现客户端 stub 或生成的代码。
我更喜欢使用静态 WSDL,因为动态生成无法确保您的 WSDL 在您升级 Spring 等时发生更改,这可能会破坏与客户端的兼容性。
但是,在开发过程中,为了简单起见,我使用动态 WSDL。一旦获得了所需的服务,我就会获得动态生成的 WSDL(如果需要则可自定义)并将其用作静态服务。该 WSDL 对于所有端点都是完整的。
希望对你有帮助!
关于java - spring-ws -- 如何从 WSDL 创建 java 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35653487/