2011-01-05 6 views

Antwort

4

Sie müssen die @ XmlRootElement-Annotation nicht verwenden. Stattdessen können Sie Ihr Root-Objekt in einer Instanz von JAXBElement wickeln:

QName qName = new QName(null, "customer"); 
JAXBElement<Customer> jaxbElement = new JAXBElement<Customer>(qName, Customer.class, customer); 
marshaller.marshal(jaxbElement, System.out); 

Für ein ausführliches Beispiel siehe:

JAXB Implementationen wie EclipseLink MOXy (Ich bin der tech lead) bieten auch alternative Metadatendarstellungen wie XML. Ein Beispiel finden Sie unter:

+1

Danke Blaise! Aber dieses Beispiel ist ein Marshalling-Fall, wie wäre es mit dem Unmarshalling-Fall? Ich denke, dass Abmarshalling JAXBElement nicht als Argument verwendet, ist also @XmlRootElement Annotation unverzichtbar? – Take

+0

Sie können den Typ angeben, den Sie entpacken möchten, indem Sie die Klasse als Parameter für einige Unmarshal-Methoden angeben. Dies wird das Ergebnis in einem JAXBElement zurückgeben. –

+0

Vielen Dank für Ihre schnelle Antwort, Blaise. Ich habe einige unmarshale Methoden übersehen ... Ich habe es wieder versucht, es ist gelungen! Vielen Dank! Und ich habe noch eine verwandte Frage. Jetzt erzeuge ich JAXBContext und (Marshaller oder Unmarshaller) Instanzen, wenn ich auf den Server zugreife, weil JAXBContext nicht dieselben Argumente, sondern unterschiedliche Klassen anwendet. Gibt es Probleme bei der Leistung? – Take