我们正在开发一个具有几十个服务接口的相当大的应用程序。对于每个服务,使用wsgen生成wsdl(使用jaxws-maven-plugin maven插件)。对于每个服务,在wsdl中使用不同的命名空间。
服务接口共享一组公共bean(主要是DTO)。现在,每个wsdl的XSD中都定义了这些公共类的定义,重复了很多信息,这对我们来说在客户端造成了问题(编译时间很长,类不兼容)。
首先,我尝试使用schemagen为公共类创建模式,但无法将其传递给wsgen。有没有办法将一个(或多个)常见的XSD传递给wsgen并让生成的wsdl(s)引用这些?
我还尝试使用指定自定义命名空间的@XmlRootElement来注释公共类:这次wsgen识别了自定义命名空间并为每个wsdl生成了一个XSD,但没有在任何地方包含单个(公共)xsd。
有人能指出我解决这个问题的方法吗?
答案 0 :(得分:0)
你和我有很多共同之处。 :)
我们做了很多类似的事情:我们在整个应用程序中都使用了WSDL优先的Web服务和DTO。但是,我们使用XML模式定义DTO,因此我们可以向它们添加元数据,通过JAXB插件将代码添加到生成的Java中。我们打算在我们的Web服务中使用这些基于XSD的DTO,但我们被迫按照企业标准在我们的Web服务中使用一些通用的企业XSD。但它不会产生任何影响 - 我们可以轻松使用我们的DTO XSD。
关于您的问题,我们为您的DTO提供了XSD,而您没有。如果你做了那么你唯一需要的东西 - 假设一个Maven多模块项目是如何解决模块之间的模式。我们通过分配jaxws maven插件并向其添加基于CLASSPATH的目录模式解析器来完成此操作。
我认为让你为你的DTO创建模式是不可能的?我无法帮助,因为我从未使用过jaxb注释。遗憾。
答案 1 :(得分:0)
我遇到了类似的问题。
我将下面的注释添加到公共类中,因此不会为每个wsgen多次生成它们。
@XmlType(namespace = "http://mypackage.mycompany.com/")
public MyClass implements Serializable {
// ... class contents
}