我正在基于各种WSDL生成java代码。对于我们发布的每个新版本的WebService,我们都有不同的WSDL,每个版本都有自己的命名空间。
通常情况下,从一个发行版到另一个发行版的更改通常很少,但我希望将类除以命名空间。
有没有办法配置JAXB,以便自动生成的类实现单个接口/扩展单个类,所以我可以参考其中任何一个而不更改我的代码?
虚拟例子:
WebService方法:listScripts(ResultSize size);
自动生成的课程:
com.test.ws1.ResultSize
com.test.ws2.ResultSize
两个类完全相同。有没有办法在类层次结构中排列它们,以便我的代码与版本号的更改隔离?即两个类实现的com.test.ResultSize
接口?
答案 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包中提供的插件:
使用这个插件,我可以为生成的插件指定不同的超类,尽管我无法使用自动生成的枚举来实现给定的接口。
要在Maven中使用它很痛苦(我从WSDL生成类,而不是直接使用JAXB),所以我切换到this blog中指定的外部Ant任务