2011-10-04 85 views
1

我们的主要wsdl具有一系列wsdl导入。每个子wsdl导入common.xsd并为特定操作定义请求和回复对象。如何让从WSDL生成的Java类实现接口

我想让每个子wsdl文档中的请求对象实现一个通用接口。

首先,我尝试使用xsd:extension并将常用元素提取到基类中。这有效,但改变了公开的wsdl,我不想这样做。一段时间以来它一直保持稳定和不变。对于Web服务的消费者来说,这种改变应该是完全透明的。

我发现这一点: http://confluence.highsource.org/display/J2B/Inheritance+plugin

所以我应该能够使用 <继承:工具> com.acme.foo.MyInterface < /继承:工具>

但这需要需要运行JAXB W /“-Xinheritance”,我似乎无法弄清楚如何在我的Maven构建中做到这一点。我正在使用org.apache.cxf:cxf-codegen-plugin:wsdl2java从wsdl生成Java源代码。

我是否需要将模式从wsdl提取到xsds并直接使用JAXB生成Java源代码?

还有其他的选择吗?

谢谢。

+0

我找到'CXF-CODEGEN-plugin'生成从WSDL web服务非常有用,而是为了从生成模式的POJO,我更喜欢使用'CXF-xjc-插件“,可以像这样使用”继承插件“:https://gist.github.com/pulkitsinghal/8163296 – pulkitsinghal

回答

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>