javax.xml.bind.UnmarshalException: inattendu élément (uri:“”, locale:“Groupe”)
unexpected element (uri:"", local:"Group"). Expected elements are <{}group>
Répondre à une exception lorsque unmarshalling à partir de xml
JAXBContext jc = JAXBContext.newInstance(Group.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Group group = (User)unmarshaller.unmarshal(new File("group.xml"));
Groupe classe n'a pas d'annotation, et group.xml juste contient des données.
Tout ce qui peut être la cause?
- Pour ceux qui viennent ici, à partir d'une recherche, je veux juste faire remarquer que cela peut être causé par l'utilisation de mauvais
ObjectFactory
de generated-sources, ce qui est plus probable si on mélange les deux source généré répertoires.
Vous devez vous connecter pour publier un commentaire.
Il ressemble à votre document XML à la racine de l'élément "Groupe" au lieu de "groupe". Vous pouvez:
@XmlRootElement(name = "MB") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "MB", propOrder = { "date", "time" })
mais je suisunexpected element (uri:"http://xx.title.com/new/response", local:"MB"). Expected elements are <{}Date>,<{}MB>,<{}Time>
j'ai aussi@XmlElement(name="Date", required = true)
sur chaque champ. Où & Pourquoi est-ce qu'il va mal? J'ai aussi essayé de l'enlever@XmlRootElement
!@XmlSchema
danspackage-info.java
, fixé maintenant.Vous avez besoin de mettre package-info.java dans votre générés jaxb paquet. Son contenu devrait être quelque chose comme ça
Heureusement, le paquet-classe info n'est pas nécessaire. J'ai pu réparer le mien problème avec iowatiger08 solution.
Voici mon fix montrant le message d'erreur pour rejoindre les points pour certains.
Message d'erreur
Code avant de fixer
Code après correction
Vous pouvez voir l'espace de noms ajoutés à @XmlRootElement comme indiqué dans le message d'erreur.
Après avoir regardé de plus, l'élément racine doit être associé à un schéma de l'espace de noms que Blaise est à souligner. Pourtant, je n'ai pas eu un paquet-info java. Donc, sans l'aide de l' @XMLSchema annotation, j'ai été en mesure de corriger ce problème en utilisant
Espérons que cette aide!
Que c'est une solution pour une jolie niche de cas d'utilisation, mais il me met à chaque fois. Si vous utilisez Eclipse Jaxb générateur, il crée un fichier appelé package-info.
Si vous supprimez ce fichier, il permettra une plus générique xml à parser. Essayez-le!
J'ai eu le même problème.. Il m'a aidé, je suis spécifier les mêmes noms de champs de mes classes que les noms de balise dans le fichier xml (le fichier provient d'un système externe).
Par exemple:
Mon fichier xml:
Ma classe de Réponse:
Mon ESList classe:
Ma classe Item:
Mon RegionList classe:
Mon DemoUnmarshalling classe:
Il donne:
Même pour moi. Le nom de la cartographie de la classe a été
Mbean
mais la balise racine du nom a étémbean
j'ai donc dû ajouter l'annotation:J'ai eu le même problème.
J'ai ajouté des attributs suivants à
<xs:schema..>
elementFormDefault="qualified" attributeFormDefault="non qualifiés"
et re-génération des classes java en cours d'exécution xjc, qui a corrigé package-info.java.
Cela a réglé le problème pour moi.
Vous avez besoin de mettre
package-info.java
classe dans le package de contextPath et mettre de code ci-dessous dans la même classe:Si aucun des travaux ci-dessus, essayez d'ajouter
@XmlRootElement(name="Group")
pour le Groupe classs.