对于复杂的映射需求,使用Groovy脚本是操纵消息体的最佳方法。正如您所注意到的,您可以选择从消息体中获取不同的Java类型。我做了一些研究,以找出下面是什么和可用的选项是什么(哪个班级)
让我们先得到一个错误:
错误:
这个错误列出了很多选项。但是你知道你也可以得到一个文档对象吗?
为了进行比较,SAP帮助文档只列出了getBody方法的这些类型:
String输入流byte[]
转换功能来自Apache Camel的类型转换器:https://camel.apache.org/manual/latest/type-converter.html
遗憾的是,没有详尽的列表,微博淘客,类型转换器非常动态。在Apache Camel中使用自定义类来传递数据是很常见的。
setBody(Object)
您也可以在脚本末尾使用setBody方法来减少代码:
您可以尝试使用这些类型,大淘客网,但是您应该检查结果!setBody方法甚至接受groovy.util.Node节点但它不会将其转换为XML!
脚本:
结果:
性能
如文档所述,如果您将InputStream转换为字符串,然后再次解析为XML对象,您将根据消息正文大小支付性能罚款。上述错误告诉我们的另一件事是,消息作为InputStream存储在内存中。因此,尽可能使用InputStream及其包装器是安全的。
每条消息不必要的资源使用:
更好:
结论
在开始时不要考虑一些冗长的转换代码。你可能有比你想象的更多的选择!
另一个想法:在SAP PI/PO中,输入流和输出流都由我们指尖上的引用给出。在CPI中,Groovy函数必须在进一步处理开始之前返回。因此,怎么做淘客推广,系统无法针对已写入的字节进行优化,写入OutputStream不会带来额外的价值。
我想知道CPI是否会在未来允许一些流式/反应式集成。如果我们可以从一个SFTP/HTTP请求、进程中一部分一部分地读取一个大文件(允许部分处理),实时大数据,然后同时将其写入其他地方,云翌通信,有什么可能性呢?