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

WebLogic迁移至JBoss遇JaxB问题:未知枚举常量AccessType.FIELD

解决JAXB 2.2升级后Spring报unknown enum constant AccessType.FIELD的问题

我之前在把Java应用从WebLogic迁移到JBoss、同步升级JAXB和Spring的时候,碰到过一模一样的警告,给你几个经过验证的解决方案:

问题根源

简单来说,JAXB 2.0里的AccessType枚举在JAXB 2.2里被重命名为XmlAccessType了,而Spring 4.3.x在处理JAXB注解时,要么是类路径里混进了旧版本的JAXB依赖,要么是实体类里的注解还在引用过时的枚举名,导致找不到正确的枚举常量。

解决方案

1. 统一JAXB依赖,排除冲突的旧Jar

先检查你的项目依赖配置(Maven/Gradle都行),确保所有JAXB相关依赖都是2.2.x版本,同时排除掉WebLogic或JBoss自带的旧版本JAXB模块:

  • 以Maven的pom.xml为例,锁定JAXB版本:
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.2.11</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.11</version>
    <scope>runtime</scope>
</dependency>
  • 排查其他依赖间接引入的低版本JAXB,用<exclusions>标签把它们排除掉。

2. 修正实体类中的注解引用

检查所有使用@XmlAccessorType的实体类,把旧的枚举引用替换成JAXB 2.2的正确枚举:

  • 把之前的代码:
import javax.xml.bind.annotation.AccessType;
import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(AccessType.FIELD)
  • 改成:
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(XmlAccessType.FIELD)

如果之前用了全限定名,也要同步改成javax.xml.bind.annotation.XmlAccessType.FIELD,避免类加载时出现混淆。

3. 调整JBoss部署配置,排除自带JAXB模块

JBoss本身自带了JAXB系统模块,很可能和你应用打包的JAXB 2.2 Jar冲突。可以在项目根目录创建jboss-deployment-structure.xml文件,强制JBoss使用应用自带的JAXB版本:

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="javax.xml.bind.api"/>
            <module name="com.sun.xml.bind"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

4. 显式配置Spring的Jaxb2Marshaller

如果你的Spring配置里用到了Jaxb2Marshaller,可以显式指定要绑定的类或上下文路径,避免Spring自动扫描时出现类加载问题:

@Bean
public Jaxb2Marshaller jaxb2Marshaller() {
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    // 显式指定要绑定的实体类
    marshaller.setClassesToBeBound(UserEntity.class, OrderEntity.class);
    // 或者指定JAXB上下文路径
    // marshaller.setContextPath("com.yourcompany.jaxb.models");
    return marshaller;
}

验证

做完以上调整后,重新编译部署应用,应该就不会再出现unknown enum constant AccessType.FIELD的警告了。如果还有问题,可以检查类路径下的JAR包,确保没有jaxb-api-2.0.jar这类旧版本文件存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:48:09