{"record":{"id":"7ebfed0c79d1764a","repo":"pentaho/pentaho-kettle","slug":"orabulkloadermeta-exception-unabletoreadstepinfofromxml","errorCode":null,"errorMessage":"OraBulkLoaderMeta.Exception.UnableToReadStepInfoFromXML","messagePattern":"OraBulkLoaderMeta\\.Exception\\.UnableToReadStepInfoFromXML","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoaderMeta.java","lineNumber":442,"sourceCode":"        fieldTable[i] = XMLHandler.getTagValue( vnode, \"stream_name\" );\n        fieldStream[i] = XMLHandler.getTagValue( vnode, \"field_name\" );\n        if ( fieldStream[i] == null ) {\n          fieldStream[i] = fieldTable[i]; // default: the same name!\n        }\n        String locDateMask = XMLHandler.getTagValue( vnode, \"date_mask\" );\n        if ( locDateMask == null ) {\n          dateMask[i] = \"\";\n        } else {\n          if ( OraBulkLoaderMeta.DATE_MASK_DATE.equals( locDateMask )\n            || OraBulkLoaderMeta.DATE_MASK_DATETIME.equals( locDateMask ) ) {\n            dateMask[i] = locDateMask;\n          } else {\n            dateMask[i] = \"\";\n          }\n        }\n      }\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"OraBulkLoaderMeta.Exception.UnableToReadStepInfoFromXML\" ), e );\n    }\n  }\n\n  public void setDefault() {\n    fieldTable = null;\n    databaseMeta = null;\n    commitSize = Integer.toString( DEFAULT_COMMIT_SIZE );\n    bindSize = Integer.toString( DEFAULT_BIND_SIZE ); // Use platform default\n    readSize = Integer.toString( DEFAULT_READ_SIZE ); // Use platform default\n    maxErrors = Integer.toString( DEFAULT_MAX_ERRORS );\n    schemaName = \"\";\n    tableName = BaseMessages.getString( PKG, \"OraBulkLoaderMeta.DefaultTableName\" );\n    loadMethod = METHOD_AUTO_END;\n    loadAction = ACTION_APPEND;\n    sqlldr = \"sqlldr\";\n    controlFile = \"control${Internal.Step.CopyNr}.cfg\";\n    dataFile = \"load${Internal.Step.CopyNr}.dat\";","sourceCodeStart":424,"sourceCodeEnd":460,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/oracle-bulk-loader/impl/src/main/java/org/pentaho/di/trans/steps/orabulkloader/OraBulkLoaderMeta.java#L424-L460","documentation":"loadXML() parses the step's <fields> XML; any Exception during readData is wrapped in a KettleXMLException with the localized message for OraBulkLoaderMeta.Exception.UnableToReadStepInfoFromXML. It means the step definition in the .ktr file is malformed or uses unexpected values.","triggerScenarios":"readData(Node) throws while reading stepNode attributes — e.g. missing/malformed <fields> node, non-numeric field count, null structures the parser does not expect, or any runtime exception in field mapping reconstruction.","commonSituations":"Hand-edited .ktr files; transformations produced by newer/older Pentaho versions with schema drift; truncated or corrupted XML after a failed save/merge in version control.","solutions":["Open the .ktr in Spoon and re-save/recreate the OraBulkLoader step to regenerate valid XML","Diff the step's XML against a freshly created OraBulkLoader step to spot malformed attributes","Restore the transformation from version control/backup if the XML was corrupted","Check Pentaho version compatibility — old PDI files may need migration through an intermediate version"],"exampleFix":"// before\n<fields>\n  <field table=\"T\" stream=\"1\"/>\n<!-- after -->\n<fields>\n  <field table=\"TARGET\" stream_name=\"COL1\" field_name=\"col1\" date_mask=\"\"/>\n</fields>","handlingStrategy":"try-catch","validationCode":"// sanity-check the step XML before loading\norg.w3c.dom.Node fields = XMLHandler.getSubNode( stepNode, \"fields\" );\nif ( fields == null || XMLHandler.getNodes( fields, \"field\" ).length == 0 ) {\n  throw new IllegalArgumentException( \"OraBulkLoader step has no <fields> section\" );\n}","typeGuard":null,"tryCatchPattern":"try {\n  meta.loadXML( stepnode, databases, metaStore );\n} catch ( KettleXMLException e ) {\n  if ( e.getMessage().contains( \"UnableToReadStepInfoFromXML\" ) ) {\n    // fall back to re-creating the step or loading a backup .ktr\n  }\n}","preventionTips":["Do not hand-edit .ktr files; edit via Spoon","Keep transformations in version control to restore corrupted files","Test transformations across Pentaho upgrades before switching environments"],"tags":["xml","parsing","metadata","kettle"],"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"}