欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI

页面树结构

欢迎使用普元文档库

Skip to end of metadata
Go to start of metadata

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" );
]]></ac:plain-text-body></ac:structured-macro>
SAXReader saxReader = new SAXReader();
Document document = saxReader.read( new ByteArrayInputStream(body.getBytes("UTF-8" )));


建议产品文档进行更新。

  • 无标签