使用JAXB编译包含相同元素的重复定义的多个XSD

问题:如何让xjc / Jaxb为同一名称空间中包含重复elementdefinitions的几个模式生成propper javaclasses?

信息:我有三个.xsd架构:A,B和C.所有都有相同的targetnamespace。 他们都是给我的3个shemas,我不会以任何方式允许以任何方式改变它们。

它们有一些也可以在B或C中找到的元素(但是A也有很多自我声明的元素)例子:这是A和C的相同“代码”:

                     

当使用xjc将它们编译成javaclasses时,我得到以下exception:

 [ERROR] 'y_ym_ymdDatoType' is already defined line 297 of file:../c.xsd [ERROR] (related to above error) the first definition appears here line 309 of file:../a.xsd 

其他元素也是如此:arcgYearType,arcgYearMonthType和arcDateType。

我已经阅读了一个可能解决这个问题的绑定文件,但我不知道如何做到这一点,所以示例将是首选。

您可以使用绑定文件手动解决冲突。 下面是一个示例,您可以在其中为冲突的名称指定自定义名称:

      

根据您的描述,我假设XSD文件之间没有包含关系。 此外,我必须假设您正在尝试重用内容重叠的类。

简单的方法是独立地“编译”每个文件,并为每个XSD文件提供不同的Java包。 这里的问题是,如果你试图将内容从一个XML“链接”到另一个XML(即从A中解组,然后从马歇尔到B),那么包com.A中的类C1和包com.B中的类C1,匹配相同的XSD复杂类型,不是“可互换的”; 你必须在它们之间进行转换。 您需要自定义绑定文件,或者如果您使用NetBeans,只需在JAXB向导中设置不同的包。

最好的方法可能是使用剧集(参见SO )。 处理A.xsd,然后使用该剧集处理B.xsd等。