使用Jax-ws wsgen生成一个引用常见schema的WSDL?

4
我们正在开发一个拥有几十个服务接口的大型应用程序。对于每个服务,使用jaxws-maven-plugin插件中的wsgen生成一个wsdl。在每个wsdl中,使用不同的命名空间来区分每个服务。
这些服务接口共享一组常见的bean(主要是DTO)。目前,这些常见类的定义在每个wsdl的XSD中都有重复,这给客户端带来了问题(巨大的编译时间,类不兼容等)。
首先,我尝试使用schemagen为常见类创建模式,但无法将其传递给wsgen。有没有办法将一个(或多个)公共XSD传递到wsgen,并让生成的wsdl引用它们?
我还尝试使用@XmlRootElement注释常见类,指定自定义命名空间:这一次,wsgen识别了自定义命名空间,并为每个wsdl生成了一个额外的XSD,但没有在任何地方包含单个(公共的)xsd。
有人能为我指出解决这个问题的方法吗?
2个回答

0

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

我们做了很多类似的事情:我们在整个应用程序中使用基于 WSDL 的 Web 服务和 DTOs。然而,我们使用 XML 模式定义我们的 DTOs,以便我们可以向它们添加元数据,通过 JAXB 插件将代码添加到生成的 Java 中。我们打算在我们的 Web 服务中使用这些基于 XSD 的 DTOs,但是由于公司标准的要求,我们被迫在我们的 Web 服务中使用一些常见的公司 XSDs。不过这并没有什么区别 - 我们可以同样轻松地使用我们的 DTO XSDs。

至于你的问题,我们为我们的 DTOs 准备了 XSDs,而你没有。如果你有的话,唯一需要做的事情就是解决跨模块的模式。我们通过分叉 jaxws maven 插件并向其中添加基于 CLASSPATH 的目录模式解析器来实现这一点。

我想让你为你的 DTOs 创建模式是不可能的吗?我对 jaxb 注释从未使用过,所以无法提供更多帮助。抱歉。


0

我遇到了类似的问题。

我在常用类中添加了下面的注释,这样它们就不会为每个wsgen生成多次了。

@XmlType(namespace = "http://mypackage.mycompany.com/")
public MyClass implements Serializable {
// ... class contents
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接