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

从WAS7升级到WAS9后WAR运行ClassCastException修复方案

解决WAS9升级后Axis1.0 WS Client的ClassCastException问题

这个问题的核心是WAS9自带的IBM WebServices引擎与你WAR包中Axis1.0/SAJ类的加载冲突——即便你设置了JVM参数指定SAJ实现,WAS默认的parent first类加载策略还是会优先加载IBM的SOAP相关类,导致类型转换失败。下面是具体的解决步骤:

1. 调整WAS类加载策略为Parent Last

这是最关键的一步,强制WAS优先加载WAR包内的类,而非服务器自带类:

  • 登录WAS控制台,找到你的应用程序,进入应用程序 > 企业应用程序 > [你的应用] > 类加载和更新检测
  • 将类加载器顺序设置为Classes loaded with local class loader first (parent last)
  • 如果你的应用是EAR包,还需要设置WAR类加载器策略为Single class loader for application(确保WAR内的类能被优先加载)

2. 禁用WAS自带的JAX-WS引擎

在你的WAR包的WEB-INF目录下创建或修改ibm-web-ext.xml文件,添加以下配置,强制WAS使用你WAR内的Axis实现:

<?xml version="1.0" encoding="UTF-8"?>
<web-ext
   xmlns="http://websphere.ibm.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"
   version="1.0">
   <disableIBMJAXWSEngine>true</disableIBMJAXWSEngine>
</web-ext>

3. 验证WAR包依赖完整性

确保你的WAR包的WEB-INF/lib目录包含完整的Axis1.0依赖JAR,包括:

  • axis.jar
  • saaj.jar
  • commons-discovery.jar
  • commons-logging.jar
    同时清理掉WAR包中可能存在的与WAS冲突的IBM相关JAR(比如com.ibm.ws.webservices*.jar这类,不要打包进WAR)

4. 验证JVM参数的正确应用

你设置的SAJ相关JVM参数需要确保在WAS中生效:

  • 在WAS控制台进入服务器 > 服务器类型 > WebSphere应用服务器 > [你的服务器] > Java和进程管理 > 进程定义 > Java虚拟机 > 自定义属性
  • 添加你之前的那几个参数,确保它们被服务器正确加载,而不是通过外部启动脚本添加(避免参数被WAS覆盖)

5. 长期解决方案:升级Axis版本

Axis1.0是非常老旧的版本(2004年左右),与WAS9的Java 8环境兼容性有限。建议你升级到Axis 1.4(稳定版,兼容Java8),重新生成WS Client代码,这样能从根源减少兼容性问题。

补充验证

修改配置后,重启WAS服务器,测试调用。如果还是出现错误,可以启用WAS的类加载跟踪日志,确认你的SAJ类(com.sun.xml.internal.messaging.saaj.*)是否被优先加载,而不是IBM的com.ibm.ws.webservices.*类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:14:31