pentaho/pentaho-kettle · error · KettleException

GetXMLData.Log.RequiredFilesMissing (localized message with…

Error message

GetXMLData.Log.RequiredFilesMissing (localized message with file list)

What it means

At the start of processing, GetXMLData's handleMissingFiles checks the resolved file list for non-existent files. If any required input files are missing, it logs them and throws a KettleException with the localized RequiredFilesMissing message including the list of missing files, aborting the step. This is a fail-fast guard rather than silently skipping.

Solutions

  1. Fix the file names/directories listed in the error message in the step's File tab
  2. Verify the files exist from the machine/agent actually running the transformation (paths are relative to it)
  3. Use environment variables (${Internal.Transformation.Filename.Directory}, ${ENV_VAR}) instead of hard-coded absolute paths
  4. If files may legitimately be absent, enable 'Ignore missing file' / add existence checks in a preceding job entry

Example fix

// before
File: /data/input/sales.xml
// after
File: ${Internal.Transformation.Filename.Directory}/input/sales.xml
Defensive patterns

Strategy: validation

Validate before calling

File f = new File(resolvedPath);
if (!f.isFile()) failFast("Input XML missing before running transformation: " + resolvedPath);

Try / catch

try { runTransformation(); }
catch (KettleException ke) {
  if (ke.getMessage() != null && ke.getMessage().contains("required files")) {
    logError("Missing input files — check paths and upstream job delivery");
  }
}

Prevention

When it happens

Trigger: processRow → handleMissingFiles finds data.files.getNonExistantFiles() non-empty — i.e. one or more files matching the step's file/wildcard specification do not exist on the filesystem/VFS.

Common situations: Filename typos or wrong directory; files not yet delivered by an upstream job; wildcard matching zero real files plus a fixed missing file; permissions causing existence checks to fail; changing environment (dev vs prod paths).

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


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

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/getxmldata/GetXMLData.java:313

  }

  /**
   * Build an empty row based on the meta-data.
   * 
   * @return empty row built
   */
  private Object[] buildEmptyRow() {
    return RowDataUtil.allocateRowData( data.outputRowMeta.size() );
  }

  private void handleMissingFiles() throws KettleException {
    List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();
    if ( nonExistantFiles.size() != 0 ) {
      String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );
      logError( BaseMessages.getString( PKG, "GetXMLData.Log.RequiredFilesTitle" ), BaseMessages.getString( PKG,
          "GetXMLData.Log.RequiredFiles", message ) );

      throw new KettleException( BaseMessages.getString( PKG, "GetXMLData.Log.RequiredFilesMissing", message ) );
    }

    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();
    if ( nonAccessibleFiles.size() != 0 ) {
      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );
      logError( BaseMessages.getString( PKG, "GetXMLData.Log.RequiredFilesTitle" ), BaseMessages.getString( PKG,
          "GetXMLData.Log.RequiredNotAccessibleFiles", message ) );

      throw new KettleException( BaseMessages.getString( PKG, "GetXMLData.Log.RequiredNotAccessibleFilesMissing",
          message ) );
    }
  }

  private boolean ReadNextString() {

    try {
      // Grab another row ...
      data.readrow = getRow();

View on GitHub (pinned to f3058517a1)