{"record":{"id":"4f12a4122062d849","repo":"pentaho/pentaho-kettle","slug":"cubeoutputmeta-exception-unabletoloadstepinfo","errorCode":"CubeOutputMeta.Exception.UnableToLoadStepInfo","errorMessage":"CubeOutputMeta.Exception.UnableToLoadStepInfo","messagePattern":"CubeOutputMeta\\.Exception\\.UnableToLoadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/cubeoutput/CubeOutputMeta.java","lineNumber":133,"sourceCode":"    this.doNotOpenNewFileInit = doNotOpenNewFileInit;\n  }\n\n  public Object clone() {\n    CubeOutputMeta retval = (CubeOutputMeta) super.clone();\n\n    return retval;\n  }\n\n  private void readData( Node stepnode ) throws KettleXMLException {\n    try {\n      filename = XMLHandler.getTagValue( stepnode, \"file\", \"name\" );\n      addToResultFilenames =\n        \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"file\", \"add_to_result_filenames\" ) );\n      doNotOpenNewFileInit =\n        \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"file\", \"do_not_open_newfile_init\" ) );\n\n    } catch ( Exception e ) {\n      throw new KettleXMLException(\n        BaseMessages.getString( PKG, \"CubeOutputMeta.Exception.UnableToLoadStepInfo\" ), e );\n    }\n  }\n\n  public void setDefault() {\n    filename = \"file.cube\";\n    addToResultFilenames = false;\n    doNotOpenNewFileInit = false;\n  }\n\n  public String getXML() {\n    StringBuilder retval = new StringBuilder( 300 );\n\n    retval.append( \"    <file>\" ).append( Const.CR );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"name\", filename ) );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"add_to_result_filenames\", addToResultFilenames ) );\n    retval.append( \"      \" ).append( XMLHandler.addTagValue( \"do_not_open_newfile_init\", doNotOpenNewFileInit ) );\n","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/cubeoutput/CubeOutputMeta.java#L115-L151","documentation":"CubeOutputMeta.readData parses the step's XML node (file name, add_to_result_filenames, do_not_open_newfile_init tags) when loading a transformation from a .ktr file. Any exception during XML parsing is wrapped in a KettleXMLException with message 'CubeOutputMeta.Exception.UnableToLoadStepInfo'. It means the Cube Output step's XML definition is malformed or missing required tags.","triggerScenarios":"loadXML -> readData on a <step> node whose <file> element is missing, has unexpected structure, or the XML document is truncated/corrupted so XMLHandler.getTagValue fails or returns invalid data.","commonSituations":"Hand-edited or corrupted .ktr files; ktr generated by another tool missing the <file> tags; version drift where an older/newer PDI wrote tags this reader does not expect; file truncated by a failed transfer.","solutions":["Open the .ktr in a text editor and check the Cube Output step's <file> XML block (file_name, add_to_result_filenames, do_not_open_newfile_init) for missing/malformed tags.","Re-create the Cube Output step in Spoon and re-save the transformation.","Restore the transformation from backup or version control.","Compare the XML with a working transformation saved by the same PDI version and reconcile differences."],"exampleFix":"// before: broken step XML\n<step><name>Cube output</name><type>CubeOutput</type></step>\n// after: complete file block\n<step><name>Cube output</name><type>CubeOutput</type>\n  <file><file_name>file.cube</file_name>\n    <add_to_result_filenames>N</add_to_result_filenames>\n    <do_not_open_newfile_init>N</do_not_open_newfile_init>\n  </file>\n</step>","handlingStrategy":"validation","validationCode":"// Validate the .ktr XML before loading\nDocument doc = XMLHandler.loadXMLFile(ktrFile);\nif (XMLHandler.getSubNode(XMLHandler.getSubNode(doc, \"transformation\"), \"step\") == null) {\n  throw new KettleException(\"ktr file has no steps\");\n}\n// ensure CubeOutput steps contain a <file> block\nNodeList steps = doc.getElementsByTagName(\"step\");","typeGuard":null,"tryCatchPattern":"try { transMeta = new TransMeta(ktrPath); } catch (KettleXMLException e) { logError(\"Unable to load step info from \" + ktrPath + \": \" + e.getMessage(), e); transMeta = restoreFromBackup(ktrPath); }","preventionTips":["Do not hand-edit .ktr files; edit in Spoon.","Commit transformations to version control so corrupted files can be restored.","Verify file integrity (size/checksum) after transferring ktr files.","Keep all PDI clients on the same version when sharing transformations."],"tags":["kettle","xml","step-metadata","deserialization"],"backgroundTag":"json-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"}