unexpected element (uri:"", local:"Group"). Expected elements are <{}group>
Treffen Sie eine Ausnahme, wenn Sie das Marshalling von XML aufheben
JAXBContext jc = JAXBContext.newInstance(Group.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Group group = (User)unmarshaller.unmarshal(new File("group.xml"));
Die Gruppenklasse hat keine Annotation und group.xml enthält nur Daten.
Kann irgendetwas die Ursache sein?
ObjectFactory
aus generierten Quellen verursacht werden kann, was wahrscheinlicher ist, wenn Sie zwei verschiedene generierte Quellverzeichnisse mischen.Antworten:
Es sieht so aus, als ob Ihr XML-Dokument das Stammelement "Gruppe" anstelle von "Gruppe" hat. Sie können:
quelle
@XmlRootElement(name = "MB") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "MB", propOrder = { "date", "time" })
aber ich bekomme, dassunexpected element (uri:"http://xx.title.com/new/response", local:"MB"). Expected elements are <{}Date>,<{}MB>,<{}Time>
ich auch@XmlElement(name="Date", required = true)
über jedes Feld habe. Wo und warum läuft es falsch? Ich habe auch versucht zu entfernen@XmlRootElement
!@XmlSchema
inpackage-info.java
, das jetzt behoben wurde.Sie müssen package-info.java in Ihr generiertes jaxb-Paket einfügen. Sein Inhalt sollte so etwas sein
quelle
Zum Glück ist die Paket-Info-Klasse nicht erforderlich. Ich konnte mein Problem mit der iowatiger08-Lösung beheben.
Hier ist mein Fix, der die Fehlermeldung anzeigt, um die Punkte für einige zu verbinden.
Fehlermeldung
Code vor dem Fix
Code nach dem Fix
Sie können den zu @XmlRootElement hinzugefügten Namespace sehen, wie in der Fehlermeldung angegeben.
quelle
Nachdem Sie sich mehr angesehen haben, muss das Root-Element einem Schema-Namespace zugeordnet werden, wie Blaise bemerkt. Ich hatte jedoch kein Paket-Info-Java. Ohne die Annotation @XMLSchema zu verwenden, konnte ich dieses Problem mithilfe von beheben
Hoffe das hilft!
quelle
Dies ist eine Lösung für einen hübschen Nischen-Anwendungsfall, aber es bringt mich jedes Mal. Wenn Sie den Eclipse Jaxb-Generator verwenden, wird eine Datei namens package-info erstellt.
Wenn Sie diese Datei löschen, kann eine allgemeinere XML-Datei analysiert werden. Versuche es!
quelle
Ich hatte das gleiche Problem. Es hat mir geholfen, ich gebe die gleichen Feldnamen meiner Klassen an wie die Tag-Namen in der XML-Datei (die Datei stammt von einem externen System).
Beispielsweise:
Meine XML-Datei:
Meine Antwortklasse:
Meine ESList-Klasse:
Meine Gegenstandsklasse:
Meine RegionList-Klasse:
Meine DemoUnmarshalling-Klasse:
Es gibt:
quelle
Sie müssen die
package-info.java
Klasse in das Paket contextPath einfügen und den folgenden Code in dieselbe Klasse einfügen:quelle
Mir gleich. Der Name der Zuordnungsklasse war,
Mbean
aber der Tag-Stammname war,mbean
also musste ich die Anmerkung hinzufügen:quelle
Ich hatte das gleiche Problem. Ich habe elementFormDefault = "qualifiziert" folgende Attribute hinzugefügt
<xs:schema..>
attributeFormDefault = "unqualifiziert"und neu generierte Java-Klassen durch Ausführen von xjc, wodurch package-info.java korrigiert wurde.
Dies hat das Problem für mich behoben.
quelle
Ich habe bereits das gleiche Problem und ändere mich wie folgt:
quelle
Ich hatte das gleiche Problem, mein Problem war, dass ich zwei verschiedene Webservices mit zwei verschiedenen WSDL-Dateien hatte. Ich habe die Quellen für beide Webservices im selben Paket generiert, was ein Problem zu sein scheint. Ich denke, es liegt an der ObjectFactory und vielleicht auch an der package-info.java - weil diese nur einmal generiert werden.
Ich habe es gelöst, indem ich die Quellen für jeden Webservice in einem anderen Paket generiert habe. Auf diese Weise haben Sie auch zwei verschiedene ObjectFactories- und package-info.java-Dateien.
quelle
Wenn Sie verrückt werden, weil dies nur in Ihren Tests passiert und Sie PowerMock verwenden, ist dies die Lösung. Fügen Sie sie zusätzlich zu Ihrer Testklasse hinzu:
quelle
Keine der hier genannten Lösungen funktionierte für mich, ich bekam immer noch:
Ausnahme im Thread "main" javax.xml.bind.UnmarshalException: unerwartetes Element (uri: "java: XXX.XX.XX.XXX", lokal: "XXXXX")
Nach vielen Recherchen auf anderen Websites hat der folgende Code für mich funktioniert.
quelle
Wenn keines der oben genannten Verfahren funktioniert, versuchen Sie es hinzuzufügen
@XmlRootElement(name="Group")
zu den Gruppenklassen.quelle