使用edcemailconv转换CSN文件到EML时报CSNParseException无法定位数据
问题根因
从报错栈可直接定位核心原因为ICU4J组件版本不兼容:你的项目中同时引入了版本为62.1的icu4j-core和版本为68.2的icu4j-charset,跨大版本的ICU4J组件无法互相读取内置的字符集映射资源,所以在解析CSN文件的LMBCS编码内容(IBM Domino的默认编码)时触发资源缺失异常,最终表现为CSN解析失败。
解决思路
1. 统一ICU4J组件版本(必做)
所有icu4j相关依赖(core、charset、locales等)必须使用完全一致的版本,有两种可选方案:
- 适配edcemailconv版本方案:edcemailconv-2.2.2是2013年发布的组件,默认适配ICU4J 4.x版本,直接将所有icu4j依赖统一降级到4.8.1.1版本,可完全规避版本兼容问题。
- 保留高版本方案:如果项目必须使用高版本ICU4J,将
icu4j-core也升级到68.2版本,保证和icu4j-charset版本号完全一致即可。
2. 异常兜底处理(可选)
调整依赖后如果仍有个别损坏的CSN文件报错,可以通过字节码改写、继承重写逻辑的方式修改CSNHandler的执行逻辑:在读取form字段的代码处增加异常捕获,当解析失败时给formType设置默认值Memo(Domino邮件的默认form值),避免单个异常文件阻断整个转换流程。
3. 校验CSN文件完整性
排除依赖问题后如果仍有报错,检查对应CSN文件是否导出完整,有没有在传输、存储过程中出现字节截断、损坏的情况,正常导出的Domino CSN文件不会出现form字段解析失败的问题。
内容的提问来源于stack exchange,提问作者Monu chandramohan
相关产品推荐
相关产品推荐

