{"record":{"id":"a3a9f62e6fea203e","repo":"pentaho/pentaho-kettle","slug":"getxmldata-log-requirednotaccessiblefilesmissing-localized","errorCode":null,"errorMessage":"GetXMLData.Log.RequiredNotAccessibleFilesMissing (localized message with file list)","messagePattern":"GetXMLData\\.Log\\.RequiredNotAccessibleFilesMissing \\(localized message with file list\\)","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/getxmldata/GetXMLData.java","lineNumber":322,"sourceCode":"  }\n\n  private void handleMissingFiles() throws KettleException {\n    List<FileObject> nonExistantFiles = data.files.getNonExistantFiles();\n    if ( nonExistantFiles.size() != 0 ) {\n      String message = FileInputList.getRequiredFilesDescription( nonExistantFiles );\n      logError( BaseMessages.getString( PKG, \"GetXMLData.Log.RequiredFilesTitle\" ), BaseMessages.getString( PKG,\n          \"GetXMLData.Log.RequiredFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString( PKG, \"GetXMLData.Log.RequiredFilesMissing\", message ) );\n    }\n\n    List<FileObject> nonAccessibleFiles = data.files.getNonAccessibleFiles();\n    if ( nonAccessibleFiles.size() != 0 ) {\n      String message = FileInputList.getRequiredFilesDescription( nonAccessibleFiles );\n      logError( BaseMessages.getString( PKG, \"GetXMLData.Log.RequiredFilesTitle\" ), BaseMessages.getString( PKG,\n          \"GetXMLData.Log.RequiredNotAccessibleFiles\", message ) );\n\n      throw new KettleException( BaseMessages.getString( PKG, \"GetXMLData.Log.RequiredNotAccessibleFilesMissing\",\n          message ) );\n    }\n  }\n\n  private boolean ReadNextString() {\n\n    try {\n      // Grab another row ...\n      data.readrow = getRow();\n\n      if ( data.readrow == null ) {\n        // finished processing!\n\n        if ( log.isDetailed() ) {\n          logDetailed( BaseMessages.getString( PKG, \"GetXMLData.Log.FinishedProcessing\" ) );\n        }\n        return false;\n      }","sourceCodeStart":304,"sourceCodeEnd":340,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/getxmldata/GetXMLData.java#L304-L340","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before (required file that may not exist)\nString path = \"/data/input/sales.xml\";\n// after (check before running the transformation)\nFile f = new File(path);\nif (!f.isFile() || !f.canRead()) {\n  throw new IllegalStateException(\"Required input missing or unreadable: \" + path);\n}","handlingStrategy":"validation","validationCode":"String[] required = { \"/data/input/orders.xml\", \"/data/input/items.xml\" };\nfor (String p : required) {\n  File f = new File(p);\n  if (!f.isFile() || !f.canRead()) {\n    throw new IllegalStateException(\"Required file missing or unreadable: \" + p);\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  trans.execute(null);\n} catch (KettleException e) {\n  if (e.getMessage().contains(\"RequiredNotAccessibleFiles\")) {\n    logError(\"Fix file paths/permissions before rerunning: \" + e.getMessage());\n  } else { throw e; }\n}","preventionTips":["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."],"tags":["file-io","configuration","kettle","xml-input"],"backgroundTag":"file-not-found","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}