Java 如何使用XJC影响组声明的类生成

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

我们有以下问题。我们尝试从包含组声明和对这些组声明的多个组引用的XSD文件生成Java代码。这里有一个简化版本:

<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文件
我们现在面临的问题是,xjc根据我们构建的机器生成非确定性的数据,有时是类型
Address.Name
,有时是类型
Customer.Name
,因为
Name
元素是一个复杂的类型,需要一个类型


有没有办法告诉xjc总是生成相同的类型?

您可以试试
-eposion
。它主要用于多个步骤的编译,但我认为它基本上是将XJC在编译过程中做出的决定“转储”到(绑定)配置文件中。如果幸运的话,您可以在插曲文件中找到与
名称
元素/类型相关的适当设置,您可以将其复制到绑定配置文件中,以使XJC具有决定性的行为。

  • 使用
    jaxb:class
    绑定自定义匿名复杂类型,并指定类名
  • 使用
    在顶层生成内部类

这两者的结合将为您提供一个可预测的课程。

有趣!但是,生成的文件不包含名称类型。谢谢您!使用localScoping=“toplevel”立即解决了问题。但是,其他类型现在有冲突,我可以使用类绑定来解决。