Der Standardansatz für die Deserialisierung von JAXB XML scheint darin zu bestehen, den Paketnamen beim Erstellen des Kontexts anzugeben. Dann sieht JAXB die Klasse bis basierend auf dem Wurzelelement:Kann JAXB den Klassennamen im XML speichern, so dass der Deserialisierungscode keine Kenntnis der Klasse benötigt?
JAXBContext jc = JAXBContext.newInstance("com.foo");
Unmarshaller u = jc.createUnmarshaller();
Object o = u.unmarshal(new StringReader("<?xml version="1.0" encoding="UTF-8" standalone="yes"?><MyJaxb>..."));
Ich bin für einen flexibleren Ansatz, wo ich muß nicht die Paketnamen angeben und noch jedes Objekt deserialisieren kann. Dies wäre so einfach, wie JAXB das Paket im XML speichert, aber ich kann nicht herausfinden, wie das geht. Ich kann den Code selbst schreiben, aber das wäre unangenehm. Es würde gerne JAXB tun, wenn möglich. Übrigens verwende ich keine Schemas, nur Annotationen und Marshal/Unmarshal. Irgendwelche Ideen?
Ich möchte die Möglichkeit haben, jedes Objekt in meinem Klassenpfad zu deserialisieren, z. B .: Objekt o = u.unmarshal (...); ohne jedes mögliche Paket angeben zu müssen und die Liste kontinuierlich zu aktualisieren, wenn ich Klassen mit neuen Paketen hinzufüge. Sie müssen lediglich den Paketnamen im XML-Code speichern. Ich denke, GSON macht das. – Andrew
@Andrew. Deserialisieren und was tun? Das war die Frage. Sie können mit Object in Java nicht viel anfangen, aber die Übergabe an JS kann wesentlich mehr. – Osw
Es gibt viele Dinge, die Sie mit Object (z. B. Reflektion) tun können, und das ist es, was ich brauche. Sieht so aus, als würde meine Lösung den Paketnamen zum XML hinzufügen. – Andrew