运行Xalan 2.7.2报SAXParserFactory无法创建错误如何解决?
Xalan 2.7.2 执行报错解决方案
问题根因
报错的核心原因有两个:
- 启动命令里的依赖包路径存在拼写错误,导致Xalan找不到SAX解析器的实现文件
- AWS服务器的JDK内置了XML解析实现,和手动引入的Xerces包存在类加载优先级冲突
修复步骤
1. 修正依赖路径
你当前命令中xercesImpl.jar的路径存在明显错误,多拼接了一层/xalan.jar/(xalan.jar是JAR文件不是目录,无法作为路径前缀),原错误路径:/home/ec2-user/Search_Aids/xalan-jar/xalan-j_2_7_2/xalan.jar/xalan-j_2_7_2/xercesImpl.jar
修正后路径:/home/ec2-user/Search_Aids/xalan-jar/xalan-j_2_7_2/xercesImpl.jar
2. 添加JVM参数指定解析器实现
为了避免和JDK内置的XML解析实现冲突,需要添加三个系统参数,强制Xalan使用你手动引入的Xerces解析器:
-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl -Djavax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl
3. 关于-FLAVOR s2s=SAX参数说明
该参数作用是指定XSLT使用SAX流模式处理文件,无需加载整个XML为DOM树,适合处理大体积XML时降低内存占用,和本次报错无关,无需移除。
完整修正后的执行命令
java -Xmx3036m \ -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl \ -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl \ -Djavax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl \ -Xbootclasspath/a:/home/ec2-user/Search_Aids/xalan-jar/xalan-j_2_7_2/xalan.jar:/home/ec2-user/Search_Aids/xalan-jar/xalan-j_2_7_2/xercesImpl.jar:/home/ec2-user/Search_Aids/xalan-jar/xalan-j_2_7_2/xml-apis.jar \ org.apache.xalan.xslt.Process \ -in dummy.xml \ -xsl /home/ec2-user/Search_Aids/entry.xsl \ -out entry.xml \ -FLAVOR s2s=SAX \ -param dinput d2021.xml \ -param qinput q2021.xml \ -param prev_index_mapping previdxrefs.xml
内容的提问来源于stack exchange,提问作者Jianhua Ye
相关产品推荐
相关产品推荐

