XInclude を使用して結合された xml ドキュメントを作成し、JAXB 経由で非整列化しようとしています。
ここに私のアンマーシャリングコードがあります:
@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);
}
}
これが私のメインの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>
そしてincluded.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tag2> Some text </tag2>
実際に非整列化するために、xml ファイルへのパスを使用して新しいファイルを作成しFileReader
ます (path-to-xml-files/main.xml - メイン ファイルを明確に見つけることができるため、パスは正しいです)。ただし、実行すると、含まれているファイルに問題があります。リンクされた SAXParseException で UnmarshalException が発生し、次のエラー メッセージが表示されます: XML ファイルの解析中にエラーが発生しました (href='path-to-xml-files/included.xml')。
included.xml のコンテンツを main.xml に手動でマージすると、問題なく実行されます。
JAXB の問題なのか XInclude の問題なのかはわかりませんが、後者の可能性が高いと思われます。
私は何が欠けていますか?