CPI:从SOAP xml响应中解析数据并转发到内容修改器

2020-08-18 11:47发布

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

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


我有两个问题。

从SOAP请求收到的响应数据:

    <  textData>对象ID
 2019-01-09_R1JKES00000001
 2019-04-22_R1JKTS00000040
    
 

用例是从上述

的响应数据选项卡中获取文本内容

第1部分:

一种方法是从基于SOAP的XML响应中解析数据,并从响应中的特定标记中解析内容。

我尝试了多种方法,但并没有成功。 我尝试在content修饰符中创建Exchange属性,以按如下所示通过Xpath转发数据,

值指定为:/ns:dataTransferResponsePart/responseData/formattedData/textData

我尝试使用/ns:名称空间在名称空间映射中指定,但是由于该名称空间用于其他来源,因此不允许添加。

第2部分:

放弃上述方法后,我尝试使用groovy脚本来解析xml内容并按如下方式从标记中获取数据:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.util.XmlSlurper;
 导入org.slf4j.Logger;
 导入org.slf4j.LoggerFactory;
 def消息processData(消息消息){
     记录器日志= LoggerFactory.getLogger(this.getClass());
     尝试{
         def body = message.getBody(java.lang.String)as String;
         def downloadResponse = new XmlSlurper()。parseText(body);
         def download_data = downloadResponse.ns:dataTransferResponsePart.responseData.formattedData.textData.text();
         message.setData(download_data);
     } catch(异常例外){
        log.error(" processData错误",ex);
     }
     返回消息;
 }
 

任何有关解析和将数据设置为正文中的信息的帮助都非常有用。

(26.8 kB)

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

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


我有两个问题。

从SOAP请求收到的响应数据:

    <  textData>对象ID
 2019-01-09_R1JKES00000001
 2019-04-22_R1JKTS00000040
    
 

用例是从上述

的响应数据选项卡中获取文本内容

第1部分:

一种方法是从基于SOAP的XML响应中解析数据,并从响应中的特定标记中解析内容。

我尝试了多种方法,但并没有成功。 我尝试在content修饰符中创建Exchange属性,以按如下所示通过Xpath转发数据,

值指定为:/ns:dataTransferResponsePart/responseData/formattedData/textData

我尝试使用/ns:名称空间在名称空间映射中指定,但是由于该名称空间用于其他来源,因此不允许添加。

第2部分:

放弃上述方法后,我尝试使用groovy脚本来解析xml内容并按如下方式从标记中获取数据:

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.util.XmlSlurper;
 导入org.slf4j.Logger;
 导入org.slf4j.LoggerFactory;
 def消息processData(消息消息){
     记录器日志= LoggerFactory.getLogger(this.getClass());
     尝试{
         def body = message.getBody(java.lang.String)as String;
         def downloadResponse = new XmlSlurper()。parseText(body);
         def download_data = downloadResponse.ns:dataTransferResponsePart.responseData.formattedData.textData.text();
         message.setData(download_data);
     } catch(异常例外){
        log.error(" processData错误",ex);
     }
     返回消息;
 }
 

任何有关解析和将数据设置为正文中的信息的帮助都非常有用。

(26.8 kB)
付费偷看设置
发送
3条回答
打个大熊猫
1楼 · 2020-08-18 12:12.采纳回答

嗨,Smruti

非常感谢,您不需要Groovy脚本即可执行此操作。 您可以使用可靠的旧Content Modifier来解决它,这也是您的第一种方法。

您可以将XPath表达式更改为/*/responseData/formattedData/textData并完成所需的操作。

在这种情况下,您不需要名称空间映射,但是尽管如此,我还是想澄清一下。 如果有问题的URI已经映射到其他前缀,则只需使用该前缀即可。 如果将相同的前缀映射到其他URI,请将您的URI映射到其他前缀(例如ns1或其他),然后改用该前缀。 前缀无关紧要(只要您始终使用它们即可);

注意,

Morten

软件心理学工程师
2楼-- · 2020-08-18 12:08

顺便说一句,这是一个非常好的问题。 您将详细描述到目前为止的尝试以及遇到的困难。 谢谢!!

致谢,

Morten

打个大熊猫
3楼-- · 2020-08-18 12:03

感谢Morten的回复。 该解决方案效果很好。

一周热门 更多>