5 Stimmen

"Fehler beim Versuch, die XML-Datei zu analysieren" beim Analysieren mit XInclude

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?

2voto

Ich habe drei Stunden lang mit genau demselben Problem gekämpft und schließlich habe ich das hier gefunden:

xerces.apache.org/xerces2-j/features.html

Kurz gesagt, Sie müssen die folgende Zeile hinzufügen:

spf.setFeature("http://apache.org/xml/features/xinclude/fixup-base-uris", false);

0voto

rnxrnask Punkte 1

Ich hatte genau dasselbe Problem. Tatsächlich erwartet das href-Attribut eine URI, die sein kann:

  • Entweder eine HTTP-Adresse (das bedeutet, dass Ihr eingeschlossenes XML irgendwo gehostet werden muss)
  • Oder eine Datei auf Ihrem lokalen Rechner. Aber in diesem Fall müssen Sie es mit "file:..." voranstellen und den absoluten Pfad angeben.

Mit Ihrem Beispiel:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X