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

迁移Camel 3.20.2与Adoptium JDK17后mimeMultipart反序列化报错

解决方法

1. 统一依赖版本并排除冲突包

该问题源于javax.activation与jakarta.activation的依赖冲突,以及JDK 17模块系统的访问限制。需确保项目中只保留兼容的Jakarta Activation实现:

  • 在Maven中添加指定版本的依赖,并排除所有旧版javax.activation:
    <dependency>
        <groupId>com.sun.activation</groupId>
        <artifactId>jakarta.activation</artifactId>
        <version>2.0.2</version>
    </dependency>
    
    <!-- 排除Camel MIME组件中的旧依赖 -->
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-mime-multipart-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>javax.activation</groupId>
                <artifactId>activation</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

2. 添加JVM模块访问参数

由于JDK 17的模块封装机制,需要为相关模块添加开放权限,在应用启动参数中加入:

--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
--add-opens=jakarta.activation/javax.activation=ALL-UNNAMED
--add-opens=jakarta.activation/com.sun.activation.registries=ALL-UNNAMED

3. 显式配置MIME数据格式

若依赖调整仍无效,可手动创建MimeMultipartDataFormat实例并配置CommandMap,避免类加载器问题:

import javax.activation.MailcapCommandMap;
import org.apache.camel.dataformat.mime.multipart.MimeMultipartDataFormat;

// 在路由配置中使用
MimeMultipartDataFormat mimeFormat = new MimeMultipartDataFormat();
mimeFormat.setCommandMap(new MailcapCommandMap());

from("servlet:/blobstore/upload?httpMethodRestrict=POST")
    .unmarshal(mimeFormat)
    // 后续业务逻辑处理

4. 清理容器类加载器

如果部署在Tomcat等容器中,检查WEB-INF/lib目录,删除所有旧版activation.jar或冲突的jakarta.activation-api包,只保留jakarta.activation-2.0.2.jar。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:07:19