{"record":{"id":"065ad1293e7ca772","repo":"pentaho/pentaho-kettle","slug":"pargzipcsvinput-log-onlylocalfilesaresupported","errorCode":"ParGzipCsvInput.Log.OnlyLocalFilesAreSupported","errorMessage":"ParGzipCsvInput.Log.OnlyLocalFilesAreSupported","messagePattern":"ParGzipCsvInput\\.Log\\.OnlyLocalFilesAreSupported","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"ui/src/main/java/org/pentaho/di/ui/trans/steps/parallelgzipcsv/ParGzipCsvInputDialog.java","lineNumber":751,"sourceCode":"    getInfo( inputMeta );\n    stepname = wStepname.getText();\n    dispose();\n  }\n\n  // Get the data layout\n  private void getCSV() {\n    InputStream inputStream = null;\n    try {\n      ParGzipCsvInputMeta meta = new ParGzipCsvInputMeta();\n      getInfo( meta );\n\n      String filename = transMeta.environmentSubstitute( meta.getFilename() );\n\n      FileObject fileObject = KettleVFS.getInstance( transMeta.getBowl() ).getFileObject( filename );\n      if ( !( fileObject instanceof LocalFile ) ) {\n        // We can only use NIO on local files at the moment, so that's what we limit ourselves to.\n        //\n        throw new KettleException( BaseMessages.getString( PKG, \"ParGzipCsvInput.Log.OnlyLocalFilesAreSupported\" ) );\n      }\n\n      wFields.table.removeAll();\n\n      inputStream = new GZIPInputStream( KettleVFS.getInputStream( fileObject ) );\n      InputStreamReader reader = new InputStreamReader( inputStream );\n      EncodingType encodingType = EncodingType.guessEncodingType( reader.getEncoding() );\n\n      // Read a line of data to determine the number of rows...\n      //\n      String line =\n        TextFileInput.getLine(\n          log, reader, encodingType, TextFileInputMeta.FILE_FORMAT_MIXED, new StringBuilder( 1000 ) );\n\n      // Split the string, header or data into parts...\n      //\n      String[] fieldNames = Const.splitString( line, meta.getDelimiter() );\n","sourceCodeStart":733,"sourceCodeEnd":769,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/ui/src/main/java/org/pentaho/di/ui/trans/steps/parallelgzipcsv/ParGzipCsvInputDialog.java#L733-L769","documentation":"Thrown in the ParGzipCsvInputDialog constructor when fetching header fields: the resolved input file is not a LocalFile. The step relies on java NIO and GZIPInputStream which only work on local files, so VFS objects of other kinds (remote/http/sftp) are rejected.","triggerScenarios":"The gzip CSV filename resolves (after environment substitution) to a non-local VFS file, e.g. an http:, sftp:, or other remote file object, while the dialog tries to read its fields.","commonSituations":"Pointing the step at a URL or network file share via a non-local VFS provider, or an environment variable substitution resolving to a remote location.","solutions":["Copy the gzip file to a local filesystem path and point the step at it","Use a local path (file://... or plain absolute path) instead of a remote URI","Pre-download remote files with a prior job/step before the ParGzipCsvInput step","Verify environment substitution does not rewrite the filename to a remote scheme"],"exampleFix":"// before\nString filename = \"sftp://host/data/file.csv.gz\";\n// after\nString filename = \"/data/local/file.csv.gz\"; // local copy of the gzip file","handlingStrategy":"validation","validationCode":"FileObject fo = KettleVFS.getInstance(bowl).getFileObject(envSubstitute(filename));\nif (!(fo instanceof LocalFile)) throw new IllegalArgumentException(\"ParGzipCsvInput only supports local files: \" + filename);","typeGuard":"boolean isLocalFile(FileObject fo) { return fo instanceof LocalFile; }","tryCatchPattern":"try { openDialog(); } catch (KettleException e) { log.error(\"Non-local file for ParGzipCsvInput: \" + e.getMessage()); }","preventionTips":["Only point the step at local filesystem paths","Pre-stage remote gzip files locally before this step","Check environment substitution output for remote schemes"],"tags":["pentaho-kettle","swt-dialog","vfs","gzip","local-files-only"],"backgroundTag":"unsupported-operation","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"}