2011-10-04 90 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>