# jaxb validierung/verification vor marshalling



## dermoritz (14. Sep 2010)

ich ziemlich neu bei jaxb, hab aber schon öfter xsd-Dateien gemacht und geb mir auch immer Mühe "Restrictions" einzubauen um eine gute Validierung zu haben. Nun hab ich mir mal Jaxb-Code mit xjc erzeugt und schwupps sind alle "Restrictions" weg. Das heißt es ist ein leichtes mit solchem code invalide XML-Dateien zu erzeugen. Da frag ich mich wofür ich aus der xsd überhaupt code generiert hab.
Nun frag ich mich ob ich irgendwas falsch mache oder verpasst habe um auch die entscheidende Information (nicht nur Struktur sondern auch Inhalt) der XSD in den Code zu retten.

Anders gefragt wie erzeuge ich Code mit dem ich Valide xml-Objekte erzeugen kann? 
Die setter manuell mit Validierungen aufzumöbeln erscheint mir etwas bekloppt - macht man da Fehler oder ändert sich die xsd-Datei sind diese Arbeiten hinfällig.
Nun bin ich über https://jaxb-verification.dev.java.net/ gestolpert und Frage mich ob das das (einzige) Mittel der Wahl ist um valide Objekte zu bekommen. Amleibsten wäre mir ein JAXB compiler der die Restrictions "versteht" und entsprechende Setter bastelt - gibts sowas?

Muss man das verstehen: das gibts auch noch: https://jaxbvalidation.dev.java.net/
scheint irgendwie das selbe zu sein?!
^^beide scheinen sehr veraltet aber der Ansatz gefällt mir.

Mein Stand ist im Moment: per Schema-Objekt kann man zumindest das (un)marshallig validieren gegen das Schema. Für das marshalling ist das natürlich etwas spät - man baut fleißig Objekte, klebt sie zusammen und erst beim marshalling merkt man, das manche nicht valide sind. Um das zu verhindern müsste man nach jedem setter und jeder Instantiierung den marshaller anwerfen um zu schauen ob man ein valides Objekt im sinne des Schemas hat - irgendwie völlig bescheuert oder?


----------



## Wildcard (14. Sep 2010)

Hmm, ok, dreimal die gleiche Antwort hintereinander, aber was solls. 
Überleg dir mal auf EMF umzusteigen.
Eclipse Modeling - EMF - Home
EMF kann die Standard XSD Constraints out of the box validieren (direkt im Objektbaum, dafür musst du noch nicht mal serialisieren). Wenn du komplexere Constraints auf deinem Modell hast gibt es ein Validation Framework und kompletten OCL Support.


----------



## dermoritz (15. Sep 2010)

Vielen Dank,

bei irgendeinem gegoogle ist mir EMF auch untergekommen, aber ich hab nicht geschnallt, dass das sinnvoll sein könnte. EMF ist aber nicht nur für XML oder? Ist EMF das Mittel der Wahl ich bin z.B. auch auf XMLBeans gestoßen?! 

Insegsamt erklärt das aber etwas, warum viele JAXB-basierte Geschichten am sterben sind, oder?
Die Objekt direkt mit dem XSD validieren zu können ist für mich essentiell. Ich versteh nicht wieso das JAXB nicht kann bzw. eventuell nur über ein totes Projekt wie das oben genannte. Oder hab ich etwas übersehen?


----------



## Wildcard (15. Sep 2010)

> EMF ist aber nicht nur für XML oder?


Nein, EMF ist ein Modelling Framework. Die eigentliche Persistenz und das Laden sind nur ein winziger Teil der Funktionalität. Die Persistenz muss auch auch nicht XML sein, möglich sind unter anderem:
Relationale DBs, Model Repositories, textuell, XML, XMI,...


----------

