CPI:Groovy空指针异常[JsonSlurper]

2020-09-01 16:46发布

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

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


我具有以下常规脚本来从JSON读取下一页值,但是,当未找到'nextPage'时,会遇到nullpointer运行时异常:

尝试添加catch块,但问题仍然存在。 有任何帮助请解决吗?

常规脚本

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.json.JsonSlurper;
 def消息processData(消息消息){
    //身体
     尝试{
         def主体= message.getBody();
         def map = message.getProperties();
     
         def parsedJson =新的JsonSlurper()。parseText(body)
         def val = parsedJson?.nextPage [0];
     
         message.setProperty(" nextPage",val); 返回消息;
     } catch(NullPointerException e){
         message.setProperty(" nextPage",""); 返回消息;
     }}
 

JSON输入:

 [
   {
     "数据":{
       " isDataTrue":是的,
       "总计":[
         {
           "值":[
             " 30889.63",
             " 305.8379207920792"
           ]
         }
       ],
       " rowCount":39,
       "最小值":[
         {
           "值":[
             " 1",
             " 0.0"
           ]
         }
       ],
       "行":[
         {
           "尺寸":[
             "访客",
            
             "有机",
             " www.compass.com/en/my-account/addresses"
           ],
           "指标":[
             {
               "值":[
                 " 1",
                 " 1",
                 " 1",
                 " 0.0",
                 " 0.0"
               ]
             }
           ]
         },
          {
           "尺寸":[
             "访客",
            
             "非有机",
             " www.compass.com/en/my-account/addresses"
           ],
           "指标":[
             {
               "值":[
                 " 1",
                 " 0",
                 " 1",
                 " 3.0",
                 " 0.0"
               ]
             }
           ]
         },
   
       ],
       "最大值":[
         {
           "值":[
             " 5082",
             " 5080",
           ]
         }
       ]
     },
     " columnHeader":{
       " metricHeader":{
         " metricHeaderEntries":[
           {
             " name":" ga:sessions",
             " type":" INTEGER"
           },
           {
             " name":" ga:users",
             " type":" INTEGER"
           },
           {
             " name":" ga:pageviews",
             " type":" INTEGER"
           },
           {
             " name":" ga:entrances",
             " type":" INTEGER"
           },
           {
             " name":" ga:bounceRate",
             " type":" PERCENT"
           },
        
         ]
       },
       "尺寸":[
         " ga:userType",
         " ga:cat",
         " ga:分组"
       ]
     },
     " nextPage":" 32000"
   }
 ]
 

当在JSON中找到" nextPage"时,脚本将起作用,否则将记录运行时异常。

capture.jpg (40.9 kB)

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

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


我具有以下常规脚本来从JSON读取下一页值,但是,当未找到'nextPage'时,会遇到nullpointer运行时异常:

尝试添加catch块,但问题仍然存在。 有任何帮助请解决吗?

常规脚本

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.json.JsonSlurper;
 def消息processData(消息消息){
    //身体
     尝试{
         def主体= message.getBody();
         def map = message.getProperties();
     
         def parsedJson =新的JsonSlurper()。parseText(body)
         def val = parsedJson?.nextPage [0];
     
         message.setProperty(" nextPage",val); 返回消息;
     } catch(NullPointerException e){
         message.setProperty(" nextPage",""); 返回消息;
     }}
 

JSON输入:

 [
   {
     "数据":{
       " isDataTrue":是的,
       "总计":[
         {
           "值":[
             " 30889.63",
             " 305.8379207920792"
           ]
         }
       ],
       " rowCount":39,
       "最小值":[
         {
           "值":[
             " 1",
             " 0.0"
           ]
         }
       ],
       "行":[
         {
           "尺寸":[
             "访客",
            
             "有机",
             " www.compass.com/en/my-account/addresses"
           ],
           "指标":[
             {
               "值":[
                 " 1",
                 " 1",
                 " 1",
                 " 0.0",
                 " 0.0"
               ]
             }
           ]
         },
          {
           "尺寸":[
             "访客",
            
             "非有机",
             " www.compass.com/en/my-account/addresses"
           ],
           "指标":[
             {
               "值":[
                 " 1",
                 " 0",
                 " 1",
                 " 3.0",
                 " 0.0"
               ]
             }
           ]
         },
   
       ],
       "最大值":[
         {
           "值":[
             " 5082",
             " 5080",
           ]
         }
       ]
     },
     " columnHeader":{
       " metricHeader":{
         " metricHeaderEntries":[
           {
             " name":" ga:sessions",
             " type":" INTEGER"
           },
           {
             " name":" ga:users",
             " type":" INTEGER"
           },
           {
             " name":" ga:pageviews",
             " type":" INTEGER"
           },
           {
             " name":" ga:entrances",
             " type":" INTEGER"
           },
           {
             " name":" ga:bounceRate",
             " type":" PERCENT"
           },
        
         ]
       },
       "尺寸":[
         " ga:userType",
         " ga:cat",
         " ga:分组"
       ]
     },
     " nextPage":" 32000"
   }
 ]
 

当在JSON中找到" nextPage"时,脚本将起作用,否则将记录运行时异常。

capture.jpg (40.9 kB)
付费偷看设置
发送
5条回答
Tong__Ming
1楼 · 2020-09-01 17:21.采纳回答

Hello Papps

下面的代码应该可以使用。

导入com.sap.gateway.ip.core.customdev.util.Message;
 导入java.util.HashMap;
 导入groovy.json.JsonSlurper;
 def消息processData(消息消息){
    //身体
         def主体= message.getBody();
         def map = message.getProperties();
 def body_modified = body.substring(1,body.length()-1);
         def list = new JsonSlurper()。parseText(body_modified);
      
         def val1 ="";

 if(list.PageToken == null || list.PageToken ==""){
           message.setProperty(" nextPage","");
         }
 其他{
 val1 = list.PageToken;
            message.setProperty(" nextPage",val1);
 }
 返回消息;
 }
 

关于此,

Sriprasad Shivaram Bhat

闻人可可
2楼-- · 2020-09-01 17:01

thkx morten提供了非常有用的提示

黑丝骑士
3楼-- · 2020-09-01 17:11

Hi

还有一件事情,仅与JSON问题部分相关:请不要使用异常来控制程序的流程。 例外是例外情况。 在您的特定情况下,可以通过在访问nextPage的值之前检查nextPage是否存在来完全避免该异常。

问候,

Morten

葫芦娃快救爷爷
4楼-- · 2020-09-01 17:04

Hello Paaps,

有很多可用的编辑器,例如intelliJ,eclipse(请浏览我们的SAP社区,也有很好的博客)。

我个人而言,我使用groovy sdk控制台 测试小代码,然后在SAP CPI中使用相同的代码。 以下是下载链接。

http://groovy-lang.org/download.html

问候,

Sriprasad Shivaram Bhat

愤怒的猪头君
5楼-- · 2020-09-01 17:16

thkx sriprasad。 做得好。 请问您可以建议如何提高groovy技能和使用什么编辑器进行测试?

一周热门 更多>