JAXB entmapsalisiert xml kein Element zu JAXBElement

8

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?

    
valve2010 25.02.2011, 20:33
quelle

2 Antworten

9

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:

  1. Da diese Eigenschaft einen DOM-Knoten enthalten kann, sollte Ihr Code diese Möglichkeit berücksichtigen, indem Sie eine Typprüfung durchführen.
  2. Um die Anzahl der empfangenen DOM-Knoten zu reduzieren, müssen Sie die möglichen Wurzelelemente dieser Fragmente mit Java-Klassen verknüpfen. Dies geschieht durch Annotation von Klassen mit @XmlRootElement (name="foo", namespace="bar") oder mit @XmlElementDecl.

Sehen Sie sich mein Blog als Beispiel an:

Blaise Doughan 25.02.2011 20:46
quelle
1

validieren Sie Ihre XML-Datei anhand Ihres Schemas. das sollte die erste Sache sein, die geprüft wird

    
x.509 25.02.2011 20:42
quelle

Tags und Links