У меня есть приложение, выполняющее преобразования 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
Есть ли у вас какие-либо предложения по решению этих проблем?