解组从两个XSD生成的XML

时间:2012-12-19 08:40:23

标签: xsd jaxb2

这里有两个xsd定义,它们几乎都是90%相似。下面是第一个xsd的骨架:

XSD1 :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="apf2doc">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="request"/>
                <xs:element ref="account"/>
                <xs:element ref="financial_transaction"/>
                <xs:element ref="event_data" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

第二个xsd是:

XSD2:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="apf2doc">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="request"/>
                <xs:element ref="account"/>
                <xs:element ref="message"/>
                <xs:element ref="event_data" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

现在这两个xsds在两个不同的包中生成两组类。我正在使用JAXB解组收到的xmls。 xmls是从这两个xsds生成的。

在创建JAXB上下文时,它会抛出错误,因为大多数类都会导致冲突,我相信。

这是错误跟踪:

The element name {}userid has more than one mapping. This problem is related to the     following location: 
at public javax.xml.bind.JAXBElement   
generated.order.ObjectFactory.createUserid(java.lang.String) at   
generated.order.ObjectFactory this problem is related to the following location:
at public javax.xml.bind.JAXBElement   
generated.usage.ObjectFactory.createUserid(java.lang.String) at 
generated.usage.ObjectFactory 

如果有人可以向我提出任何解决方案,那将会很棒。

感谢。

1 个答案:

答案 0 :(得分:1)

由于您的2个XML模式具有相同名称和命名空间的全局元素,因此您无法在两个模型上创建单个JAXBContext。您可以执行以下操作之一:

  1. 为每个模型创建单独的JAXBContext
  2. 使用命名空间来区分2个XML模式。