REST Adapter实现SAP PI中的增强XML-JSON格式转换
来源:互联网 发布:matlab矩阵公式 编辑:程序博客网 时间:2024/06/16 21:23
SAP标准的REST adapter有着XML/JSON转换的功能,它很有用,因为一方面SAP PI/PO内部以XML格式处理数据,而另一方面,在处理REST架构风格的时候,JSON才是事实上的格式。
然而,观察下网上有关REST Adapter的相关问题,可以得出一个结论:XML消息处理后生成的JSON输出并非总是正确的,有时候它会把人引入歧途。SAP积极地增强了REST Adapter的各方面功能——定制化和特性丰富的JSON处理就是其中一个重点领域。许多这样的特性已经在记录在SAP Help的文档中。但是其中的一项相当强大、灵活的功能——名为“增强XML/JSON转换”的功能,却只是简单地在SAP Note 2175218中提及。在本文中,我将阐述这个功能的用法,以及提供有效参数化方法的细节。
在内部,REST adapter使用了第三方的Jettison以实现JSON处理。在标准配置中,REST adapter依赖于Jettison处理器默认的转换逻辑,它不会考虑或关联相应的消息类型中定义的有效元素属性,而是有自己的优化和类型机制,该机制基于所要处理的XML文档的元素的值的本来性质,而非消息的XSD schema。这样一来的结果是,有时转换会导致不合需求的输出。以下是两个通常的例子:
- 如果一个XML元素定义为数组,但是在被转换的XML有效数据中只包含一行,Jettison处理器将可能会将其转换为非数组类型。
- 如果一个XML元素定义为字符串,但是在被转换的XML有效数据中只有数字型的值,Jettison处理器将可能会将其转换为整数类型。
在某些情况下,不合适的类型转换对程序而言是不可接受的——这也是增强XML/JSON转换可以帮助我们解决的问题。
SAP Note 2175218介绍了增强XML/JSON转换背后的一个想法,它是有关JSON处理器如何对待特别的XML元素的明确的描述。让我们基于一个练习例子来测验这个功能:
下面是一个消息类型的定义,它用于同步场景的返回消息,我们在其中使用了REST sender channel。如你所见,它包含了多种类型的元素,包含一个数组:
XML格式的示例回复消息是这样的:
使用REST sender channel的标准配置,将上面的XML消息格式化后的JSON相应消息是这样的:
可以注意到,某些元素类型被错误的解释了,比如:
- 元素“ID”没有被视为字符串,而是数字——Jettison处理器将它作为数字对待,因为元素的值只包含数字类型的字符;
- 元素“Properties”没有被视为数组,Jettison处理器将它作为嵌套结构中的非数组对象,因为这恶搞元素只包含“Property”的一个子实体(没有其它兄弟元素)。
让我们通过增强XML/JSON转换来修复它。在REST sender channel中,增强XML/JSON转换的参数化信息存储在表 “Custom XML/JSON Conversion Rules”中。下面是针对之前高亮的有问题的类型和转换不匹配的配置。
在再次执行接口后,检查被格式化为JSON的响应消息,可以观察到,现在产生了正确的JSON输出:
我在官方材料中没有看到有关于参数化的细节,所以让我来总结下增强XML/JSON转换中可以使用的可接受的和有效值,以及有关它们的使用的解释性说明。内容在下表:
字段
描述
有效值
XML 命名空间
XML元素的命名空间
前缀
XML元素命名空间前缀
名称
XML元素名
类型
XML元素类型。
以下类型是当前支持的:
String, Integer, Decimal, Boolean.
只要它是有效值列表中提到的值之一,就不会区分类型值的符号。
如果没有指定值,不会应用指定的XML/JSON转换指令,而是会执行默认的Jettison处理器逻辑。
String type
string
xs:string
xsd:string
Integer type
int
integer
xs:integer
xsd:integer
Decimal type
decimal
numeric
float
xs:decimal
xsd:decimal
Boolean type
bool
boolean
xs:boolean
xsd:boolean
数组类型
XML元素是否是数组的指示符。
只要它是有效值列表中提到的值之一,就不会区分类型值的符号。
如果没有指定值,数组指示符默认为false。
如果是数组:
1
true
yes
如果不是数组:
0
false
no
默认值
在XML/JSON转换失败的情况下会赋给JSON元素的值。
例如,在上面给的demo中,元素“Quantity”的值会被作为整数处理。如果原始值不能转换为整数(比如含有字母),JSON输出会得到一个默认值。在该情况下,这个值是“0”。
需要注意的是,对于默认值而言,系统不会针对在“TYPE”中指定的类型进行元素类型检查——它会被当作字符串。在这种方式下,比如,你可以指定默认值“Invalid value”给“Quantity”。系统不会提示错误,无论是在communication channel激活的时候还是REST adapter运行期间处理相关消息的时候,即便默认值和元素类型(整型)完全不匹配。记住这点,应当注意设置默认值时要保持其类型的一致性。
Any value.
下面的值有点特别:
“null”
(带引号) – 被解释为字符串“null”
null
(无引号) – 被解释为null
“”
(只有引号 – 被解释为空字符串
本文链接:http://www.cnblogs.com/hhelibeb/p/7395567.html
英文原文:REST Adapter in PI/PO: Enhanced XML/JSON Conversion
参考阅读:PI REST Adapter – JSON to XML conversion,
- REST Adapter实现SAP PI中的增强XML-JSON格式转换
- worklight中的adapter(json&xml)
- xml和JSON格式相互转换的Java实现
- xml和JSON格式相互转换的Java实现
- XML转换为json格式
- XML格式转换成JSON
- JSON和XML格式转换
- json格式数据转换为xml格式
- JSON格式转换成XML格式
- cxf-rest 配置JSonProvider 来定制JSON的转换格式
- SAP 中的增强
- SAP中的几个增强
- SAP 中的增强
- JSON和XML格式互相转换
- JSON和XML格式互相转换
- JSON和XML格式互相转换
- Json格式对象转换为XML
- 将String格式XML转换成JSON
- Linux 常用命令
- Android初级开发(六)——1、SharedPreferences数据存储
- oracle 学习笔记
- 自己编写接口用于获取Hadoop Job conf 信息
- for … of和for … in的区别
- REST Adapter实现SAP PI中的增强XML-JSON格式转换
- 容斥原理入门
- Linux--shell脚本之正则表达式
- Linux上安装jdk和tomcat(二)
- sass的安装
- 排列组合(四)
- gitlab多人协同工作
- iOS之extern关键字
- vetor