欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI
欢迎使用普元文档库
ESB使用中介服务对数据转换中遇到的编码问题解决办法
在接入的第三方两个系统协议不兼容,无法使用穿透,因此在ESB的中介服务中对其进行协议转换和数据转换。做一个soap转restful的中介服务的编排。
开发完成,在测试的过程中,发现业务系统大部分响应正确,偶尔会出现异常。这说明ESB中间的协议转换是没问题的,已经将两业务系统连接。随后对数据进行排查,经过多轮测试,问题定位在了某些字符在传递后造成了接收方无法正确识别参数。
比如下图,在调用方"dept"传递了"总裁办公室"
在ESB中发现这个"室"没有被正确转换
接收端的业务系统也无法正确识别
如果在参数上改动为"办公室1",或者"办公室x",其他字符都可以正常识别。去掉"室"也可以正确识别。
考虑到这只是普通的字符,并不是特殊字符。因此,按经验认为这是一个字符串编码转换的问题。在对数据包拆包这里是找的ESB6.5的产品帮助文档的例子,
在对代码排查的时候发现,上图红色区域,在从inMessage中获取的数据直接进行了默认的数据转换,并没有指定"UTF-8",这就导致了从body往后的数据无论如何转都是有乱码的问题。
解决办法
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="8cd9e9d4-b816-441d-be1a-27a880a65008"><ac:plain-text-body><![CDATA[ |
String body = new String(( byte[]) inMessage.getMessagePayload(),"UTF-8" ); |
建议产品文档进行更新。