4

我们正在开发一个包含几十个服务接口的相当大的应用程序。对于每个服务,使用 wsgen 生成一个 wsdl(使用 jaxws-maven-plugin maven 插件)。对于每个服务,在 wsdl 中使用不同的名称空间。

服务接口共享一组公共 bean(主要是 DTO)。现在这些通用类的定义在每个 wsdl 的 XSD 中定义,复制了很多信息,这给我们在客户端带来了问题(巨大的编译时间,类不兼容)。

首先,我尝试使用 schemagen 为公共类创建模式,但无法将其传递给 wsgen。有没有办法将一个(或多个)常见 XSD 传递到 wsgen 并让生成的 wsdl(s)引用这些?

我还尝试使用指定自定义命名空间的 @XmlRootElement 来注释公共类:这次 wsgen 识别了自定义命名空间并为每个 wsdl 生成了更多的 XSD,但没有在任何地方包含单个(公共)xsd。

有人可以为我指出这个问题的解决方案吗?

4

2 回答 2

0

你和我有很多共同点。:)

我们做了很多类似的事情:我们在整个应用程序中使用了 WSDL 优先的 Web 服务和 DTO。但是,我们使用 XML 模式定义 DTO,因此我们可以向它们添加元数据,从而通过 JAXB 插件向生成的 Java 添加代码。我们打算在我们的 Web 服务中使用这些基于 XSD 的 DTO,但是按照公司标准,我们被迫在我们的 Web 服务中使用一些常见的公司 XSD。但这并没有什么不同——我们可以很容易地使用我们的 DTO XSD。

至于您的问题,我们有用于 DTO 的 XSD,而您没有。如果你这样做了,那么你唯一需要做的就是假设一个 Maven 多模块项目是如何跨模块解析模式。我们通过派生 jaxws maven 插件并向其添加基于 CLASSPATH 的目录模式解析器来做到这一点。

我想让你为你的 DTO 创建模式是不可能的?除此之外,我无能为力,因为我从未使用过 jaxb 注释。对不起。

于 2011-12-30T01:52:27.817 回答
0

我有一个类似的问题。

我将下面的注释添加到公共类中,这样它们就不会为每个 wsgen 生成多次。

@XmlType(namespace = "http://mypackage.mycompany.com/")
public MyClass implements Serializable {
// ... class contents
}
于 2016-04-07T14:04:54.767 回答