我正在尝试使用 xinclude 将 xml 文件解组为 java 对象。我有一个基于我的 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 InputSource inputSource = new InputSource(reader);
xr.parse(inputSource)
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);
}
}
由于我正在调用 xr.parse(),因此实际的解组不成功(因为解析关闭了流)。但是,我收到解析错误[Error] file-name.xml:2:66: cvc-complex-type.3.2.2: Attribute 'xml:base' is not allowed to appear in element 'element name'。
我发现这是因为 xinclude 总是将xml:base属性添加到包含的元素以帮助保留基本 uri。问题是我的架构不允许这个属性。有什么办法让我摆脱这个吗?我在网上环顾四周,并没有真正看到任何可以轻松实现的东西。