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