Java JaxB - Objet à Chaîne XML pour Objet

J'ai un problème à l'aide de JaxB dans Netbeans 7.1.2.

J'ai généré automatiquement mes classes à partir d'un schéma à l'aide de JaxB (Nouveau JaxB de Liaison). Je suis la création de l'objet qui va être sérialisé en XML chaîne à l'aide de la Marshaller et ensuite revenir à une nouvelle instance de l'objet à partir de la Chaîne XML. Cependant, je reçois l'exception suivante:

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.somewhere.com/some/path", local:"MyQueryComplexTypeQuery"). Expected elements are (none)

Le marshalling/sérialisation XML chaîne fonctionne très bien. C'est quand il est unmarshalled/désérialisé qui est à l'origine du problème.

J'utilise le code suivant pour construire l'objet et le maréchal à une chaîne de caractères XML:

//build the object
ObjectFactory of = new ObjectFactory();

MyQueryComplexType oaaqc = of.createMyQueryComplexType();
oaaqc.setField1("edit");
oaaqc.setField2("net");
oaaqc.setField3("24");

JAXBElement<MyQueryComplexType> createMyQueryComplexType = of.createMyQueryComplexTypeQuery(oaaqc);

//serialise to xml
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(MyQueryComplexType.class);            
Marshaller m = context.createMarshaller();
m.marshal(createMyQueryComplexType, writer);

//output string to console
String theXML = writer.toString();
System.out.println(theXML);

Ce produit le code XML suivant (formaté) dans la console:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MyQueryComplexTypeQuery xmlns="http://www.somewhere.com/some/path">
    <Field1>edit</Field1>
    <Field2>net</Field2>
    <Field3>24</Field3>
</MyQueryComplexTypeQuery>

J'en viens maintenant à désérialiser/unmarshal la chaîne à une nouvelle instance MyQueryComplexType avec le code suivant:

Unmarshaller u = context.createUnmarshaller();
MyQueryComplexTypeQuery o = (MyQueryComplexType) u.unmarshal(new StringReader(theXML));

Dans la génération automatique d'package-info.java elle a le contenu suivant:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.somewhere.com/some/path", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package MyProject.SomeNamespace.MyQuery;

Je pensais que le simple processus de l'objet -> chaine -> objet de travail. C'est la première fois que j'ai utilisé JaxB (doux). J'ai vu d'autres posts mentionnant les espaces de noms, et tout semble ok pour moi. J'ai généré automatiquement les classes à partir du schéma, construit l'objet, rassemblées pour la chaîne xml. J'ai pensé, il suffit d'inverser le processus pour unmarshal serait similaire.

L'exception est levée en ligne:

MyQueryComplexTypeQuery o = (MyQueryComplexType) u.unmarshal(new StringReader(theXML));

Je pensais que je faisais la unmarshalling de la chaîne d'objet serait simple. Je ne sais pas si je fais quelque chose de mal ou manque quelque chose. J'espère que vous les gars peuvent éclairer ou m'ouvrir les yeux.

J'ai coupé le code de simplifier ce qui est dans mon application qui provoque l'erreur. Les espaces de noms ont été changés pour protéger l'identité des choses sur le web.

Toutes les pensées?

Grâce

Andez

OriginalL'auteur Andez | 2012-11-08