Ich versuche, ein kombiniertes XML-Dokument zu erstellen, das XInclude verwendet, um über JAXB entmarshalled zu werden.
Hier ist mein Entmarshalling-Code:
@Override
public T readFromReader(final Reader reader) throws Exception {
final Unmarshaller unmarshaller = createUnmarshaller();
final SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setXIncludeAware(true);
spf.setNamespaceAware(true);
//spf.setValidating(true);
final XMLReader xr = spf.newSAXParser().getXMLReader();
final SAXSource source = new SAXSource( xr, new InputSource(reader) );
try {
final T object = (T) unmarshaller.unmarshal(source);
postReadSetup(object);
return object;
} catch (final Exception e) {
throw new RuntimeException("XML kann nicht geparst werden: Zusätzliche Informationen sind angehängt. Stellen Sie sicher, dass Ihr XML gültig ist.", e);
}
}
Hier ist meine Haupt-XML-Datei:
Und included.xml:
Einige Text
Um es tatsächlich zu entmarshallen, erstelle ich ein neues FileReader
mit dem Pfad zu meiner XML-Datei (Pfad-zu-XML-Dateien/main.xml - der Pfad ist korrekt, da er die Hauptdatei klar finden kann). Wenn ich es ausführe, gibt es jedoch ein Problem mit der inkludierten Datei. Ich erhalte eine UnmarshalException mit einer verknüpften SAXParseException und dieser Fehlermeldung: Fehler beim Versuch, die XML-Datei (href='Pfad-zu-XML-Dateien/included.xml') zu parsen.
Wenn ich den Inhalt von included.xml manuell in main.xml merge, läuft es ohne Probleme.
Ich kann nicht sagen, ob es sich um ein JAXB-Problem oder ein XInclude-Problem handelt, obwohl ich letzteres stark vermute.
Was übersehe ich?