Java 如何使用XJC影响组声明的类生成
我们有以下问题。我们尝试从包含组声明和对这些组声明的多个组引用的XSD文件生成Java代码。这里有一个简化版本:Java 如何使用XJC影响组声明的类生成,java,xml,jaxb2,xjc,Java,Xml,Jaxb2,Xjc,我们有以下问题。我们尝试从包含组声明和对这些组声明的多个组引用的XSD文件生成Java代码。这里有一个简化版本: <xs:group name="Information"> <xs:sequence> <xs:element name="Name"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:st
<xs:group name="Information">
<xs:sequence>
<xs:element name="Name">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="updated" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="Address">
<xs:complexType>
<xs:sequence>
<xs:group ref="Information" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Customer">
<xs:complexType>
<xs:sequence>
<xs:group ref="Information"/>
</xs:sequence>
</xs:complexType>
</xs:element>
要点是:
- 每个元素都在其自己的文件中定义
- 同一组
被引用两次信息
- 该组没有单独的类型
- 组中的
元素也没有单独的类型名称
- 我们无法更改XSD文件
Address.Name
,有时是类型Customer.Name
,因为Name
元素是一个复杂的类型,需要一个类型
有没有办法告诉xjc总是生成相同的类型?您可以试试
-eposion
。它主要用于多个步骤的编译,但我认为它基本上是将XJC在编译过程中做出的决定“转储”到(绑定)配置文件中。如果幸运的话,您可以在插曲文件中找到与名称元素/类型相关的适当设置,您可以将其复制到绑定配置文件中,以使XJC具有决定性的行为。
- 使用
jaxb:class
绑定自定义匿名复杂类型,并指定类名
- 使用
在顶层生成内部类
这两者的结合将为您提供一个可预测的课程。有趣!但是,生成的文件不包含名称类型。谢谢您!使用localScoping=“toplevel”立即解决了问题。但是,其他类型现在有冲突,我可以使用类绑定来解决。