pentaho/pentaho-kettle · error · KettleException
GetXMLData.Log.RequiredNotAccessibleFilesMissing (localized…
Error message
GetXMLData.Log.RequiredNotAccessibleFilesMissing (localized message with file list)
What it means
Thrown by handleMissingFiles in the GetXMLData step when some of the required input files could not be accessed (e.g. they do not exist, are unreadable, or permission was denied). The step collects all files marked as required during file-list initialization, and if any of them are in the non-accessible list, it logs their descriptions and aborts the transformation with this KettleException. The exception message includes the list of offending files via the localized message pattern.
Solutions
- Verify every file listed in the error message exists and is readable by the user running Kettle/PDI (ls -l / chmod / chown as needed).
- Check the step's file tab: correct the file/folder paths, or uncheck 'required' if the file is optional.
- Use environment variables/parameters instead of hard-coded absolute paths so paths resolve on the execution host.
- If files are produced by an earlier entry in the same job, ensure that entry succeeded and completed before the transformation runs.
Example fix
// before (required file that may not exist)
String path = "/data/input/sales.xml";
// after (check before running the transformation)
File f = new File(path);
if (!f.isFile() || !f.canRead()) {
throw new IllegalStateException("Required input missing or unreadable: " + path);
} Defensive patterns
Strategy: validation
Validate before calling
String[] required = { "/data/input/orders.xml", "/data/input/items.xml" };
for (String p : required) {
File f = new File(p);
if (!f.isFile() || !f.canRead()) {
throw new IllegalStateException("Required file missing or unreadable: " + p);
}
} Try / catch
try {
trans.execute(null);
} catch (KettleException e) {
if (e.getMessage().contains("RequiredNotAccessibleFiles")) {
logError("Fix file paths/permissions before rerunning: " + e.getMessage());
} else { throw e; }
} Prevention
- Use parameters/variables for file paths and validate them at job start.
- Verify the service account running PDI has read access to all input directories.
- Order job entries so upstream files exist before the transformation runs.
- Only mark files 'required' when they truly must exist.
When it happens
Trigger: A required file (defined in the step's file tab with 'required' checked) is missing, unreadable, or inaccessible at the time processRow calls handleMissingFiles; data.files.getNonAccessibleFiles() returns a non-empty list.
Common situations: File paths configured in the step point to files that were deleted or moved between job design and execution; wrong working directory when using relative paths; the account running the transformation lacks read permission on a network share or mounted directory; wildcard/glob resolved to files that later vanished.
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
- GetXMLData.Log.NoField (localized message)
- LoadFileInput.Log.RequiredNotAccessibleFilesMissing
- AccessInput.Exception.CouldnotFindField
- AccessInput.Log.NoField
- AddSequence.Exception.NoSpecifiedMethod
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/a3a9f62e6fea203e.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/getxmldata/GetXMLData.java:322
}
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();
if ( data.readrow == null ) {
// finished processing!
if ( log.isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "GetXMLData.Log.FinishedProcessing" ) );
}
return false;
}View on GitHub (pinned to f3058517a1)