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.
Da ich große XML-Dateien schreiben möchte, verwende ich Stax, um das Wurzelelement collection
auszugeben, und JAXB, um Dokumentunterstrukturen mit Marshaller.marshal(JAXBElement, XMLEventWriter)
zu marshalieren. Dies ist der Ansatz, der von dem inoffiziellen Benutzerhandbuch von jaxb empfohlen wird.
Meine Frage ist, wie kann ich das XML validieren, während es gemarshallt wird? Wenn ich ein Schema an den JAXB-Marshaller binde (mit Marshaller.setSchema()
), erhalte ich Validierungsfehler, weil ich nur einen Teilbaum migriere (er beschwert sich, dass er das collection
root-Element nicht sieht). Ich nehme an, was ich wirklich will do bindet ein Schema an das Stax XMLEventWriter
oder etwas ähnliches.
Kommentare zu diesem Gesamtkonzept wären hilfreich. Im Grunde möchte ich in der Lage sein, JAXB
zu verwenden, um große XML-Dokumente zu marshalieren und zu entfernen, ohne den Speicher zu leeren. Wenn es einen besseren Weg gibt, lass es mich wissen.
Einige Stax-Implementierungen scheinen in der Lage zu sein, die Ausgabe zu validieren. Siehe die folgende Antwort auf eine ähnliche Frage: