{"record":{"id":"4d100ed6b1342739","repo":"pentaho/pentaho-kettle","slug":"propertyinput-log-nofiles","errorCode":null,"errorMessage":"PropertyInput.Log.NoFiles","messagePattern":"PropertyInput\\.Log\\.NoFiles","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java","lineNumber":69,"sourceCode":" * @since 24-03-2008\n */\npublic class PropertyInput extends BaseStep implements StepInterface {\n  private static Class<?> PKG = PropertyInputMeta.class; // for i18n purposes, needed by Translator2!!\n\n  private PropertyInputMeta meta;\n  private PropertyInputData data;\n\n  public PropertyInput( StepMeta stepMeta, StepDataInterface stepDataInterface, int copyNr, TransMeta transMeta,\n    Trans trans ) {\n    super( stepMeta, stepDataInterface, copyNr, transMeta, trans );\n  }\n\n  @Override\n  public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws KettleException {\n    if ( first && !meta.isFileField() ) {\n      data.files = meta.getFiles( getTransMeta().getBowl(), this );\n      if ( data.files == null || data.files.nrOfFiles() == 0 ) {\n        throw new KettleException( BaseMessages.getString( PKG, \"PropertyInput.Log.NoFiles\" ) );\n      }\n\n      handleMissingFiles();\n\n      // Create the output row meta-data\n      data.outputRowMeta = new RowMeta();\n      meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,\n        metaStore ); // get the metadata populated\n\n      // Create convert meta-data objects that will contain Date & Number formatters\n      //\n      data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );\n    }\n    Object[] r = null;\n\n    try {\n      // Grab one row\n      Object[] outputRowData = getOneRow();","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/propertyinput/PropertyInput.java#L51-L87","documentation":"PropertyInput.processRow() throws this on the first row when the step is configured to read files directly (not from a field) and the resolved file list is null or empty. The step cannot proceed without at least one input properties/INI file.","triggerScenarios":"Executing the Property Input step with meta.isFileField()==false while getFiles() returns null or a FileInputList with zero files — e.g. no filename configured, wildcard matching nothing, or all files filtered out.","commonSituations":"Wildcard path (e.g. /data/*.properties) matches nothing because files are absent or the path is wrong; variable in the filename is unresolved at runtime; user forgot to enter any filenames in the step dialog.","solutions":["Open the step dialog and add at least one valid filename or wildcard","Verify variables in the filename resolve at runtime (check the transformation's parameter values)","Check the working directory / VFS path so the wildcard actually matches files","Alternatively switch 'File defined in a field?' on and supply filenames via the incoming row stream"],"exampleFix":"// before: no files configured\nString filesField = null; // step reads from dialog, dialog empty\n// after: ensure file or field source\nmeta.setFileField(true);\nmeta.setDynamicFilenameField(\"filename\"); // incoming rows carry the file name","handlingStrategy":"validation","validationCode":"// before running the transformation, resolve and check the configured files\nFileInputList list = meta.getFiles(transMeta.getBowl(), null);\nif (list == null || list.nrOfFiles() == 0) {\n  throw new IllegalStateException(\"Property Input has no input files configured\");\n}","typeGuard":"boolean hasFiles = (list != null && list.nrOfFiles() > 0);","tryCatchPattern":"try {\n  // run transformation / execute step\n} catch (KettleException e) {\n  if (e.getMessage() != null && e.getMessage().contains(\"NoFiles\")) {\n    logError(\"No input files for Property Input; fix step configuration\");\n  } else { throw e; }\n}","preventionTips":["Always configure at least one filename or a 'filename from field' source","Avoid unresolved variables in file paths; pass parameters at launch","Test wildcards against the runtime environment's file layout","Use a Job 'Check if file exists' entry before the transformation"],"tags":["kettle","file-input","configuration"],"backgroundTag":"empty-result-set","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"}