请求解决Java 8环境下setXIncludeAware不支持的JAXP实现异常
解决方案:setXIncludeAware不支持异常处理
问题根源
- 代码顺序错误:你先调用
factory.newSAXParser()创建了解析器,之后才调用setXIncludeAware(true)和setNamespaceAware(true)配置工厂。JAXP工厂的配置必须在创建解析器实例之前完成,否则配置不会生效,甚至触发未支持操作异常。 - Xerces版本兼容问题:项目中使用的
org.apache.xerces.jaxp.SAXParserFactoryImpl版本较旧,在Java 8环境下不支持setXIncludeAware方法;或是项目依赖冲突,引入了不兼容的Xerces版本。
修复步骤
1. 修正代码配置顺序
将工厂配置代码移到创建SAXParser之前,确保配置生效:
public static Document readXML(final InputStream is) throws IOException, SAXException { final Document doc; SAXParser parser; try { final SAXParserFactory factory = SAXParserFactory.newInstance(); // 先配置工厂属性,再创建解析器 factory.setXIncludeAware(true); factory.setNamespaceAware(true); parser = factory.newSAXParser(); final DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); final DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); doc = docBuilder.newDocument(); } catch (final ParserConfigurationException e) { throw new RuntimeException("Can't create SAX parser / DOM builder.", e); } // 后续处理逻辑... }
2. 解决Xerces版本兼容问题
如果调整顺序后仍报错,按以下方式处理:
- 升级Xerces版本:将项目中的Xerces依赖升级到兼容Java 8的最新版本(如2.12.2),替换旧依赖。
- 指定Java自带JAXP实现:通过系统属性强制使用Java 8自带的Xerces实现(该版本支持
setXIncludeAware),在代码开头添加:System.setProperty("javax.xml.parsers.SAXParserFactory", "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"); - 排查依赖冲突:检查项目依赖树,排除Saxon或其他依赖引入的旧版Xerces,确保使用统一的兼容版本。
3. 优化DOM解析逻辑(可选)
如果你的最终目标是解析XML生成DOM文档,可直接使用DocumentBuilderFactory配置XInclude,无需额外创建SAXParser,简化代码:
public static Document readXML(final InputStream is) throws IOException, SAXException { final Document doc; try { final DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); docBuilderFactory.setXIncludeAware(true); docBuilderFactory.setNamespaceAware(true); final DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); doc = docBuilder.parse(is); // 传入输入流完成解析 } catch (final ParserConfigurationException e) { throw new RuntimeException("Can't create DOM builder.", e); } return doc; }
内容的提问来源于stack exchange,提问作者Santanu Singha Roy
相关产品推荐
相关产品推荐

