JAXB Unmarshalling ne fonctionne pas. Les éléments attendus sont (aucun)
Je suis en train de unmarshal XML.
C'est ce que mon XML ressemble à
<DeviceInventory2Response xmlns="http://tempuri.org/">
<DeviceInventory2Result xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Obj123 xmlns="">
<Id>1</Id>
<Name>abc</Name>
</Obj123>
<Obj456 xmlns="">
.
.
.
Je suis en train d'essayer d'obtenir le Nom et l'Identifiant sous Obj123. Cependant, quand je lance mon unmarshal commande j'obtiens l'erreur suivante.
An Error: javax.xml.bind.UnmarshalException: unexpected element (uri:"http://tempuri.org/", local:"DeviceInventory2Response"). Expected elements are (none)
Mon code ressemble à ceci dans la classe principale:
Obj123 myObj123 = (Obj123) unmarshaller.unmarshal(inputSource);
Et ma classe pour Obj123 ressemble à ceci:
package com.myProj.pkg;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name="Obj123")
public class Obj123 {
private String Id;
private String Name;
public String getId() {
return Id;
}
public String getName() {
return Name;
}
}
J'ai pensé par la définition de mon XMLRootElement que je devrais être capable de sauter les 2 premières lignes de mon XML mais ça ne semble pas être le cas. Des idées?
Edit:
C'est comment mon JAXB Contexte est faite:
JAXBContext jaxbContext = JAXBContext.newInstance();
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Obj123 obj123 = (Obj123) unmarshaller.unmarshal(xmlStreamReader);
source d'informationauteur Cameron Jones
Vous devez vous connecter pour publier un commentaire.
JAXB implémentations d'essayer de correspondre à l'élément racine du document (et non pas sur un élément enfant).
Si vous voulez unmarshal au moyen d'un document XML, vous pouvez alors analyser le document avec StAX l'avance le
XMLStreamReader
à l'élément souhaité, puis unmarshal.Pour Plus D'Informations
Mise à JOUR
Un
JAXBContext
ne sait que sur les classes que vous dites à ce sujet. Au lieu de:Que vous devez faire:
J'ai résolu le problème en ajoutant
@XmlRootElement(name="abc_xxx")
à la Racine de la classe.(où abc_XXX est la balise racine de votre XML)
La JAXB classes généré par eclipse ne pas ajouter cette annotation de ma classe racine.
Utilisation ObjectFactory classe plutôt comme
Essayer cela et résoudre problème ci-dessus. Mon problème a été résolu.