{"record":{"id":"18534d05dce1eb31","repo":"pentaho/pentaho-kettle","slug":"filelockedmeta-exception-unabletoreadstepinfo","errorCode":"FileLockedMeta.Exception.UnableToReadStepInfo","errorMessage":"FileLockedMeta.Exception.UnableToReadStepInfo","messagePattern":"FileLockedMeta\\.Exception\\.UnableToReadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/filelocked/FileLockedMeta.java","lineNumber":146,"sourceCode":"    }\n  }\n\n  public String getXML() {\n    StringBuilder retval = new StringBuilder();\n\n    retval.append( \"    \" + XMLHandler.addTagValue( \"filenamefield\", filenamefield ) );\n    retval.append( \"    \" + XMLHandler.addTagValue( \"resultfieldname\", resultfieldname ) );\n    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"addresultfilenames\", addresultfilenames ) );\n    return retval.toString();\n  }\n\n  private void readData( Node stepnode, List<DatabaseMeta> databases ) throws KettleXMLException {\n    try {\n      filenamefield = XMLHandler.getTagValue( stepnode, \"filenamefield\" );\n      resultfieldname = XMLHandler.getTagValue( stepnode, \"resultfieldname\" );\n      addresultfilenames = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"addresultfilenames\" ) );\n    } catch ( Exception e ) {\n      throw new KettleXMLException(\n        BaseMessages.getString( PKG, \"FileLockedMeta.Exception.UnableToReadStepInfo\" ), e );\n    }\n  }\n\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      filenamefield = rep.getStepAttributeString( id_step, \"filenamefield\" );\n      resultfieldname = rep.getStepAttributeString( id_step, \"resultfieldname\" );\n      addresultfilenames = rep.getStepAttributeBoolean( id_step, \"addresultfilenames\" );\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"FileLockedMeta.Exception.UnexpectedErrorReadingStepInfo\" ), e );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {\n    try {\n      rep.saveStepAttribute( id_transformation, id_step, \"filenamefield\", filenamefield );","sourceCodeStart":128,"sourceCodeEnd":164,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/filelocked/FileLockedMeta.java#L128-L164","documentation":"FileLockedMeta.readData parses the step's XML node ('filenamefield', 'resultfieldname', 'addresultfilenames' tags). Any exception while reading these tags (malformed XML, wrong node type) is wrapped in a KettleXMLException with this message to indicate the step's definition could not be loaded from the .ktr file.","triggerScenarios":"loadXML -> readData: XMLHandler.getTagValue throws while parsing the FileLocked step node, typically because the transformation XML is corrupted, truncated, hand-edited, or the stepnode passed is not the expected step element.","commonSituations":"Manually edited or partially merged .ktr files; file truncated by a bad transfer or git merge conflict markers left in; loading a transformation saved by an incompatible plugin version.","solutions":["Open the .ktr in a text editor and check the <step> XML block for the FileLocked step - fix malformed or missing tags.","Re-open the transformation in Spoon; if the step fails to load, delete and re-add the FileLocked step.","Restore the .ktr from version control or backup if it was truncated/corrupted."],"exampleFix":"// before (corrupt XML)\n<filenamefield><filenamefield>\n// after\n<filenamefield>filename</filenamefield>","handlingStrategy":"try-catch","validationCode":"// Validate the .ktr parses before load:\nDocument doc = XMLHandler.loadXMLFile(new File(\"trans.ktr\"));\nif (doc == null) throw new IllegalArgumentException(\"trans.ktr is not valid XML\");","typeGuard":null,"tryCatchPattern":"try {\n  TransMeta tm = new TransMeta(\"trans.ktr\");\n} catch (KettleXMLException e) {\n  if (e.getMessage().contains(\"UnableToReadStepInfo\")) {\n    log.error(\"FileLocked step XML corrupt - inspect its <step> block\", e);\n  }\n  throw e;\n}","preventionTips":["Never hand-edit .ktr XML; edit in Spoon instead.","Keep transformation files under version control to recover from corruption.","Validate XML well-formedness after any automated generation or merge."],"tags":["kettle","xml-parse","step-metadata"],"backgroundTag":"xml-parse-error","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"}