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

WSO2 EI 6.5.0接收JAR文件变为JSON格式问题求助

解决WSO2 EI 6.5.0上传JAR文件变为JSON格式的问题

问题分析

从你的描述和代码来看,核心问题是WSO2 EI 6.5.0将上传的二进制JAR文件自动转换为了包含base64编码内容的JSON结构,而相同代码在6.1.1版本中可以正常接收二进制文件。这大概率是EI 6.5.0在Multipart请求处理逻辑上的默认行为变更导致的——当客户端请求指定Accept: application/json时,服务端会自动把二进制内容封装成{"binary": "base64字符串"}的JSON格式返回并存储。

解决方案

针对这个问题,你可以通过以下几个方向调整代码或配置来修复:

1. 修改请求的Accept头

你的代码中明确指定了.accept(MediaType.APPLICATION_JSON),这会告诉EI服务端你期望JSON格式的响应,触发了二进制转JSON的逻辑。你可以:

  • 直接移除这个accept配置,让服务端根据请求内容自动处理:
Response response = client.target(url).request()
        .header("filename", fileToSend.getName())
        .post(fileToSend != null? Entity.entity(multiPart, MediaType.MULTIPART_FORM_DATA) : null, Response.class);
  • 或者将Accept头改为匹配二进制文件的类型,比如application/octet-stream:
Response response = client.target(url).request()
        .accept(MediaType.APPLICATION_OCTET_STREAM)
        .header("filename", fileToSend.getName())
        .post(fileToSend != null? Entity.entity(multiPart, MediaType.MULTIPART_FORM_DATA) : null, Response.class);

2. 显式指定文件的MediaType

在创建FileDataBodyPart时,明确设置文件的媒体类型为二进制类型,避免服务端误判:

FileDataBodyPart fileDataBodyPart = fileToSend != null? 
        new FileDataBodyPart("file", fileToSend, MediaType.APPLICATION_OCTET_STREAM_TYPE) : 
        new FileDataBodyPart();

如果是JAR文件,也可以用MediaType.valueOf("application/java-archive")来更精准地指定类型。

3. 检查EI 6.5.0的相关配置

如果上述代码调整无效,可以检查EI的axis2.xml或tomcat/web.xml中是否新增了自动二进制转JSON的消息转换器/格式化器配置,比如是否启用了JSONProvider的自动转换功能,尝试临时禁用相关配置来验证。

验证步骤

修改代码后重新上传JAR文件,检查EI文件存储路径下的文件:

  • 直接尝试用解压工具打开文件,看是否能正常识别为JAR包
  • 查看文件内容,确认不再是JSON格式的字符串

内容的提问来源于stack exchange,提问作者Vijay L Marcelin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:37:33