2010-03-18 3 views
8

Ich habe ein XML-Schema (foo.xsd) erstellt und xjc verwendet, um meine Bindungsklassen für JAXB zu erstellen. Nehmen wir an, das Wurzelelement ist collection und ich schreibe N document Objekte, die komplexe Typen sind.Validierung mit JAXB und Stax zum Marschall XML-Dokument

Da ich plane, große XML-Dateien zu schreiben, verwende ich Stax, um das collection Wurzelelement zu schreiben, und JAXB, um Dokumentunterstrukturen unter Verwendung von Marshaller.marshal(JAXBElement, XMLEventWriter) zu marshalieren. Dies ist der von jaxb's unofficial user's guide empfohlene Ansatz.

Meine Frage ist, wie kann ich das XML validieren, während es Marshalled ist? Wenn ich ein Schema an den JAXB-Marshaller binde (unter Verwendung von Marshaller.setSchema()), bekomme ich Validierungsfehler, weil ich nur einen Teilbaum sortiere (es beschwert sich, dass es das collection root-Element nicht sieht.) Ich nehme an, was ich wirklich tun möchte, ist bind a Schema der Stax XMLEventWriter oder so ähnlich.

Alle Kommentare zu diesem Gesamtansatz wären hilfreich. Grundsätzlich mag ich in der Lage seine JAXB zu verwenden, um Marschall und Abstellungs große XML-Dokumente ohne aus dem Speicher ausgeführt wird, so dass, wenn es eine ist besser Möglichkeit, dies zu tun, lassen Sie mich wissen.

+0

+1 Gute Frage. – skaffman

Antwort

3

Einige Stax-Implementierungen scheinen in der Lage zu sein, Ausgabe zu validieren.Siehe die folgende Antwort auf eine ähnliche Frage:

Using Stax2 with Woodstox