{"record":{"id":"5628bcd612d39754","repo":"pentaho/pentaho-kettle","slug":"pgpencryptstream-error-keynamefieldmissing","errorCode":null,"errorMessage":"PGPEncryptStream.Error.KeyNameFieldMissing","messagePattern":"PGPEncryptStream\\.Error\\.KeyNameFieldMissing","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/pgpencryptstream/PGPEncryptStream.java","lineNumber":82,"sourceCode":"      if ( first ) {\n        first = false;\n        // get the RowMeta\n        data.previousRowMeta = getInputRowMeta().clone();\n        data.NrPrevFields = data.previousRowMeta.size();\n        data.outputRowMeta = data.previousRowMeta;\n        meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,\n          metaStore );\n\n        // Check is stream data field is provided\n        if ( Utils.isEmpty( meta.getStreamField() ) ) {\n          throw new KettleException( BaseMessages.getString( PKG, \"PGPEncryptStream.Error.DataStreamFieldMissing\" ) );\n        }\n\n        if ( meta.isKeynameInField() ) {\n          // keyname will be extracted from a field\n          String keyField = meta.getKeynameFieldName();\n          if ( Utils.isEmpty( keyField ) ) {\n            throw new KettleException( BaseMessages.getString( PKG, \"PGPEncryptStream.Error.KeyNameFieldMissing\" ) );\n          }\n          data.indexOfKeyName = data.previousRowMeta.indexOfValue( keyField );\n          if ( data.indexOfKeyName < 0 ) {\n            // The field is unreachable !\n            throw new KettleException( BaseMessages.getString(\n              PKG, \"PGPEncryptStream.Exception.CouldnotFindField\", meta.getStreamField() ) );\n          }\n        } else {\n          // Check is keyname is provided\n          data.keyName = environmentSubstitute( meta.getKeyName() );\n\n          if ( Utils.isEmpty( data.keyName ) ) {\n            throw new KettleException( BaseMessages.getString( PKG, \"PGPEncryptStream.Error.KeyNameMissing\" ) );\n          }\n        }\n\n        // cache the position of the field\n        if ( data.indexOfField < 0 ) {","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/pgpencryptstream/PGPEncryptStream.java#L64-L100","documentation":"PGPEncryptStream.processRow throws KettleException when 'keyname will be taken from a field' is enabled but the key-name field name itself is empty. Without it the step cannot locate the column holding the PGP key name per row.","triggerScenarios":"meta.isKeynameInField() is true and meta.getKeynameFieldName() returns empty, checked on the first processed row.","commonSituations":"User enabled 'keyname from field' but forgot to pick the field in the dialog; metadata built in code with setKeynameInField(true) but no keyname field set.","solutions":["In the step dialog, select the field that contains the PGP key name","If configuring in code, call meta.setKeynameFieldName(\"keyColumn\")","Or disable 'keyname from field' and supply a static key name instead"],"exampleFix":"// before\nmeta.setKeynameInField( true ); // keyname field not set\n// after\nmeta.setKeynameInField( true );\nmeta.setKeynameFieldName( \"recipient_key\" );","handlingStrategy":"validation","validationCode":"if (meta.isKeynameInField()\n    && (meta.getKeynameFieldName() == null || meta.getKeynameFieldName().trim().isEmpty())) {\n  throw new IllegalStateException(\"PGP step: keyname field must be set when keyname-in-field is enabled\");\n}","typeGuard":null,"tryCatchPattern":"try { trans.execute(null); }\ncatch (KettleException e) {\n  if (e.getMessage().contains(\"KeyNameFieldMissing\")) {\n    log.error(\"Select the key-name field in the PGP Encrypt Stream step\", e);\n  } else { throw e; }\n}","preventionTips":["When enabling 'keyname from field', immediately pick the field","Pair the boolean flag and field name setters together in code","Review step dialogs during transformation code review"],"tags":["kettle","pgp","step-config","missing-field"],"backgroundTag":"missing-required-config-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"}