Jaxb: как разобрать xs:любую часть XML-строки?

У меня есть приложение, выполняющее преобразования XML<-> с использованием Jaxb и автоматически генерируемые классы с помощью maven-jaxb2-plugin.

Где-то глубоко в моей схеме у меня есть возможность ввести «ЛЮБОЙ» xml.

Обновление: это лучше описывает мою схему. Какой-то известный XML-код, обертывающий совершенно неизвестную часть («любая» часть).

<xs:complexType name="MessageType">
  <xs:sequence>
    <xs:element name="XmlAnyPayload" minOccurs="0">
        <xs:complexType>
            <xs:sequence>
                <xs:any namespace="##any"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="OtherElements">
        ....
</xs:sequence>

Это сопоставляется (с помощью jaxb) с внутренним классом, подобным этому.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "any"
})
public static class XmlAnyPayload {

    @XmlAnyElement(lax = true)
    protected Object any;

Когда я разбираю всю структуру, это не проблема. «Объект любой» будет отображаться в org.apache.xerces.dom.ElementNSImpl. Теперь я хочу воссоздать объект Java вручную, а затем перейти к XML. Как взять случайный XML и поместить его в любой элемент (org.apache.xerces.dom.ElementNSImpl), чтобы иметь возможность создать объект Java?

Кроме того, в следующем случае, когда у меня есть этот элемент как java, я хочу разархивировать именно эту часть (чтобы иметь возможность извлечь строку XML этого элемента). Но это невозможно. Я получаю исключение о корневых элементах. Но аннотировать ElementNSImpl невозможно.

unable to marshal type "com.sun.org.apache.xerces.internal.dom.ElementNSImpl" as an element because it is missing an @XmlRootElement annotation

Есть ли у вас какие-либо предложения по решению этих проблем?

22
задан Petter Nordlander 14 March 2012 в 06:37
поделиться