{"record":{"id":"a98738cc9870900f","repo":"pentaho/pentaho-kettle","slug":"rest-exception-matrixparamfieldempty","errorCode":"Rest.Exception.MatrixParamFieldEmpty","errorMessage":"Rest.Exception.MatrixParamFieldEmpty","messagePattern":"Rest\\.Exception\\.MatrixParamFieldEmpty","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/rest/core/src/main/java/org/pentaho/di/trans/steps/rest/Rest.java","lineNumber":575,"sourceCode":"        }\n        data.indexOfParamFields[ i ] = data.inputRowMeta.indexOfValue( field );\n        if ( data.indexOfParamFields[ i ] < 0 ) {\n          throw new KettleException( BaseMessages.getString( PKG, \"Rest.Exception.ErrorFindingField\", field ) );\n        }\n      }\n      data.useParams = true;\n    }\n\n    int nrMatrixParams = meta.getMatrixParameterField() == null ? 0 : meta.getMatrixParameterField().length;\n    if ( nrMatrixParams > 0 ) {\n      data.nrMatrixParams = nrMatrixParams;\n      data.matrixParamNames = new String[ nrMatrixParams ];\n      data.indexOfMatrixParamFields = new int[ nrMatrixParams ];\n      for ( int i = 0; i < nrMatrixParams; i++ ) {\n        data.matrixParamNames[ i ] = environmentSubstitute( meta.getMatrixParameterName()[ i ] );\n        String field = environmentSubstitute( meta.getMatrixParameterField()[ i ] );\n        if ( Utils.isEmpty( field ) ) {\n          throw new KettleException( BaseMessages.getString( PKG, \"Rest.Exception.MatrixParamFieldEmpty\" ) );\n        }\n        data.indexOfMatrixParamFields[ i ] = data.inputRowMeta.indexOfValue( field );\n        if ( data.indexOfMatrixParamFields[ i ] < 0 ) {\n          throw new KettleException( BaseMessages.getString( PKG, \"Rest.Exception.ErrorFindingField\", field ) );\n        }\n      }\n      data.useMatrixParams = true;\n    }\n  }\n\n  /**\n   * Calculate body\n   *\n   * @throws KettleException\n   */\n  private void calcBody() throws KettleException {\n    String field = environmentSubstitute( meta.getBodyField() );\n    if ( !Utils.isEmpty( field ) ) {","sourceCodeStart":557,"sourceCodeEnd":593,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/rest/core/src/main/java/org/pentaho/di/trans/steps/rest/Rest.java#L557-L593","documentation":"Thrown by calcParameters() when a matrix parameter entry has an empty field name configured. The REST step iterates the matrix parameter fields; if one is blank (Utils.isEmpty), it cannot build the request, so it fails fast with this message.","triggerScenarios":"A row in the Matrix parameters tab of the REST step dialog has a name but an empty field, or an environment substitution resolves to an empty string.","commonSituations":"User added a matrix parameter name but forgot to set the field; variable like ${EMPTY} resolves to empty; dialog copy-paste left field blank.","solutions":["Open the REST step dialog and fill in the Field column for every matrix parameter row","Remove unused/blank matrix parameter rows","Verify environment variables used for the field resolve to non-empty values"],"exampleFix":"// before\nmatrixParameterName = \"lang\"; matrixParameterField = \"\";\n// after\nmatrixParameterName = \"lang\"; matrixParameterField = \"language\";","handlingStrategy":"validation","validationCode":"for (int i = 0; i < matrixParameterFields.length; i++) {\n  if (matrixParameterFields[i] == null || matrixParameterFields[i].trim().isEmpty()) {\n    throw new KettleException(\"Matrix parameter field empty at index \" + i);\n  }\n}","typeGuard":null,"tryCatchPattern":"try { calcParameters(); } catch (KettleException e) {\n  logError(\"Matrix parameter config invalid: \" + e.getMessage());\n  setErrors(1);\n}","preventionTips":["Fill both Name and Field columns for every matrix parameter row","Delete unused matrix parameter rows instead of leaving them blank","Resolve environment variables before saving the step"],"tags":["kettle","rest-step","matrix-parameter","configuration"],"backgroundTag":"empty-required-field","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}