2011-01-11 44 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