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

向空数组添加UUID时触发“参数数量错误”异常,求排查

问题

我有两个数组:parsedResultBD包含带name与uuid字段的账户列表,filteredStudyName为指定研究名称列表。需求是将parsedResultBD中name匹配filteredStudyName的uuid添加至空数组resultStudyUUIDCollector,代码能正常打印uuid,但添加时抛出java.lang.IllegalArgumentException: wrong number of arguments异常,相关代码与错误日志如下:

原代码块

def bdConverter = new JsonSlurper();
def responseBDTemp = prev.getResponseDataAsString();
def responseBD = bdConverter.parseText(responseBDTemp);
def resultStudyUUIDCollector = [];
def parsedResultBD = responseBD.accounts;
def filteredStudyName = ["Inflammation","Perf","Test_Study"]
parsedResultBD.each {
  entryVal ->
    for (tempValueOfStudy in filteredStudyName) {
      if (tempValueOfStudy == entryVal.name) {
        log.info('UUID : ' + entryVal.uuid);
        resultStudyUUIDCollector.add(entryVal.uuid as String);
        resultStudyUUIDCollector << entryVal.uuid; //tried with this also getting similar error
      }
    }
}

log.info(resultStudyUUIDCollector)

错误日志

2023-06-11 11:06:12,362 INFO o.a.j.e.J.StudyName_Processer: UUID : 17e9b276-081a-11ee-be56-0242ac120002
2023-06-11 11:06:12,363 INFO o.a.j.e.J.StudyName_Processer: UUID : 234d02b2-081a-11ee-be56-0242ac120002
2023-06-11 11:06:12,363 INFO o.a.j.e.J.StudyName_Processer: UUID : 2a2517be-081a-11ee-be56-0242ac120002
2023-06-11 11:06:12,363 ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, StudyName_Processer
javax.script.ScriptException: javax.script.ScriptException: java.lang.IllegalArgumentException: wrong number of arguments
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:158) ~[groovy-jsr223-3.0.11.jar:3.0.11]
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:231) ~[java.scripting:?]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:219) ~[ApacheJMeter_core.jar:5.5]
    at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) ~[ApacheJMeter_components.jar:5.5]
    at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:968) ~[ApacheJMeter_core.jar:5.5]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) ~[ApacheJMeter_core.jar:5.5]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.5]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.5]
    at java.lang.Thread.run(Thread.java:833) ~[?:?]
问题原因与解决方法

原因分析

异常wrong number of arguments的核心原因是:直接用[]初始化数组时,在JMeter的JSR223环境中可能被上下文污染,创建出JMeter内部的Arguments对象而非Groovy原生列表。Arguments.add()方法需要传入键值对两个参数,但你只传了一个UUID,导致参数数量不匹配抛出异常。

另外代码中同时使用add()和<<两种方式添加元素,会造成UUID重复存储,属于冗余操作。

修复后的代码

明确创建Groovy原生ArrayList,同时简化匹配逻辑提升效率:

def bdConverter = new JsonSlurper();
def responseBDTemp = prev.getResponseDataAsString();
def responseBD = bdConverter.parseText(responseBDTemp);
// 明确创建Groovy原生ArrayList,避免JMeter上下文干扰
def resultStudyUUIDCollector = new ArrayList<String>();
def parsedResultBD = responseBD.accounts;
def filteredStudyName = ["Inflammation","Perf","Test_Study"]

parsedResultBD.each { entryVal ->
    if (filteredStudyName.contains(entryVal.name)) {
        def uuidStr = entryVal.uuid as String
        log.info('UUID : ' + uuidStr);
        resultStudyUUIDCollector.add(uuidStr);
    }
}

log.info(resultStudyUUIDCollector)

额外优化点

  • 用filteredStudyName.contains(entryVal.name)替代嵌套循环,降低代码复杂度
  • 只保留一种添加元素的方式,避免重复数据
  • 提前将UUID转为String并赋值给变量,提升代码可读性

内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:59:57