You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse RCP调用ExtendedXMLLoadImpl加载arxml文件出现ClassCastException报错

问题根因与解决方案

根因定位

异常的核心原因是运行时实际使用的XML解析器为JDK内置的com.sun.org.apache.xerces实现,而非Sphinx要求的独立org.apache.xerces插件版本:

  • ExtendedErrorHandlerWrapper实现的是独立Apache Xerces包下的org.apache.xerces.xni.parser.XMLErrorHandler接口
  • 运行时被注入的是JDK内置的Sun Xerces实现,要求传入的是com.sun.org.apache.xerces.internal.xni.parser.XMLErrorHandler,两者全类名不同,因此触发类转换异常。

解决方案

  • 第一步:配置JAXP实现类优先级
    在RCP应用的运行配置(Run Configuration)或产品配置(*.product)的VM参数中添加以下配置,强制JAXP加载插件版的Apache 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.xerces.jaxp.SAXTransformerFactoryImpl
    
  • 第二步:调整OSGi插件启动顺序
    在目标平台或产品的插件启动配置中,将org.apache.xerces插件的启动级别设置为1,开启自动启动,确保其在EMF、Sphinx相关插件之前完成初始化。
  • 第三步:校验依赖配置
    检查你的RCP插件的MANIFEST.MF:
    • 确保已添加对org.apache.xerces包的导入依赖
    • 没有配置排除javax.xml系统包的导入规则
    • 不要手动引入Sun内部Xerces相关类的引用
  • 第四步:Tycho构建适配(如果适用)
    若使用Tycho做RCP产品构建,需要在pom.xml的tycho-surefire、tycho-p2-runtime等插件配置中同步添加上述VM参数,避免构建、测试阶段出现相同异常。

验证方法

可以在加载ARXML的代码前添加调试逻辑,确认解析器实现生效:

System.out.println(SAXParserFactory.newInstance().getClass().getName());

输出为org.apache.xerces.jaxp.SAXParserFactoryImpl即代表配置生效。

内容的提问来源于stack exchange,提问作者m100409

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:45:04