如何在PI映射中读取JSON有效负载#PI REST适配器#

2020-08-21 09:42发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我在这种情况下: ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我在这种情况下:

PI正在REST发送方CC中接收HTTP请求。

我需要将源文件放在正确的目标字段中,同时将整个json有效负载字符串放入目标字段" json_string"中。

我尝试了很多方法,但是都失败了,有人能给我一个线索吗?

(13.8 kB)
14条回答
当学会了学习
2020-08-21 10:22

您好,小东!

这是一个示例Java映射类,可从输入JSON有效负载中生成XML输出:

< pre> import java.io.ByteArrayOutputStream; 导入java.io.IOException; 导入java.io.InputStream; 导入java.io.OutputStream; 导入org.json.JSONObject; 导入org.json.XML; 导入com.sap.aii.mapping.api.AbstractTransformation; 导入com.sap.aii.mapping.api.StreamTransformationException; 导入com.sap.aii.mapping.api.TransformationInput; 导入com.sap.aii.mapping.api.TransformationOutput; 公共类GenericJSONToXMLConverter扩展AbstractTransformation { 受保护的字符串messageTypeName; 受保护的String messageTypeNamespace; 公共无效的transform(TransformationInput输入,TransformationOutput输出)抛出StreamTransformationException { 尝试{ messageTypeName = in.getInputParameters()。getString(" MessageType")。trim(); } catch(例外e){ 抛出新的StreamTransformationException("找不到参数'MessageType':" + e.getMessage()); } 尝试{ messageTypeNamespace = in.getInputParameters()。getString(" MessageTypeNS")。trim(); } catch(例外e){ 抛出新的StreamTransformationException("找不到参数'MessageTypeNS':" + e.getMessage()); } executeMapping(in.getInputPayload()。getInputStream(),out.getOutputPayload()。getOutputStream()); } public void executeMapping(InputStream is,OutputStream os)引发StreamTransformationException { 尝试{ 如果(messageTypeName.isEmpty()) 抛出新的StreamTransformationException(" MessageType'的参数值不能为空"); 如果(messageTypeNamespace.isEmpty()) 抛出新的StreamTransformationException(" MessageTypeNS'的参数值不能为空"); 字符串有效负载字符串=新的字符串(getByteArrayFromInputStream(is)," UTF-8"); JSONObject json =新的JSONObject(payloadString); 字符串msgHeader =" "; 字符串msgFooter =" "; 字符串有效负载XML = msgHeader + XML.toString(json)+ msgFooter; os.write(payloadXML.getBytes(" UTF-8")); } catch(例外e){ 抛出新的StreamTransformationException(e.getMessage()); } } 私有字节[] getByteArrayFromInputStream(InputStream is)引发IOException { ByteArrayOutputStream缓冲区= new ByteArrayOutputStream(); int nRead; 字节[]数据=新字节[16384]; 而((nRead = is.read(data,0,data.length))!= -1) buffer.write(data,0,nRead); buffer.flush(); is.close(); 返回buffer.toByteArray(); }}

Evgeniy。

一周热门 更多>