JAXB可以处理多个“根”元素吗?

时间:2012-10-16 13:38:29

标签: jaxb

我有一个类似于以下的架构...

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="t1" type="t1Type"/>
    <xs:element name="t2" type="t2Type"/>
    <xs:element name="t3" type="t3Type"/>
</xs:schema>

起初我认为这是一个无效的架构,但我在网上进行的所有检查都验证了它。这意味着提供XML的人可以发送列出的任何(或所有)类型,并且仍然符合架构。

如何使用JAXB进行映射和解组所有不同的可能性?

我不知道我会收到哪一个。

2 个答案:

答案 0 :(得分:4)

您需要利用注释为@XmlRegistry的工厂类(通常称为ObjectFactory)。对于使用create注释的每个可能的根元素,该类将包含@XmlElementDecl方法。

示例

答案 1 :(得分:0)

我是jaxb的新手。 我对jaxb有一个疑问

@XmlElementDecl(namespace = "http://mtop/nra/xsd/tca/v1", name = "thresholdCrossingAlert", substitutionHeadNamespace = "http://mtop/fmw/xsd/cei/v1", substitutionHeadName = "commoneventInformation")

这是我得到例外的注释

"java.security.PrivilegedActionException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions" 

ThresholdCrossingAlert.class正在扩展课程EventInformationType.class,而EventInformationType.class正在扩展课程CommonEventInformation.class

在初始化JaxbContext时,我的注释定义或错误是否有任何问题。