pentaho/pentaho-kettle · error · KettleStepException

SymmetricCryptoTrans.Exception.CouldnotFindField

SymmetricCryptoTrans.Exception.CouldnotFindField

Error message

SymmetricCryptoTrans.Exception.CouldnotFindField

What it means

After the message field name passes the empty check, processRow looks up its index in the incoming row via getInputRowMeta().indexOfValue(). This error means the configured message field name does not exist in the row actually arriving at the step. The field is 'unreachable' so the step aborts with KettleStepException naming the missing field.

Solutions

  1. Verify the exact field name in the step dialog's 'Message fieldname' matches an upstream field (no typos/case differences).
  2. Inspect the incoming row preview (right-click step > Preview) to see which fields actually arrive.
  3. Re-add or restore the upstream step that produces the field, or update the message field setting.
  4. Use Get Fields / field mapping in the dialog to pick the field instead of typing it.

Example fix

// before
meta.setMessageField("Payload "); // trailing space, field is 'Payload'
// after
meta.setMessageField("Payload");
Defensive patterns

Strategy: validation

Validate before calling

// Verify the field exists in the incoming row meta before executing
String msgField = meta.getMessageFied();
if (prevRowMeta.indexOfValue(msgField) < 0) {
  throw new IllegalArgumentException(
    "Message field '" + msgField + "' not found in incoming row");
}

Try / catch

try {
  trans.execute(null);
} catch (KettleStepException e) {
  if (e.getMessage().contains("CouldnotFindField")) {
    logError("Field missing upstream: " + e.getMessage());
  }
}

Prevention

When it happens

Trigger: meta.getMessageFied() is non-empty but indexOfValue() returns < 0: the upstream step doesn't emit a field with that exact name (typo, case/whitespace difference, or the producing step was removed/renamed).

Common situations: Renaming or deleting an upstream field after configuring this step; field name with trailing space; hop order changed so the field no longer reaches this step; locale/type differences after editing a Text File Input or Table Input.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/a7c91e832b6fbd68. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/symmetriccrypto/symmetriccryptotrans/SymmetricCryptoTrans.java:91

      if ( Utils.isEmpty( meta.getResultfieldname() ) ) {
        // Result field is missing !
        throw new KettleStepException( BaseMessages.getString(
          PKG, "SymmetricCryptoTrans.Exception.ErrorResultFieldMissing" ) );
      }

      // Check if The message field is given
      if ( Utils.isEmpty( meta.getMessageFied() ) ) {
        // Message Field is missing !
        throw new KettleStepException( BaseMessages.getString(
          PKG, "SymmetricCryptoTrans.Exception.MissingMessageField" ) );
      }
      // Try to get Field index
      data.indexOfMessage = getInputRowMeta().indexOfValue( meta.getMessageFied() );

      // Let's check the Field
      if ( data.indexOfMessage < 0 ) {
        // The field is unreachable !
        throw new KettleStepException( BaseMessages.getString(
          PKG, "SymmetricCryptoTrans.Exception.CouldnotFindField", meta.getMessageFied() ) );
      }

      if ( !meta.isSecretKeyInField() ) {
        String realSecretKey =
          Encr.decryptPasswordOptionallyEncrypted( environmentSubstitute( meta.getSecretKey() ) );
        if ( Utils.isEmpty( realSecretKey ) ) {
          throw new KettleStepException( BaseMessages.getString(
            PKG, "SymmetricCryptoTrans.Exception.SecretKeyMissing" ) );
        }
        // We have a static secret key
        // Set secrete key
        setSecretKey( realSecretKey );

      } else {
        // dynamic secret key
        if ( Utils.isEmpty( meta.getSecretKeyField() ) ) {
          throw new KettleStepException( BaseMessages.getString(

View on GitHub (pinned to f3058517a1)