如何使JAXB区分相同类型的元素

时间:2019-05-23 18:47:47

标签: java jaxb

我正在编写一个模式分析程序,并将其读入JAXB对象的模式中。为此,我已经从schema for XML schemas自动生成了类。

对于Group类,它生成了此字段,该字段表示可以在一个组中进行的所有不同构造的列表:嵌套的组,序列,选择,任何,全部和元素。这是生成的代码:

@XmlElementRefs({
@XmlElementRef(name = "group",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false),
@XmlElementRef(name = "sequence",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false),
@XmlElementRef(name = "choice",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false),
@XmlElementRef(name = "any",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = Any.class,
    required = false),
@XmlElementRef(name = "all",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false),
@XmlElementRef(name = "element", namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false) })
protected List<Object> particle = new ArrayList<>();

问题是,大多数这些列表项都生成为包含实际对象的JAXBElements。我知道这样做是因为,例如,一个选择和一个序列实际上包含完全相同的数据(它们都是explicitGroup类型,它只是确定如何解释数据的元素名称)。因此,JAXB只是创建了类ExplicitGroup,如果它是一个选择或序列,它将最终以一个JAXBElement的形式包含一个ExplicitGroup和一个Q​​Name来告诉您它是哪个。

我创建了自定义类ChoiceSequence,它们扩展了ExplicitGroup。如何让JAXB代替使用JAXBElement包装器来创建这些类?

0 个答案:

没有答案