pentaho/pentaho-kettle · error · KettleException

CheckSum.Error.UnknownEvaluationMethod

Error message

CheckSum.Error.UnknownEvaluationMethod

What it means

initializeFieldConverters throws this when meta.getEvaluationMethod() is not one of the known CheckSumMeta evaluation methods (result field string / native string conversion). The switch falls through to default and wraps the unknown value in a KettleException.

Solutions

  1. Open the CheckSum step dialog and re-select the 'result field' type (string vs compatible) so the evaluation method is set to a valid constant
  2. Inspect the stored metadata value of evaluation method and map it to a CheckSumMeta.EVALUATION_METHOD_* constant
  3. Use CheckSumMeta constants (not raw literals) when building StepMeta in code
  4. Check plugin/core version consistency between the repository metadata and the running Pentaho version

Example fix

// before
meta.setEvaluationMethod("native");
// after
meta.setEvaluationMethod(CheckSumMeta.EVALUATION_METHOD_NATIVE_STRINGS);
Defensive patterns

Strategy: validation

Validate before calling

int m = meta.getEvaluationMethod();
if (m != CheckSumMeta.EVALUATION_METHOD_FIELD && m != CheckSumMeta.EVALUATION_METHOD_NATIVE_STRINGS) {
  throw new IllegalArgumentException("Unknown evaluation method: " + m);
}

Try / catch

catch (KettleException e) { if (e.getMessage().contains("UnknownEvaluationMethod")) { reset step meta to defaults; } }

Prevention

When it happens

Trigger: processRow -> initializeFieldConverters where meta.getEvaluationMethod() returns a value outside CheckSumMeta.EVALUATION_METHOD_* constants, typically from hand-edited or version-mismatched transformation XML/repository metadata.

Common situations: Editing the .ktr XML and typing an evaluation-method string manually; loading a transformation produced by a newer/older plugin version with a renamed constant; programmatic step-meta construction with a wrong int/string value.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


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

Appendix: source

Thrown at plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/checksum/CheckSum.java:213

      throw new KettleException( BaseMessages.getString( PKG, "CheckSum.Error.Digest" ), e );
    }
  }

  private void initializeFieldConverters( RowMetaInterface inputRowMeta, int[] fieldIndexMapping ) throws KettleException {
    data.fieldConverters = new FieldToBytesConverter[ fieldIndexMapping.length ];
    for ( int i = 0; i < fieldIndexMapping.length; i++ ) {
      switch ( meta.getEvaluationMethod() ) {
        case CheckSumMeta.EVALUATION_METHOD_BYTES:
          data.fieldConverters[ i ] = new BytesToBytesConverter( inputRowMeta, fieldIndexMapping[ i ] );
          break;
        case CheckSumMeta.EVALUATION_METHOD_PENTAHO_STRINGS:
          data.fieldConverters[ i ] = new PentahoStringsToBytesConverter( inputRowMeta, fieldIndexMapping[ i ] );
          break;
        case CheckSumMeta.EVALUATION_METHOD_NATIVE_STRINGS:
          data.fieldConverters[ i ] = new NativeStringsToBytesConverter( inputRowMeta, fieldIndexMapping[ i ] );
          break;
        default:
          throw new KettleException(
            BaseMessages.getString( PKG, "CheckSum.Error.UnknownEvaluationMethod", meta.getEvaluationMethod() ) );
      }
    }
  }

  private static String getStringFromBytes( byte[] bytes ) {
    StringBuilder sb = new StringBuilder();
    for ( int i = 0; i < bytes.length; i++ ) {
      byte b = bytes[i];
      sb.append( 0x00FF & b );
      if ( i + 1 < bytes.length ) {
        sb.append( "-" );
      }
    }
    return sb.toString();
  }

  public String byteToHexEncode_compatible( byte[] in ) {

View on GitHub (pinned to f3058517a1)