{"record":{"id":"5f3408ebcc42aa65","repo":"pentaho/pentaho-kettle","slug":"filesystemconfigbuilder-could-not-parse-parameter","errorCode":null,"errorMessage":"FileSystemConfigBuilder could not parse parameter: ","messagePattern":"FileSystemConfigBuilder could not parse parameter: ","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/vfs/KettleVFSImpl.java","lineNumber":213,"sourceCode":"      String[] varList = varSpace.listVariables();\n\n      for ( String var : varList ) {\n        if ( var.equalsIgnoreCase( CONNECTION ) && varSpace.getVariable( var ) != null ) {\n          FileSystemOptions fileSystemOptions = VFSHelper.getOpts( bowl, vfsFilename, varSpace.getVariable( var ),\n                                                                   varSpace );\n          if ( fileSystemOptions != null ) {\n            return fileSystemOptions;\n          }\n        }\n        if ( var.startsWith( \"vfs.\" ) ) {\n          String param = configBuilder.parseParameterName( var, scheme );\n          String varScheme = KettleGenericFileSystemConfigBuilder.extractScheme( var );\n          if ( param != null ) {\n            if ( varScheme == null || varScheme.equals( \"sftp\" ) || varScheme.equals( scheme ) ) {\n              configBuilder.setParameter( fsOptions, param, varSpace.getVariable( var ), var, vfsFilename );\n            }\n          } else {\n            throw new IOException( \"FileSystemConfigBuilder could not parse parameter: \" + var );\n          }\n        }\n      }\n      if ( scheme.equals( \"pvfs\" ) ) {\n        configBuilder.setParameter( fsOptions, \"VariableSpace\", varSpace, vfsFilename );\n      }\n    } catch ( KettleException ex ) {\n      // keep backward compatible API in KettleVFS\n      throw new IOException( ex );\n    }\n    return fsOptions;\n  }\n\n  @Override\n  public String getFriendlyURI( String filename ) {\n    return getFriendlyURI( filename, defaultVariableSpace.get() );\n  }\n","sourceCodeStart":195,"sourceCodeEnd":231,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/vfs/KettleVFSImpl.java#L195-L231","documentation":"KettleVFSImpl.buildFsOptions maps Kettle variables like vfs.xxx.param=value into commons-vfs FileSystemOptions. For each variable it asks the config builder to extract a parameter name; if the variable's prefix (after scheme extraction) doesn't map to a known parameter, param is null and an IOException \"FileSystemConfigBuilder could not parse parameter: <var>\" is thrown. This means a VFS.* variable is set that no scheme's config builder recognizes.","triggerScenarios":"Setting a variable like vfs.sftp.UnknownParam=xyz (or a misspelled one such as vfs.sftp.identykey instead of identyKey) in kettle.properties, a transformation, or the environment, then calling getFileSystemOptions for that scheme.","commonSituations":"Upgrading Kettle/PDI where parameter names changed; copying variables from documentation for a different scheme (e.g. using http params with sftp); typos in variable names; passing arbitrary variables with the vfs.* prefix expecting them to be ignored.","solutions":["Read the variable name in the message and correct the parameter name to the one the scheme's FileSystemConfigBuilder expects (e.g. vfs.sftp.identyKey, vfs.sftp.StrictHostKeyChecking).","Remove the stray vfs.* variable if it isn't needed.","Check the PDI version's supported VFS parameter names in the KettleGenericFileSystemConfigBuilder and scheme-specific builders.","Ensure the variable's scheme matches the scheme being configured (or use no scheme prefix for generic ones)."],"exampleFix":"// before (kettle.properties)\nvfs.sftp.identykey=/home/user/.ssh/id_rsa\n// after\nvfs.sftp.identyKey=/home/user/.ssh/id_rsa","handlingStrategy":"validation","validationCode":"// only pass variables the config builder understands\nif (var.startsWith(\"vfs.\") && !KNOWN_VFS_PARAMS.contains(var)) {\n  log.warn(\"Ignoring unknown VFS variable: \" + var);\n}","typeGuard":null,"tryCatchPattern":"try {\n  opts = KettleVFS.getInstance().getFileSystemOptions(scheme, file, space);\n} catch (IOException e) {\n  if (e.getMessage().startsWith(\"FileSystemConfigBuilder could not parse parameter\")) {\n    throw new KettleException(\"Fix or remove the vfs.* variable named in the message\", e);\n  }\n  throw e;\n}","preventionTips":["Copy vfs.* parameter names only from the version's documentation, checking case.","Remove obsolete vfs.* variables after PDI upgrades.","Keep scheme prefixes consistent with the scheme being connected to."],"tags":["vfs","configuration","variables","sftp"],"backgroundTag":"invalid-config-value","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"}