JAXB unmarshall avec des espaces de noms et de préfixe
Je suis à l'aide de JAXB pour analyser les éléments xml de la réponse SOAP. J'ai défini des classes POJO pour les éléments xml. J'ai testé les classes pojo sans préfixe d'espace de noms et sa fonctionne bien .Mais quand je suis en train d'analyser avec les espaces de noms et de préfixe en face de l'exception suivante.L'exigence est d'analyser l'apport de la SOAPMessage Objet
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://schemas.xmlsoap.org/soap/envelope/", local:"Envelope"). Expected elements are <{}Envelope>
Essayé de résoudre par la création de @XMLSchema pour le paquet dans package-info.java et trouve ce fichier dans le dossier du package.Quelqu'un peut-il me guider pour aller de l'avant?
Visée ce-postes mais n'a m'aider .
ÉDITÉ :XMLSchema
@javax.xml.bind.annotation.XmlSchema (
xmlns = { @javax.xml.bind.annotation.XmlNs(prefix = "env",
namespaceURI="http://schemas.xmlsoap.org/soap/envelope/"),
@javax.xml.bind.annotation.XmlNs(prefix="ns3", namespaceURI="http://www.xxxx.com/ncp/oomr/dto/")
}
)
package com.one.two;
Merci d'avance
édité...
Que dire de l'élément d'Enveloppe? Est-il bien des espaces?
Finalement, voulez-vous de la carte de l'enveloppe pour des objets ou tout simplement le corps? Voici comment vous pourriez la carte au moyen d'un SAVON document: blog.bdoughan.com/2012/08/...
j'ai parlé à plusieurs de vos blogs en xml.Dois-je veux créer le fichier à partir de la SOAPMessage Objet? est possible de l'analyser au moyen des éléments de l'Objet ? oui je veux lire les éléments du corps,
OriginalL'auteur gks | 2013-10-16
Vous devez vous connecter pour publier un commentaire.
Cela peut être fait sans modification de l'généré JAXB code à l'aide de la norme SOAPMessage classe. J'ai écrit à propos de ce ici et ici
C'est un peu délicat, mais fonctionne correctement.
De triage
Unmarshalling
JAXBContext.newInstance("com.my.package").createUnmarshaller()
OriginalL'auteur Adam
Voici comment vous pouvez gérer votre utilisation cae:
Si Vous avez Besoin de la Carte de la
Envelope
Élémentpaquet-info
Vous utilisez généralement le
@XmlSchema
comme suit. À l'aide de lanamespace
etelementFormDefault
propriétés comme je l'ai fait signifie que toutes les données mappées aux éléments XML sauf mappé appartiennent à lahttp://www.xxxx.com/ncp/oomr/dto/
espace de noms. Les informations spécifiées dansxmlns
est pour génération de schéma XML bien que certains JAXB implémentations de l'utiliser pour déterminer le préféré préfixe d'espace de noms lors du débranchement (voir: http://blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html).Enveloppe
Si, dans le
com.one.two
vous avez besoin de la carte pour les éléments d'un espace de noms autre quehttp://www.xxxx.com/ncp/oomr/dto/
alors vous avez besoin de le spécifier dans la@XmlRootElement
et@XmlElement
annotations.Pour Plus D'Informations
Si Vous Voulez Juste pour Mapper le Corps
Vous pouvez utiliser un StAX analyseur d'analyser le message et l'avance à la charge de la partie et unmarshal à partir de là:
Pour Plus D'Informations
Merci pour votre réponse@Blaise Doughan.
Blaise, merci beaucoup pour ce post, il m'a beaucoup aidé. Dans mon cas, mon SAVON enveloppe contenait des éléments du texte, auquel cas l'appel à getLocalName() a été lancer une exception sur un contenu non valide. J'ai fait un petit changement à votre boucle while pour contourner cela: <code> while (xsr.hasNext()){ xsr.next(); if (xsr.hasName() && xsr.getLocalName().equals("retour")) break; } </code>
OriginalL'auteur Blaise Doughan
Voulais juste ajouter sur la les réponses existantes -- alors que unmarshalling si le document XML n'est pas l'espace de noms courant, vous pouvez recevoir un message d'erreur: javax.xml.bind.UnmarshalException: inattendu élément (uri:"http://some.url";, local:"someOperation")
Si c'est le cas, vous pouvez simplement utiliser une méthode différente sur le unmarshaller:
OriginalL'auteur ptdunlap