Apache NiFi ExecuteScript处理器JS代码成功场景误判求助
Apache NiFi ExecuteScript JavaScript 代码优化问题
注意:NiFi处理器不支持isEmpty()、Object.Entries等JavaScript内置函数/方法,必须编写基础代码
当前代码在成功场景下也会返回Failure,需求为校验变量temp的值与API响应是否匹配,包含以下5种场景:
- temp的值存在于API响应中且匹配,判定为
pass; - temp有值但API响应无对应值,判定为
fail; - temp有值但API响应为空,判定为
fail; - temp为空但API响应非空,判定为
pass(仅需校验temp); - temp与API响应均无数据,判定为
pass;
属性中的数据示例
ListData= { "Emp_Id" : 121314, "Emp_Loc_Id" : 126, "Dept_Name" : "Flowers", "Sub_Debt_Name1" : "Lily" } apiData = { "status" : "success", "data" : { "noMoreWorkFlow" : 0, "reason" : { "labels" : "", "options" : { "17" : [ "Rose", "" ], "12" : [ "Tulips", "" ], "23" : [ "MaryGold", "" ] } }, "workflow" : [ ], "orgContext" : [ ] } } Sub_Debt_Name1= Lily 此场景下,结果应为0且temp_Status = fail,因为apiData中没有匹配的数据
现有代码
var InputStreamCallback = Java.type("org.apache.nifi.processor.io.InputStreamCallback") var IOUtils = Java.type("org.apache.commons.io.IOUtils"); var OutputStreamCallback = Java.type("org.apache.nifi.processor.io.OutputStreamCallback"); var StandardCharsets = Java.type("java.nio.charset.StandardCharsets"); var Set = Java.type("java.util.HashSet"); var Map = Java.type("java.util.HashMap"); var flowFile = session.get(); if (flowFile != null) { var text = '' session.read(flowFile, new InputStreamCallback(function (inputStream) { text = IOUtils.toString(inputStream, StandardCharsets.UTF_8); })); var Data ={} var api={} var temp_Status = "" var res=0 var hasApiData=false; var Data = JSON.parse(flowFile.getAttribute('ListData')) var api= JSON.parse(flowFile.getAttribute('apiData')) var x= JSON.stringify(flowFile.getAttribute('Sub_Debt_Name1')) var temp= JSON.parse(x) for(var key in api.data.reason.options){ hasApiData= true; } var dataName = temp; if((!(hasApiData)) &&(!(dataName))){ temp_Status = "fail"; } if(hasApiData===true){ for (var key in api.data.reason.options) { if (api.data.reason.options[key][0] === dataName) { res = JSON.parse(key); temp_Status = "pass"; }else{ temp_Status = "fail"; } } flowFile = session.putAttribute(flowFile, 'temp_Status ', temp_Status ); } } flowFile = session.write(flowFile, new OutputStreamCallback(function(outputStream) { outputStream.write(JSON.stringify(res).getBytes(StandardCharsets.UTF_8)) }) ); session.transfer(flowFile, REL_SUCCESS);
当前代码即使在成功场景下,temp_Status也会显示Fail,求基于基础JavaScript的优化逻辑。
内容的提问来源于stack exchange,提问作者dracile
相关产品推荐
相关产品推荐

