javax.xml.bind.UnmarshalException: inattendu élément (uri:
J'obtiens l'erreur suivante lorsque vous tentez de convertir un fichier xml de réponse à des objets java à l'aide de jaxb
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://SOMETHING/doc/2006-03-01/", local:"Name"). Expected elements are <{}Name>,<{}IsTruncated>,<{}MaxKeys>,<{}Contents>,<{}Prefix>,<{}Marker>
Voici mon XML :
<ListBucketResult xmlns="http://something/doc/2006-03-01/">
<Name>test2</Name>
<Prefix/>
<Marker/>
<MaxKeys>3</MaxKeys>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>metadata.xml</Key>
<LastModified>2012-09-04T08:29:36.000Z</LastModified>
<ETag>6b836fd43c402681506926b2248ec418</ETag>
<Size>3258</Size>
<StorageClass>STANDARD</StorageClass>
</Contents>
</ListBucketResult>
Et mon java les classes d'objets sont quelque chose comme ce
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"name",
"prefix",
"marker",
"maxKeys",
"isTruncated",
"contents"
})
@XmlRootElement(name = "ListBucketResult")
public class ListBucketResult {
@XmlElement(name = "Name", required = true)
protected String name;
@XmlElement(name = "Prefix", required = true)
protected String prefix;
@XmlElement(name = "Marker", required = true)
protected String marker;
@XmlElement(name = "MaxKeys")
protected int maxKeys;
@XmlElement(name = "IsTruncated")
protected boolean isTruncated;
@XmlElement(name = "Contents", required = true)
protected ListBucketResult.Contents contents;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"key",
"lastModified",
"eTag",
"size",
"storageClass"
})
public static class Contents {
@XmlElement(name = "Key", required = true)
protected String key;
@XmlElement(name = "LastModified", required = true)
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar lastModified;
@XmlElement(name = "ETag", required = true)
protected String eTag;
@XmlElement(name = "Size")
protected int size;
@XmlElement(name = "StorageClass", required = true)
protected String storageClass;
et enfin mon unmarshalling code est :
JAXBContext jc = JAXBContext.newInstance(ListBucketResult.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
JAXBElement element = (JAXBElement) unmarshaller.unmarshal (inputStream);
ListBucketResult customer = (ListBucketResult) element.getValue();
Quelqu'un pourrait s'il vous plaît laissez-moi savoir ce que je fais incorrect ?
OriginalL'auteur Yahiya | 2012-09-06
Vous devez vous connecter pour publier un commentaire.
Le document XML contient des éléments qui font partie de la " http://something/doc/2006-03-01/' espace de noms, mais la annoté de la classe java n'est pas associé à cet espace de noms. Essayez de changer l' @XmlType annotation:
aucune aide de personne ?
Quel que soit le mécanisme, le problème est un namespacing question. L'exception de la méthode indique qu'un élément avec un nom pleinement qualifié de {quelque CHOSE/doc/2006-03-01}Nom (ce qui est correct basé sur le xml fourni), mais qu'un élément de {}Nom (entre autres) est prévu. Ce dernier est un élément dans l'espace de noms par défaut. Est l'exception exactement sur le même maintenant ou a légèrement changé?
Salut Merci pour tous les commentaires. Il est fixé par simple suppression @XmlType(nom = "", propOrder = { "nom", "préfixe", "marqueur", "maxKeys", "isTruncated", "contenu" })
L'ajout de l'espace de noms param @XmlType annotation a très bien fonctionné pour moi!
OriginalL'auteur dcbyers
Vous pouvez utiliser le
@XmlSchema
annotation sur unpackage-info
classe pour le contrôle de l'espace de noms de qualification. Si vous avez déjà écrit un paquet-classe info assurez-vous qu'il est en cours d'élaboration (certaines versions de ant eu des problèmes avec le paquet-info classes).paquet-info
Pour Plus D'Informations
OriginalL'auteur bdoughan
J'ai été faire d'erreur similaire org.codehaus.jackson.JsonParseException et javax.xml.bind.UnmarshalException : avec lié exception: [javax.xml.bind.UnmarshalException: inattendu élément (uri:"sometext", locale:"elementA"). Éléments attendus sont .
C'est lors de l'intégration de RESTEasy et Printemps avec mon DTO est généré à l'aide de JAXB. J'ai été en utilisant Jackson pour la conversion.
Pour le résoudre j'ai introduit le Jackson de la bibliothèque dans la dépendance Maven et il a résolu mon problème. Le jackson de dépendance qui est spécifique à cette a été
Il y avait d'autres Jackson bocaux dont j'avais besoin, donc, mon POM Essentiellement regardé comme ci-dessous.
OriginalL'auteur Vivek