Разупорядочение XML-файлов, сгенерированных из двух XSD

Вот два определения 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>

Теперь эти два xsd генерируют два набора классов в двух разных пакетах. Я использую JAXB для распаковки полученных XML. XML-файлы генерируются из этих двух файлов xsd.

При создании контекста 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 

Было бы здорово, если бы кто-то мог предложить мне какое-либо решение.

Спасибо.


person dharam    schedule 19.12.2012    source источник


Ответы (1)


Поскольку ваши 2 XML-схемы имеют глобальные элементы с одинаковыми именами и пространствами имен, вы не сможете создать один JAXBContext в обеих моделях. Вы можете сделать одно из следующих действий:

  1. Создайте отдельный JAXBContext для каждой модели.
  2. Используйте пространства имен, чтобы различать две XML-схемы.
person bdoughan    schedule 19.12.2012
comment
Привет, спасибо за ответ. Я считаю, что мне нужно пойти на первую войну, создав отдельный JAXBContext, потому что я не могу изменить пространства имен, здесь это сторонняя вещь. :( - person dharam; 19.12.2012