{"record":{"id":"16f963a9466d124b","repo":"pentaho/pentaho-kettle","slug":"rest-exception-paramfieldempty","errorCode":"Rest.Exception.ParamFieldEmpty","errorMessage":"Rest.Exception.ParamFieldEmpty","messagePattern":"Rest\\.Exception\\.ParamFieldEmpty","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/rest/core/src/main/java/org/pentaho/di/trans/steps/rest/Rest.java","lineNumber":556,"sourceCode":"  }\n\n  /**\n   * Calculate the parameters\n   *\n   * @throws KettleException\n   */\n  private void calcParameters() throws KettleException {\n    // Parameters\n    int nrParams = meta.getParameterField() == null ? 0 : meta.getParameterField().length;\n    if ( nrParams > 0 ) {\n      data.nrParams = nrParams;\n      data.paramNames = new String[ nrParams ];\n      data.indexOfParamFields = new int[ nrParams ];\n      for ( int i = 0; i < nrParams; i++ ) {\n        data.paramNames[ i ] = environmentSubstitute( meta.getParameterName()[ i ] );\n        String field = environmentSubstitute( meta.getParameterField()[ i ] );\n        if ( Utils.isEmpty( field ) ) {\n          throw new KettleException( BaseMessages.getString( PKG, \"Rest.Exception.ParamFieldEmpty\" ) );\n        }\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 ) ) {","sourceCodeStart":538,"sourceCodeEnd":574,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/rest/core/src/main/java/org/pentaho/di/trans/steps/rest/Rest.java#L538-L574","documentation":"Thrown in calcParameters (from processRow) with message 'Parameter field is missing!': one of the configured query parameters has an empty 'field' — the row field that supplies the parameter value is blank after environment substitution.","triggerScenarios":"meta.getParameterField()[i] is null/empty (Utils.isEmpty) for some parameter index i while query parameters are configured, during calcHeaders/calcParameters phase of processRow.","commonSituations":"Parameter table in the REST dialog has a row with the 'Field' column empty (only parameter name filled); a variable used as field name resolves to empty at runtime; parameters copied from another step with the value column cleared.","solutions":["Open the REST step's parameter table and fill in the missing 'Field' column for the flagged parameter row.","Delete parameter rows that are no longer needed.","Verify that any variable used in the Field column is defined so it does not resolve to an empty string.","Validate the transformation before running to catch empty parameter fields at design time."],"exampleFix":"// before (parameter row)\nname=\"apiKey\"; field=\"\"              // throws ParamFieldEmpty\n// after\nname=\"apiKey\"; field=\"api_key_value\"","handlingStrategy":"validation","validationCode":"// Check every parameter entry has a field before running\nfor (int i = 0; i < restMeta.getParameterField().length; i++) {\n  String f = restMeta.getParameterField()[i];\n  if (f == null || f.trim().isEmpty()) {\n    throw new IllegalStateException(\"Parameter '\" + restMeta.getParameterName()[i] + \"' has no field set\");\n  }\n}","typeGuard":null,"tryCatchPattern":"try { processRow(); } catch (KettleException e) {\n  if (e.getMessage().contains(\"Parameter field is missing\")) { /* fill in the parameter table */ }\n  throw e;\n}","preventionTips":["Never leave the Field column blank in the parameter table; remove unused rows.","Validate the transformation before scheduling.","Ensure variables used as field names are defined in every environment."],"tags":["configuration","query-parameters","kettle","missing-field"],"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"}