JAXP 实现不支持 setXIncludeAware

问题描述 投票:0回答:1

您能否帮助解决“此 JAXP 实现或更早版本不支持 setXIncludeAware:class org.apache.xerces.jaxp.SAXParserFactoryImpl”问题

服务器使用的Java版本:1.8.0_361 JVM 朗姆时间版本:8.1.092 11.0.18+000

该项目是使用:saxon-he-12.5.jar构建的

代码片段

public class PositionalXMLReader {
    final static String LINE_NUMBER_KEY_NAME = "lineNumber";
    final static String END_LINE_NUMBER_KEY_NAME = "endLineNumber";

    public static Document readXML(final InputStream is) throws IOException, SAXException {
        final Document doc;
        SAXParser parser;
        try {
            final SAXParserFactory factory = SAXParserFactory.newInstance();
            parser = factory.newSAXParser();
            
            
            factory.setXIncludeAware(true);
            factory.setNamespaceAware(true);
            
            
            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);
        }

在服务器上执行代码没有出现以下错误:

“详细信息:java.lang.UnsupportedOperationException;此 JAXP 实现或更早版本不支持 setXIncludeAware:类 org.apache.xerces.jaxp.SAXParserFactoryImpl,UnsupportedOperationException:此 JAXP 实现或更早版本不支持 setXIncludeAware:类 org.apache。 xerces.jaxp.SAXParserFactoryImpl"

java xslt xml-parsing jaxp xinclude
1个回答
0
投票

看起来您正在选择 Xerces 的 Apache 版本而不是 JDK 版本,并且您可能正在选择相当旧的版本。检查你的类路径上有什么。

坦率地说,使用像

SAXParserFactory.newInstance()
这样的 JAXP 方法是非常危险的。这意味着您将在程序运行时选择类路径上的任何实现,这可能与您测试代码所针对的任何实现有很大不同。

© www.soinside.com 2019 - 2024. All rights reserved.