2011-01-11 42 views
2

我正在生成基於各種WSDL的Java代碼。對於我們發佈的每個新版本的WebService,我們都有不同的WSDL,每個版本都有其自己的名稱空間。JAXB自動生成的類層次結構

事情是,通常情況下,從一個版本到另一個版本的變化是最小的,但我想保持班級除以名稱空間。

有沒有辦法配置JAXB,使自動生成的類實現單個接口/擴展單個類,所以我可以引用其中任何一個而不更改我的代碼?

假人例如:

WebService的方法:listScripts(ResultSize size);

自動生成的類:

  • com.test.ws1.ResultSize
  • com.test.ws2.ResultSize

這兩個類是完全一樣的。有沒有辦法將它們安排在類層次結構中,以便我的代碼與版本號的更改隔離開來?即由兩個類實現的com.test.ResultSize接口?

回答

1

原來,我可以使用在JAXB2基本包中提供一個插件:

Inheritance plugin

有了這個插件我可以指定不同的超類生成的,雖然我不能讓自動生成的枚舉實現給定的接口。

要使用Maven中,這是一個痛苦(我生成從WSDL類,而不是直接使用JAXB),所以我切換到外部Ant任務爲this blog

1

XJC爲此具有

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      jaxb:extensionBindingPrefixes="xjc" 
      jaxb:version="2.0"> 

    <xs:annotation> 
     <xs:appinfo> 
      <jaxb:globalBindings> 
      <xjc:superClass name="com.mycompany.xml.UserRootObject"/> 
      </jaxb:globalBindings> 
     </xs:appinfo> 
    </xs:annotation> 
. 
. 
. 
</xs:schema> 

有關詳細信息的擴展看到:

的模式註釋也可通過一個外部的綁定文件的形式提供。舉一個例子見:

+0

很好的回答指定的,雖然這有這個缺點爲所有生成的代碼生成一個超類,而不僅僅是一個特定的類。 – German 2011-01-12 16:10:16