我们正在开发一个相当大的应用程序,其中包含几十个服务接口(interface)。使用 wsgen(使用 jaxws-maven-plugin maven 插件)为每个服务生成一个 wsdl。对于每个服务,在 wsdl 中使用不同的命名空间。
服务接口(interface)共享一组公共(public) bean(主要是 DTO)。现在,这些通用类的定义在每个 wsdl 的 XSD 中定义,重复了大量信息,这给我们在客户端带来了问题(编译时间长,类不兼容)。
首先,我尝试使用 schemagen 为公共(public)类创建一个模式,但无法将其传递给 wsgen。有没有办法将一个(或多个)通用 XSD 传递到 wsgen 并让生成的 wsdl 引用这些?
我还尝试使用指定自定义 namespace 的 @XmlRootElement 注释公共(public)类:这次 wsgen 识别了自定义 namespace 并为每个 wsdl 生成了一个 XSD,但没有在任何地方包含一个(公共(public))xsd。
有人可以为我指出这个问题的解决方案吗?
最佳答案
你和我有很多共同点。 :)
我们做了很多类似的事情:我们在整个应用程序中使用了 WSDL 优先的网络服务和 DTO。但是,我们使用 XML 模式定义我们的 DTO,这样我们就可以向它们添加元数据,从而通过 JAXB 插件向生成的 Java 添加代码。我们打算在我们的 Web 服务中使用这些基于 XSD 的 DTO,但根据企业标准,我们被迫在我们的 Web 服务中使用一些常见的企业 XSD。但这不会有什么不同 - 我们本可以轻松地使用我们的 DTO XSD。
关于您的问题,我们有您没有的 DTO 的 XSD。如果您这样做了,那么您唯一需要做的就是假设一个 Maven 多模块项目是如何跨模块解析模式。我们通过 fork jaxws maven 插件并向其添加基于 CLASSPATH 的目录架构解析器来实现这一点。
我想让您为 DTO 创建模式是不可能的?除此之外,我无能为力,因为我从未使用过 jaxb 注释。对不起。
关于java - Jax-ws wsgen 生成引用通用模式的 wsdl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8675363/