我们的主要wsdl有一系列wsdl导入。每个子wsdl都导入common.xsd,并为特定操作定义请求和回复对象。
我希望每个子wsdl文档中的请求对象实现一个公共接口。
首先,我尝试使用xsd:extension并将公共元素提取到基类。这有效,但改变了公开暴露的wsdl,我不想这样做。它已经稳定并且暂时保持不变。此更改应对Web服务的使用者完全透明。
我发现了这个: http://confluence.highsource.org/display/J2B/Inheritance+plugin
所以我应该可以使用 < inheritance:implements> com.acme.foo.MyInterface< / inheritance:implements>
但是这需要运行带有“-Xinheritance”的jaxb,我似乎无法弄清楚如何在我的maven构建中做到这一点。我正在使用org.apache.cxf:cxf-codegen-plugin:wsdl2java从wsdl生成Java源代码。
我是否需要将模式从wsdl提取到xsds并使用JAXB直接生成Java源?
还有其他选择吗?
感谢。
答案 0 :(得分:0)
检查this link。您需要执行以下操作:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/CustomerService.wsdl</wsdl>
<bindingFiles>
<bindingFile>${basedir}/src/main/wsdl/binding.xml</bindingFile>
<bindingFile>${basedir}/src/main/wsdl/binding.xjb</bindingFile>
</bindingFiles>
<extraargs>
<extraarg>-xjc-Xinheritance</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version><!-- version --></version>
</dependency>
</dependencies>
</plugin>