{"record":{"id":"603d225ac69c0e9b","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-kettle-file-repository-meta-object","errorCode":null,"errorMessage":"Unable to load Kettle file repository meta object","messagePattern":"Unable to load Kettle file repository meta object","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepositoryMeta.java","lineNumber":110,"sourceCode":"\n    retval.append( \"  \" ).append( XMLHandler.openTag( XML_TAG ) );\n    retval.append( super.getXML() );\n    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"base_directory\", baseDirectory ) );\n    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"read_only\", readOnly ) );\n    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"hides_hidden_files\", hidingHiddenFiles ) );\n    retval.append( \"  \" ).append( XMLHandler.closeTag( XML_TAG ) );\n\n    return retval.toString();\n  }\n\n  public void loadXML( Node repnode, List<DatabaseMeta> databases ) throws KettleException {\n    super.loadXML( repnode, databases );\n    try {\n      baseDirectory = XMLHandler.getTagValue( repnode, \"base_directory\" );\n      readOnly = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( repnode, \"read_only\" ) );\n      hidingHiddenFiles = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( repnode, \"hides_hidden_files\" ) );\n    } catch ( Exception e ) {\n      throw new KettleException( \"Unable to load Kettle file repository meta object\", e );\n    }\n  }\n\n  /**\n   * @return the baseDirectory\n   */\n  public String getBaseDirectory() {\n    return baseDirectory;\n  }\n\n  /**\n   * @param baseDirectory\n   *          the baseDirectory to set\n   */\n  public void setBaseDirectory( String baseDirectory ) {\n    this.baseDirectory = baseDirectory;\n  }\n","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/repository/filerep/KettleFileRepositoryMeta.java#L92-L128","documentation":"KettleFileRepositoryMeta.loadXML() throws this KettleException when parsing the repository's XML metadata node fails while reading <base_directory>, <read_only>, or <hides_hidden_files> tags. This happens while loading repository connection metadata from a configuration file (e.g. repositories.xml or a shared settings file).","triggerScenarios":"XMLHandler.getTagValue() throws or the repnode is malformed/null while deserializing the repository metadata - corrupt configuration XML, wrong root node name, or unexpected XML structure.","commonSituations":"Manually edited or truncated .kettle/repositories.xml; upgrading Pentaho/Kettle versions where the metadata format changed; copying connection settings between machines with encoding damage.","solutions":["Inspect the cause stack trace to find the exact XML parse problem","Validate/repair the repositories.xml (or relevant metadata file) containing the repository definition","Re-create the file repository connection in Spoon to regenerate clean XML","Verify the XML node uses the expected tag names (base_directory, read_only, hides_hidden_files)"],"exampleFix":"// before (broken repositories.xml fragment)\n<repository><base_directory>/data/etw</read_only>Y</repository>\n// after\n<repository><description>File rep</description><base_directory>/data/etl</base_directory><read_only>Y</read_only><hides_hidden_files>N</hides_hidden_files></repository>","handlingStrategy":"try-catch","validationCode":"// Validate repositories.xml before loading\nDocument doc = XMLHandler.loadXMLFile(new File(System.getProperty(\"user.home\") + \"/.kettle/repositories.xml\"));\nif (XMLHandler.getSubNode(doc.getDocumentElement(), \"repositories\") == null) {\n  throw new IllegalStateException(\"Malformed repositories.xml\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  repoMeta.loadXML(repnode, databases);\n} catch (KettleException e) {\n  log.error(\"Repository meta XML invalid; re-create the connection definition\", e);\n}","preventionTips":["Do not hand-edit repository metadata XML","Back up repositories.xml before upgrades","Re-create connections via Spoon after format changes"],"tags":["repository","xml","configuration","parsing"],"backgroundTag":"schema-validation-failed","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"}