pentaho/pentaho-kettle · error · KettleException
PGPDecryptStream.Error.PassphraseMissing
Error message
PGPDecryptStream.Error.PassphraseMissing
What it means
Message key PGPDecryptStream.Error.PassphraseMissing thrown in processRow: the value read from the passphrase field is null/empty at runtime (Utils.isEmpty on data.passPhrase), so decryption cannot proceed for the current row.
Solutions
- Ensure the passphrase field carries a non-empty value in every row
- Filter out or route rows with missing passphrases before this step
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at engine/src/main/java/org/pentaho/di/trans/steps/pgpdecryptstream/PGPDecryptStream.java:97 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/5748f3d3c71a7044.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/pgpdecryptstream/PGPDecryptStream.java:97
if ( meta.isPassphraseFromField() ) {
// Passphrase from field
String fieldname = meta.getPassphraseFieldName();
if ( Utils.isEmpty( fieldname ) ) {
throw new KettleException( BaseMessages.getString(
PKG, "PGPDecryptStream.Error.PassphraseFieldMissing" ) );
}
data.indexOfPassphraseField = data.previousRowMeta.indexOfValue( fieldname );
if ( data.indexOfPassphraseField < 0 ) {
// The field is unreachable !
throw new KettleException( BaseMessages.getString(
PKG, "PGPDecryptStream.Exception.CouldnotFindField", fieldname ) );
}
} else {
// Check is passphrase is provided
data.passPhrase =
Encr.decryptPasswordOptionallyEncrypted( environmentSubstitute( meta.getPassphrase() ) );
if ( Utils.isEmpty( data.passPhrase ) ) {
throw new KettleException( BaseMessages.getString( PKG, "PGPDecryptStream.Error.PassphraseMissing" ) );
}
}
// cache the position of the field
if ( data.indexOfField < 0 ) {
data.indexOfField = data.previousRowMeta.indexOfValue( meta.getStreamField() );
if ( data.indexOfField < 0 ) {
// The field is unreachable !
throw new KettleException( BaseMessages.getString(
PKG, "PGPDecryptStream.Exception.CouldnotFindField", meta.getStreamField() ) );
}
}
} // End If first
// allocate output row
Object[] outputRow = RowDataUtil.allocateRowData( data.outputRowMeta.size() );
for ( int i = 0; i < data.NrPrevFields; i++ ) {
outputRow[i] = r[i];View on GitHub (pinned to f3058517a1)