需求

在界面上配置协议转换,后台加载格式转换规则,进行数据转换。
数据主要包括json和xml。

解决方案

有两种解决方案,一种是用动态脚本直接处理,需要操作人员学习脚本和相关库。比如groovy + XmlSlurper + jackson(groovy自带的GroovySlurper有字符集问题,会乱码);第二种解决方案,是用一套配置语言解决。

技术 功能 易扩展 易学习 其他
groovy(脚本) 5 5 1 不可控(如死循环)
freemarker(模板引擎) 4 1 5 性能差
jolt 3 4 3 数组处理比较绕(学习成本)
jslt(非jsp中的) 4 4 4 无明显短板

JSON和XML转换

两者之间自动转换缺一点东西:
XML转JSON问题在于XML中 只有1个元素的array和record是无法区分的,因此任何一层都可能是array。
JSON转XML问题在于root node在JSON中是空的。

可以引入avro schema来解决,avro schema定义了层次结构和每层的name。

FreeMarker做转换规则

http://freemarker.foofun.cn/
JSON和XML都先转成model,然后用配置的规则生成目标文本。

JOLT做转换规则

https://github.com/bazaarvoice/jolt
只做JSON互转。前后置JSON于XML互转。

JSLT做转换规则

https://github.com/schibsted/jslt/blob/master/tutorial.md#for-expressions
只做JSON互转。前后置JSON于XML互转。