2010-11-18 3 views
5

Es gibt eine Reihe von XSD-Dateien, mit den folgenden Typen beschrieben:Welches Java-XML-Framework kann Codegenerierung mit Einschränkungen/Erweiterungen in Schemas verarbeiten?

A ist ein komplexer Typ mit verschiedenen Elementen. B schränkt A ein und behält nur einige seiner Elemente bei C erweitert B und fügt einige Elemente hinzu.

So bedeutet dies, dass eine Java-Klasse mit einem Werkzeug erzeugt Typ C aus dem XML-Schema verwendet wird, wird erwartet, dass nur die Mitglieder von A umfasst, die durch B gehalten werden, und die neuen hinzugefügt von C

Um die Dinge noch schwieriger zu machen, ändert B tatsächlich das Attribut minOccurs einiger Elemente.

Gibt es irgendwelche Frameworks, die damit umgehen können? Ich habe EMF ausprobiert und Einschränkungen spiegeln sich nicht einmal im Code wider.

Antwort

2

Bei Verwendung von komplexen XSDs hatte ich die besten Ergebnisse mit XMLBeans.

  • Es hat vollständige XML-Schema-Unterstützung.
  • Es war das einzige Framework, das korrekten Code für die komplizierten XML-Schemas generieren konnte, die ich verwenden musste.

andere wirklich nützliche Funktion ist:

Wenn unmarshalling eine XML-Instanz des voll XML infoset gehalten und ist in den Entwickler zur Verfügung. Dies ist aufgrund der XML-Untermenge, die in Java nicht einfach dargestellt wird, von entscheidender Bedeutung. Zum Beispiel könnte die Reihenfolge der Elemente oder Kommentare in einer bestimmten Anwendung benötigt werden.

+0

Danke Martin, tatsächlich scheint es das vollständige Schema zu unterstützen. – mahonya

2

Hier antoher Alternative (für Sie einen auswählen zu können): Die Axis2 DataBinding Framework (ADB) Typhierarchie und benutzerdefinierte Einschränkungen unterstützt.

Pros: Es generiert die vollständige Schemastruktur und implementiert Getter und Setter von jedem Element. Auf den Setter jedes Typs überprüft y die schemadefinierten Restriktionen, und wenn der zu setzende Wert nicht mit der Restriktion übereinstimmt, löst er eine Exception aus (nach der eigenen set-Methode) und unterstützt StAX zur Serialisierung/Deserialisierung.

Cons: Der generierte Code kann ein wenig zu ausführlich führt, werden die Validierungsausnahmen zu wenige explikative, es bedeutet „einfach“ zu sein (so mit komplexen Typ Erweiterungen oder Einschränkungen Sie einige Probleme finden können), und es enthält einige Abhängigkeiten zur ADB-Bibliothek (dh die generierten Beans implementieren die Schnittstelle org.apache.axis2.databinding.ADBBean).

+0

ADB Seite enthält folgende an der Unterseite: „Bekannte Einschränkungen ADB soll eine‚einfache‘Datenbindung Rahmen sein, und nicht alle Arten von Schemata zu kompilieren gemeint Folgende Einschränkungen sind die meisten hervorgehoben 1.. Komplexe Typenerweiterungen und Einschränkungen " – mahonya

+0

Ja, ich erwähnte es als eine Con.Aber ich habe es für die Serialisierung einiger herarchichischer Daten (eine Elternklasse und eine Menge erweiterter Klassen, einige Zusammensetzungs-/Aggregationsbeziehungen) und mit den üblichen von XSD unterstützten Einschränkungen (wie Nullstellbarkeit, Anzahl der Vorkommen, Regexabgleich, usw.)), und hat gut funktioniert. Der Punkt hier ist, dass die Überprüfungsausnahmen mit einer leeren Nachricht erzeugt wurden, was ein Problem sein kann. –