pentaho/pentaho-kettle · error · KettleException

PropertyOutputMeta.Log.FileNameEmty

Error message

PropertyOutputMeta.Log.FileNameEmty

What it means

Thrown in processRow when the step is configured with 'filename in field': the filename is read from the configured input row field, and if that field's string value is empty for the current row, the step cannot open a target file and throws this KettleException. Unlike error 1745 the filename source is the row data, not the static metadata setting.

Solutions

  1. Fix the upstream step so the filename field is populated for every row (e.g. coalesce with a default path).
  2. Check the 'filename field' selection in the step settings points at the correct column.
  3. Filter out rows with null/empty filename before the Property Output step using a Filter rows step.
  4. Catch KettleException in the transformation executor and log the offending row's field values to locate the bad data.

Example fix

// before (upstream JavaScript/UDF)
var outFile = row.filename;
// after
var outFile = (row.filename != null && row.filename.length > 0) ? row.filename : "/data/default.properties";
Defensive patterns

Strategy: validation

Validate before calling

// before feeding rows to Property Output (filter step / UDF)
if (filename == null || filename.trim().isEmpty()) {
    // route row to an error stream or substitute a default path
}

Try / catch

try {
    trans.execute(null);
    trans.waitUntilFinished();
} catch (KettleException e) {
    if (e.getMessage().contains("FileNameEmty")) {
        // inspect upstream data for null/empty filename field
    }
}

Prevention

When it happens

Trigger: meta.isFileNameInField() is true and data.inputRowMeta.getString(r, data.indexOfFieldfilename) returns null/empty for a row — i.e. the filename field is missing, null, or contains "" in the incoming row.

Common situations: Upstream step emits null or empty values in the filename column; wrong field selected in the 'filename field' dropdown; a filtered/optional row stream where some rows legitimately have no file target.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/trans/steps/propertyoutput/PropertyOutput.java:120

        data.filename = buildFilename();
        // Check if filename is empty..
        if ( Utils.isEmpty( data.filename ) ) {
          logError( BaseMessages.getString( PKG, "PropertyOutput.Log.FilenameEmpty" ) );
          throw new KettleException( BaseMessages.getString( PKG, "PropertyOutput.Log.FilenameEmpty" ) );
        }
        openNewFile();
      }
    } // end first

    // Get value field
    String propkey = data.inputRowMeta.getString( r, data.indexOfKeyField );
    String propvalue = data.inputRowMeta.getString( r, data.indexOfValueField );

    try {
      if ( meta.isFileNameInField() ) {
        data.filename = data.inputRowMeta.getString( r, data.indexOfFieldfilename );
        if ( Utils.isEmpty( data.filename ) ) {
          throw new KettleException( BaseMessages.getString( PKG, "PropertyOutputMeta.Log.FileNameEmty" ) );
        }
        if ( !checkSameFile() ) {
          // close previous file
          closeFile();
          // Open new file
          openNewFile();
        }
      }

      if ( !data.KeySet.contains( propkey ) ) {
        if ( log.isDetailed() ) {
          logDetailed( BaseMessages.getString( PKG, "PropertyOutput.Log.Key", propkey ) );
          logDetailed( BaseMessages.getString( PKG, "PropertyOutput.Log.Value", propvalue ) );
        }
        // Update property
        data.pro.setProperty( propkey, propvalue );
        putRow( data.outputRowMeta, r ); // in case we want it to go further...
        incrementLinesOutput();

View on GitHub (pinned to f3058517a1)