Ich habe einen Webservice-Anruf. In meiner Antwort, wenn ich versuche, das xml any
-Element in ein JAXBElement zu bekommen, wird ein Fehler ausgegeben.
Im Schema habe ich:
%Vor%Der Code, den ich verwende:
%Vor% Diese Zeile löst den Fehler aus: org.apache.xerces.dom.ElementNSImpl incompatible with javax.xml.bind.JAXBElement
error in soap ui.
Warum verdeckt es nicht zu JAXBElement? Wie kann ich es funktionieren lassen?
Wenn die Eigenschaft mit folgenden Anmerkungen versehen ist, werden die Inhalte als DOM-Knoten zugeordnet:
%Vor%Wenn das lax = true-Flag gesetzt ist, werden bekannte Elemente in Domain-Objekte konvertiert:
%Vor%Weitere Informationen zu @XmlAnyElement finden Sie unter:
UPDATE # 1
Mit lax = true können Sie eine Mischung aus Domänenobjekten und DOM-Knoten erhalten. Das Folgende stammt aus den Java-Dokumenten:
Wenn wahr
Wenn wahr, wenn ein Element stimmt mit einer Eigenschaft überein, die mit markiert ist XmlAnyElement ist JAXBContext bekannt (Zum Beispiel gibt es eine Klasse mit XmlRootElement mit demselben Tag Name, oder es gibt XmlElementDecl das hat den gleichen Tag - Namen), der Unmarshaller wird eifrig entmarshalen dieses Element zum JAXB-Objekt, anstatt es auf DOM zu entpacken. Außerdem, wenn das Element ist unbekannt, aber es hat einen bekannten xsi: type, der Unmarshaller sträubt sich ungeduldig das Element zu einem JAXBElement, mit dem unbekannter Elementname und der JAXBElement Wert ist auf ein gesetzt Instanz des JAXB Mappings des Bekannter xsi: type.
Als ein Ergebnis, nach dem unmarshalling, das Eigentum kann heterogen werden; Es kann sowohl DOM-Knoten als auch einige haben JAXB Objekte zur gleichen Zeit.
UPDATE # 2
Um das Problem letztendlich zu lösen:
Sehen Sie sich mein Blog als Beispiel an: