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

WAS7迁移至WAS9时CXF WebService部署遇JVMCFRE004验证错误求助

解决WAS 9 + CXF 3.1.11部署时的VerifyError问题

我之前帮团队处理过类似的WAS迁移+CXF版本升级问题,这个VerifyError本质是CXF 3.x的ASM字节码生成和WAS 9的JVM校验、自带组件冲突导致的,给你几个实操性的解决步骤:

1. 禁用WAS自带的JAX-WS组件并调整类加载顺序

WAS 9默认自带JAX-WS实现,会和你打包的CXF 3.1.11产生类冲突。你需要在WAR包的WEB-INF/ibm-web-ext.xml中添加以下配置(如果文件不存在就新建):

<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">
    <!-- 关闭WAS自带的JAX-WS支持 -->
    <enable-jaxws>false</enable-jaxws>
    <!-- 让应用优先加载自身打包的类,而非WAS父类加载器的类 -->
    <class-loader delegation="parent-last"/>
</web-ext>

2. 统一CXF依赖的ASM版本

CXF 3.1.11依赖ASM 5.x系列,如果你的项目中存在其他依赖引入了旧版ASM(比如Spring的某些老模块),会导致字节码生成异常。用Maven命令排查ASM依赖:

mvn dependency:tree -Dincludes=org.ow2.asm:asm*

然后在pom.xml中排除旧版ASM,手动指定兼容的版本:

<!-- 排除CXF自带的ASM,避免版本冲突 -->
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>3.1.11</version>
    <exclusions>
        <exclusion>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-commons</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 手动添加CXF 3.1.11兼容的ASM版本 -->
<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm</artifactId>
    <version>5.2</version>
</dependency>
<dependency>
    <groupId>org.ow2.asm</groupId>
    <artifactId>asm-commons</artifactId>
    <version>5.2</version>
</dependency>

3. 禁用CXF的ASM字节码生成

WAS 9的JVM对字节码校验更严格,CXF默认用ASM生成的jaxws_asm类可能无法通过校验。你可以在Spring配置中强制使用Java反射生成代理:

方式一:针对单个服务配置

<bean id="AccountService" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    <!-- 你的服务地址、接口等原有配置 -->
    <property name="address" value="http://your-service-url"/>
    <property name="serviceClass" value="com.ao.services.AccountService"/>
    <!-- 禁用ASM,使用JAX-WS原生代理 -->
    <property name="disableASM" value="true"/>
</bean>

方式二:全局CXF总线配置

<cxf:bus>
    <cxf:properties>
        <!-- 全局禁用ASM字节码生成 -->
        <entry key="disable.asm" value="true"/>
    </cxf:properties>
</cxf:bus>

4. 彻底清理并重新编译打包

即使你用JDK 8编译,旧的编译产物(比如target目录中残留的jaxws_asm类)可能混入了JDK 6的字节码。执行以下命令完全清理并重新打包:

mvn clean install -DskipTests

完成以上步骤后,重新部署WAR包到WAS 9,应该就能解决这个BeanCreationException和VerifyError了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:43:25