您能否帮助解决“此 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"
看起来您正在选择 Xerces 的 Apache 版本而不是 JDK 版本,并且您可能正在选择相当旧的版本。检查你的类路径上有什么。
坦率地说,使用像
SAXParserFactory.newInstance()
这样的 JAXP 方法是非常危险的。这意味着您将在程序运行时选择类路径上的任何实现,这可能与您测试代码所针对的任何实现有很大不同。