Próbuję utworzyć połączony dokument XML za pomocą XInclude, aby usunąć go z pamięci przez JAXB."Błąd podczas próby przeanalizowania pliku XML" podczas analizowania za pomocą XInclude
Oto mój kod unmarshalling:
@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("Cannot parse XML: Additional information is attached. Please ensure your XML is valid.", e);
}
}
Tu jest mój główny plik xml:
<?xml version="1.0" encoding="UTF-8" ?>
<tag1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2001/XInclude"
xsi:schemaLocation="path-to-schema/schema.xsd">
<xi:include href="path-to-xml-files/included.xml"></xi:include>
</tag1>
I included.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tag2> Some text </tag2>
Aby rzeczywiście unmarshal go, Tworzę nowy FileReader
ze ścieżką do mojego pliku xml (path-to-xml-files/main.xml - ścieżka jest cor rect, ponieważ może wyraźnie znaleźć główny plik). Kiedy go uruchomię, jest jednak coś nie tak z dołączonym plikiem. Otrzymuję wyjątek UnmarshalException z połączonym wyjątkiem SAXParseException z następującym komunikatem o błędzie: Błąd podczas próby przeanalizowania pliku XML (href = 'path-to-xml-files/included.xml').
Kiedy ręcznie scalam zawartość pliku included.xml do pliku main.xml, działa bez żadnych problemów.
Nie mogę stwierdzić, czy jest to problem JAXB, czy problem XInclude, choć podejrzewam to drugie.
Czego mi brakuje?
Ten adres URL nie istnieje ... może można odwoływać się do oficjalnego źródła: http://xerces.apache.org/xerces2-j/features.html – devyndraen
Mam to samo podejście i ustawienie funkcji "http: // apache.org/xml/features/xinclude/fixup-base-uris" na false nie pomogło tutaj. Ktoś, kto odniósł z tym sukces? –