{"record":{"id":"1878cea5b50e3e98","repo":"pentaho/pentaho-kettle","slug":"getxmldata-log-requiredfilesmissing-localized-message-with","errorCode":null,"errorMessage":"GetXMLData.Log.RequiredFilesMissing (localized message with file list)","messagePattern":"GetXMLData\\.Log\\.RequiredFilesMissing \\(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":313,"sourceCode":"  }\n\n  /**\n   * Build an empty row based on the meta-data.\n   * \n   * @return empty row built\n   */\n  private Object[] buildEmptyRow() {\n    return RowDataUtil.allocateRowData( data.outputRowMeta.size() );\n  }\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();","sourceCodeStart":295,"sourceCodeEnd":331,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/getxmldata/GetXMLData.java#L295-L331","documentation":"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.","triggerScenarios":"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.","commonSituations":"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).","solutions":["Fix the file names/directories listed in the error message in the step's File tab","Verify the files exist from the machine/agent actually running the transformation (paths are relative to it)","Use environment variables (${Internal.Transformation.Filename.Directory}, ${ENV_VAR}) instead of hard-coded absolute paths","If files may legitimately be absent, enable 'Ignore missing file' / add existence checks in a preceding job entry"],"exampleFix":"// before\nFile: /data/input/sales.xml\n// after\nFile: ${Internal.Transformation.Filename.Directory}/input/sales.xml","handlingStrategy":"validation","validationCode":"File f = new File(resolvedPath);\nif (!f.isFile()) failFast(\"Input XML missing before running transformation: \" + resolvedPath);","typeGuard":null,"tryCatchPattern":"try { runTransformation(); }\ncatch (KettleException ke) {\n  if (ke.getMessage() != null && ke.getMessage().contains(\"required files\")) {\n    logError(\"Missing input files — check paths and upstream job delivery\");\n  }\n}","preventionTips":["Use variables/relative paths instead of hard-coded absolute paths","Check file existence in a preceding job entry (file exists check)","Ensure upstream jobs finish delivering files before the transformation starts"],"tags":["file","file-not-found","input","kettle"],"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"}