Comment faire de JAXB unmarshaller d'ignorer les préfixes?
J'ai le code XML suivant:
<ns2:Person name="John" age="20" />
Et je veux unmarshal à JAXB objet Personne qui a été généré à partir du fichier XSD.
c'est le code, je suis en cours d'exécution:
JAXBContext context = JAXBContext.newInstance(PersoEntity.class);
Unmarshaller um = context.createUnmarshaller();
StringReader sr = new StringReader(xml);
Person p = (Person)um.unmarshal(sr);
Étonnamment j'obtiens l'exception suivante:
javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException: The prefix "ns2" for element "ns2:Person" is not bound.]
Comment puis-je le résoudre? Grâce
vous n'posté une balise xml... est-ce vraiment votre cas, je.e vous voulez unmarshall juste ce segment (ou il y a tout un document xml, qui devrait avoir xmlns:ns2 défini) ?
vous l'aurez deviné, seulement ce segment est ce que je veux
vous l'aurez deviné, seulement ce segment est ce que je veux
OriginalL'auteur Nimrod Dayan | 2012-08-15
Vous devez vous connecter pour publier un commentaire.
OBTENIR LE FRAGMENT
Le chemin que vous êtes en train d'obtenir le fragment XML est à l'origine des déclarations d'espace de noms pour être perdu. Dans votre fragment
ns2
n'est plus un préfixe, il vous suffit d'un nom d'élément avec un deux-points (ns2:Person
). Cela va provoquer des problèmes avec l'espace de noms courant d'analyseurs. L'article ci-dessous peut être une meilleure approche pour vous d'obtenir le fragment XML:DE LA MANIPULATION DE VOTRE CAS D'UTILISATION
En utilisant le fragment XML que vous avez, vous pouvez créer une
XMLFilter
qui supprime le préfixe de l'élément XML, et de tirer profit de JAXB estUnmarshallerHandler
faire la unmarshalling.Démo
PersonEntity
OriginalL'auteur bdoughan
Votre meilleur pari est probablement pour imbriquer l'élément souhaité à l'intérieur d'un autre élément qui lie l'espace de noms. Il n'importe pas vraiment ce que vous lier à, il suffit de faire un document XML valide, qui va analyser. Ensuite, vous pouvez unmarshal par type déclaré
Cela a fonctionné pour moi, même si au lieu d'imbrication à l'intérieur d'un élément nouveau, je viens d'ajouter l'espace de noms des infos sur le niveau supérieur de la balise que je recevais.
OriginalL'auteur John Watts