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
相关产品推荐
相关产品推荐

