You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NiFi中Groovy脚本获取FlowFile报空指针异常求助

NiFi Groovy脚本空指针异常解决方法

核心问题分析

从报错信息来看,空指针异常的直接原因是你错误地将session.read()的返回值赋值给了flowFile变量。NiFi的ProcessSession.read()方法是无返回值的(void),执行这个赋值操作后,flowFile会被覆盖为null,后续调用session.write(null, ...)自然会触发空指针异常,这也对应了ExecuteGroovyScript报错中指向ProcessSessionWrap.write的栈信息。

除此之外,还需要确认输入JSON的结构是否与脚本中的字段访问路径匹配,若输入JSON缺少预期的层级(比如values字段不存在),虽然你用了安全导航符?.避免了直接NPE,但可能导致最终生成的输出JSON全为null,也需要排查。

修正后的Groovy脚本

import groovy.json.JsonSlurper
import groovy.json.JsonOutput
import java.util.logging.Logger

Logger logger = Logger.getLogger("")
def flowFile = session.get()
if (!flowFile) return

try {
    def flowFileContent
    // 注意:不要将session.read的结果赋值给flowFile,read方法无返回值
    session.read(flowFile, { inputStream ->
        flowFileContent = new JsonSlurper().parse(inputStream)
    } as InputStreamCallback)

    // 打印日志确认解析结果,方便排查结构问题
    logger.info("解析后的FlowFile内容: ${flowFileContent}")

    def id = flowFileContent?.identifier ?: ""
    def x1Data = flowFileContent?.values?.x1?.getAt(0)?.data
    def x1CodeData = flowFileContent?.values?.x1_code?.getAt(0)?.data
    def x1NameData = flowFileContent?.values?.x1_name?.getAt(0)?.data

    def look = [
        "id": id,
        "x1": x1Data,
        "x1_code": x1CodeData,
        "x1_name": x1NameData
    ]

    def outputJson = JsonOutput.toJson(look)
    // 直接使用原flowFile对象写入内容,无需重新赋值
    session.write(flowFile, { outputStream ->
        outputStream.write(outputJson.getBytes("UTF-8"))
    } as OutputStreamCallback)

    session.transfer(flowFile, success)
} catch (Exception e) {
    logger.severe("处理FlowFile失败: ${e.getMessage()}")
    // 发生异常时将FlowFile转到失败关系,避免session回滚影响其他流程
    session.transfer(flowFile, failure)
}

额外排查步骤

  • 验证输入JSON结构:检查GenerateFlowFile生成的JSON是否包含identifier、values.x1[0].data等预期字段,例如正确的结构应该类似:
    {
        "identifier": "123",
        "values": {
            "x1": [{"data": "x1_value"}],
            "x1_code": [{"data": "code_001"}],
            "x1_name": [{"data": "name_test"}]
        }
    }
    
  • 启用日志调试:通过NiFi的日志组件查看脚本中打印的解析后的FlowFile内容,确认JSON是否被正确解析。
  • 检查处理器配置:确保ExecuteGroovyScript处理器的Script Engine选择为Groovy,并且已正确配置成功/失败关系。

内容的提问来源于stack exchange,提问作者dsp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:23:11