Hallo zusammen,
hab die Tage etwas mit JAXB und XSDs gespielt. Tolle Sache.
Eine Frage stellt sich mir aber:
Wenn ich mir jetzt ein XML Schema überlege, dies in einer XSD definiere, dann kann ich mir daraus ja Java-Klassen generieren lassen.
Was aber wenn sich das XML Schema soweit ändert (neue Version), dass die resultierenden Java-Klassen nicht mehr kompatibel sind?
Man könnte jetzt argumentieren dass das ja nicht tragisch ist. Aber wenn mein Programm Daten aus einer “alten” XML lesen und in das neue XML überführen/konvertieren muss (was vllt. wegen des Inhalts nur programmatisch geht), dann muss ich beide XML-Java-Objektstrukuren laden können. Mit einem Classloader würde ich hier nicht unbedingt hantieren wollen.
Der Package-Name der generierten Klassen wird ja aus dem Namespace heraus erzeugt.
Bis dato würde der Namespace z.B. so aussehen:
http://meinedomain.de/xsd/MeinXML
was das Package
de.meinedomain.xsd.meinxml
generieren würde.
Was ist denn hier best-practice? Einfach im Namespace ein Versionselement definieren?
http://meinedomain.de/xsd/MeinXML/v0
--> de.meinedomain.xsd.meinxml.v0
???
Damit könnte ich problemlos beide Varianten als Java-Klassen laden und durch den anderen Packagenamen voneinander unterscheiden.
Allerdings habe ich gelesen, dass man sowas nicht in den Namespace packen sollte. Wieso hab ich aber nicht rausgefunden.
Any ideas?
- Alex
*** Edit ***
Aktuell erscheint mir meine Lösung am praktikabelsten. Wüsste jetzt nicht wieso ich im Namespace keine “Version” einbauen darf/sollte. Der Namespace ändert sich ja nicht einfach so. Und wenn, dann ist das im Endeffekt ja dann ein anderer Namespace der etwas ganz anderes beinhalten (kann, und bei mir auch) wird.
Hab mal testweise in andere XML Projekte geschaut. Da wird das zum Teil auch so gemacht.