Alles klar, ich hatte bisher damit noch keinen wirklichen Kontakt.
Mal sehen, ob das meine Probleme beheben kann.
EMF ist sehr viel umfangreicher als JAXB, eine gewisse Einstiegshürde ist also vorhanden, das zahlt sich aber später mehr als aus. Ein großer Unterschied, bei JAXB geht alles um XML, bei EMF geht alles um Modelle. Für EMF ist XSD nur eine mögliche Form wie ein Modell formal erfasst werden kann ebenso wie XML nur eine mögliche Serialisierungsform für ein Modell ist.
Was grundsätzlich zu tun ist:
Du lässt dir von EMF auf Basis der XSD ein ecore (die formale Definition deines Modells) und ein Genmodel (enthält zusatzinformationen für den Codegenerator) erstellen und generierst daraus Java Code.
Die XSD Constraints bleiben dabei soweit wie möglich erhalten.
Mit dem Java Code hast du dann alles um eine XML einlesen, verändern, validieren und speichern zu können.
Wo die generierte Validierung nicht ausreicht, kannst du eigene Validierung einklinken. EMF Code kann problemlos von Hand erweitert und verbessert werden (ein weiterer Unterschied zu JAXB), denn der Code Generator kann manuellen und generierten Code mergen.
Validieren funktioniert ganz einfach über statische Methoden der Diagnostician Klasse. Dem Diagnostician übergibst du wahlweise ein Objekt oder Teilbaum aus deinem Modell, oder die ganze Resource und du bekommst eine Liste mit Validierungsfehlern zurück.
EMF kann dir auf Wunsch auch eine Example Klasse generieren (wird per Default gemacht wenn du die Unit Test Stubs generieren lässt) die zeigt wie man mit dem generierten Code XML Dateien lädt, bearbeitet und speichert.