weblogic10.3 java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

本文介绍了解决WebLogic 10.3中出现的java.lang.ClassCastException异常的方法,涉及配置xercesImpl.jar、调整类路径及指定SAXParserFactory实现。

weblogic10.3 java.lang.ClassCastException: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

 

1 把xercesImpl.jar 包放到wl_home/server/lib 下

 

2 修改wl_home/common/bin 下的commEnv.cmd 在set WEBLOGIC_CLASSPATH的类路径添加 ;%WL_HOME%/server/lib/xercesImpl.jar

 

3 domain的bin目录下 修改 set SAVE_JAVA_OPTIONS=%JAVA_OPTIONS% -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl

 

 

4 如果项目中有xercesImpl.jar 及其 相关比如 xercesImpl-api.jar 删除即可

 

 

参考如下链接 http://oracleseeker.com/2009/09/11/weblogic_sax_not_recognized/ http://oracleseeker.com/2009/09/16/ibm_jdk_factoryconfigurationerror_xml_parser_saxparserfactoryimpl/

<think>好的,我现在需要解决用户在WebLogic启动时遇到的java.lang.ClassCastException异常,具体错误信息是org.apache.struts.action.ActionForward。用户还提供了四个引用内容,我需要结合这些信息来分析问题。 首先,用户的问题是关于WebLogic启动时出现的类转换异常,涉及Struts的ActionForward类。根据引用[1],用户提到了配置Struts的PrepareFilter和ExecuteFilter时出现的ClassNotFound错误,但当前问题不是找不到类,而是类转换异常,可能涉及不同类加载器加载了同一个类的问题。 接下来,引用[3]提到Struts的架构,说明Struts使用MVC模式,并包含Controller Servlet、Action对象等。这可能涉及到Struts的类在应用中的加载情况。 引用[4]中的ClassCastException属于运行时异常,通常发生在试图将对象强制转换为不是其实例的子类时。可能的原因包括不同类加载器加载了同一个类,导致JVM认为它们是不同的类实例。 结合WebLogic的特性,WebLogic使用自己的类加载器,并且默认情况下优先加载应用内的类,这可能导致不同模块(如应用和服务器)加载同一个类,从而引发类转换异常。例如,应用可能打包了Struts的库,而服务器也可能有相同库,导致两个不同的类加载器加载了同一个类,进而转换失败。 解决方案可能包括检查类路径冲突,确保Struts相关库的版本一致性,调整类加载策略,比如优先加载应用类或设置类加载顺序。另外,检查web.xmlweblogic.xml的配置,确保没有重复加载或错误配置。 还需要考虑用户提到的PrepareFilter和ExecuteFilter配置是否正确,是否有遗漏的依赖,如Catalina的类,但根据错误信息,用户的问题可能更多是类加载冲突而非缺失类。 最后,可能需要建议用户检查依赖冲突,使用工具如mvn dependency:tree分析依赖,排除重复的struts库,或者调整类加载策略为parent-last,让应用优先加载自己的类。</think>### WebLogicjava.lang.ClassCastException: ActionForward异常分析与解决方案 #### 问题原因分析 1. **类加载器冲突** WebLogic的类加载机制默认采用`parent-first`策略,即优先从父级类加载器(如服务器自身库)加载类。如果应用内包含与服务器库**相同类但版本不同**(例如不同版本的`struts-core.jar`),可能导致同一个类被不同类加载器加载,JVM会将其视为“不同类”,从而触发`ClassCastException`[^1][^3]。 2. **依赖库版本不一致** - 应用引用的Struts库版本与WebLogic内置库冲突。 - 依赖传递导致多个版本的Struts相关类混用(如`action`模块与`core`模块版本不兼容)。 3. **配置问题** - `web.xml`或`weblogic.xml`中类加载策略未正确配置。 - Struts过滤器链(如`StrutsPrepareFilter`)配置错误,引发类加载顺序异常[^1]。 --- #### 具体解决步骤 1. **检查依赖冲突** - 通过Maven/Gradle命令(如`mvn dependency:tree`)分析依赖树,确认是否存在多版本Struts库。 - 手动排除冲突依赖: ```xml <!-- Maven示例:排除冲突的struts-core --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.30</version> <exclusions> <exclusion> <groupId>org.apache.struts</groupId> <artifactId>struts-core</artifactId> </exclusion> </exclusions> </dependency> ``` 2. **调整WebLogic类加载策略** 在`WEB-INF/weblogic.xml`中设置为`parent-last`模式,使应用优先使用自身库: ```xml <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> ``` 3. **统一Struts库版本** - 确保所有Struts模块(如`struts-core`、`struts-taglib`)版本一致。 - 示例使用兼容性较好的版本: ```xml <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.30</version> </dependency> ``` 4. **清理WebLogic缓存** 重启前删除临时文件: ```bash rm -rf $DOMAIN_HOME/servers/${SERVER_NAME}/tmp/* rm -rf $DOMAIN_HOME/servers/${SERVER_NAME}/cache/* ``` --- #### 验证方案 1. 部署修复后的应用,观察启动日志是否仍有`ClassCastException`。 2. 使用JVM参数`-verbose:class`输出类加载信息,确认`ActionForward`类来源: ```bash # 在WebLogic启动脚本中添加 JAVA_OPTIONS="-verbose:class" ``` --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值