Tôi đang cố gắng tạo một tài liệu xml kết hợp bằng cách sử dụng XInclude để được unmarshalled thông qua JAXB."Lỗi khi phân tích cú pháp tệp XML" khi phân tích cú pháp bằng cách sử dụng XInclude
Đây là mã unmarshalling tôi:
@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);
}
}
Đây là chính tập tin xml của tôi:
<?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>
Và included.xml:
<?xml version="1.0" encoding="UTF-8"?>
<tag2> Some text </tag2>
Để thực unmarshal nó, Tôi tạo một FileReader
mới với đường dẫn đến tệp xml của tôi (path-to-xml-files/main.xml - đường dẫn là cor rect vì nó có thể tìm thấy tập tin chính rõ ràng). Tuy nhiên, khi tôi chạy nó, có sự cố với tệp được bao gồm. Tôi nhận được một UnmarshalException với một SAXParseException liên kết với thông báo lỗi này: Lỗi cố gắng phân tích cú pháp tệp XML (href = 'path-to-xml-files/include.xml').
Khi tôi kết hợp thủ công nội dung của tệp include.xml vào tệp main.xml, nó sẽ chạy không có vấn đề gì.
Tôi không thể biết đó là vấn đề JAXB hay vấn đề XInclude, mặc dù tôi thực sự nghi ngờ vấn đề này.
Tôi đang thiếu gì?
URL này không tồn tại ... có lẽ bạn có thể tham khảo các nguồn chính thức: http://xerces.apache.org/xerces2-j/features.html – devyndraen
Tôi có cách tiếp cận tương tự và thiết lập tính năng SaxParserFactory 'http: // apache.org/xml/features/xinclude/fixup-base-uris' thành false không giúp được gì ở đây. Bất cứ ai khác đã thành công với điều này? –