JAXB自动生成类层次结构

时间:2011-01-11 17:19:22

标签: code-generation jaxb

我正在基于各种WSDL生成java代码。对于我们发布的每个新版本的WebService,我们都有不同的WSDL,每个版本都有自己的命名空间。

通常情况下,从一个发行版到另一个发行版的更改通常很少,但我希望将类除以命名空间。

有没有办法配置JAXB,以便自动生成的类实现单个接口/扩展单个类,所以我可以参考其中任何一个而不更改我的代码?

虚拟例子:

WebService方法:listScripts(ResultSize size);

自动生成的课程:

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

两个类完全相同。有没有办法在类层次结构中排列它们,以便我的代码与版本号的更改隔离?即两个类实现的com.test.ResultSize接口?

2 个答案:

答案 0 :(得分: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>

有关详细信息,请参阅:

还可以通过外部绑定文件提供架构注释。有关示例,请参阅:

答案 1 :(得分:1)

事实证明我可以使用JAXB2 Basics包中提供的插件:

Inheritance plugin

使用这个插件,我可以为生成的插件指定不同的超类,尽管我无法使用自动生成的枚举来实现给定的接口。

要在Maven中使用它很痛苦(我从WSDL生成类,而不是直接使用JAXB),所以我切换到this blog中指定的外部Ant任务