1

给定这样的模式:

<xs:element name="Group" type="GroupType"/>

<xs:complexType name="GroupType">
    <xs:sequence>
        <xs:element type="OptionsType" name="Options" maxOccurs="1" minOccurs="1"/>
        <xs:element type="PageContainerType" name="PageContainer" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="PageContainerType">
    <xs:sequence>
      ...
    </xs:sequence>
</xs:complexType>

XJC 将生成类似于以下内容的 Java:

public class GroupType {
  @XmlElement(name = "Options", required = true)
  protected OptionsType options;
  @XmlElement(name = "PageContainer")
  protected List<PageContainerType> pageContainer;
  ...
}

我想为 PageContainer 元素强制执行一个唯一的集合。这是一个逆向工程项目,所以我不太关心确保架构明确执行它。

是否可以通过在模式或 XJC 绑定中指定某些内容来将PageContainer元素生成为 a ?Set<PageContainerType>

4

1 回答 1

1

JAXB 运行时(至少MetroMOXy)可以处理 java.util.Set 类型的属性。有关示例,请参见:

Metro 和 MOXy JAXB 实现都使用相同的 XJC 工具将 XML 模式编译成 Java 类。您可能希望将您的问题发布到以下论坛:

您还可以通过编写 XJC 插件来实现所需的结果:

于 2010-10-29T12:08:49.483 回答