pentaho/pentaho-kettle · error · KettleXMLException
LucidDBStreamingLoaderMeta.Exception.UnableToReadStepInfoFromXML
LucidDBStreamingLoaderMeta.Exception.UnableToReadStepInfoFromXML
Error message
LucidDBStreamingLoaderMeta.Exception.UnableToReadStepInfoFromXML
What it means
readData() in LucidDBStreamingLoaderMeta parses the step's XML definition (stepnode) when a transformation is loaded, and wraps any exception (malformed XML, missing nodes like 'fields' or 'tab_is_enable_mapping', wrong tag values) into a KettleXMLException with this localized message. It signals that the LucidDB Streaming Loader step's metadata could not be read from the .ktr file.
Solutions
- Open the .ktr in a text editor and verify the LucidDBStreamingLoader <step> XML block contains the expected tags ('fields', 'field_name', 'field_table', 'tab_is_enable_mapping', 'tab_is_enable').
- Ensure the pentaho-lucid-db-streaming-loader plugin version loading the file is >= the version that saved it; upgrade the plugin or re-save the transformation in the newer tool.
- Restore the transformation from backup/source control and re-configure the step.
- If hand-editing, fix the malformed/missing node in the XML and reload.
Example fix
// before (hand-edited XML missing mapping nodes) <tab_is_enable_mapping/> // after (each mapping entry present with both tags) <tab_is_enable_mapping><tab_name>MYTABLE</tab_name><tab_is_enable>Y</tab_is_enable></tab_is_enable_mapping>
Defensive patterns
Strategy: try-catch
Validate before calling
Node steps = XMLHandler.getSubNode(stepnode, "fields");
if (steps == null || XMLHandler.countNodes(steps, "field") == 0) {
throw new IllegalArgumentException("LucidDBStreamingLoader step XML has no fields block");
} Type guard
if (stepnode == null || XMLHandler.getSubNode(stepnode, "fields") == null) return false;
Try / catch
try {
meta.loadXML(stepnode, databases, metaStore);
} catch (KettleXMLException e) {
logError("Failed to read LucidDB Streaming Loader step metadata", e);
throw e; // or fall back to setDefault()
} Prevention
- Never hand-edit step XML; reconfigure via the Spoon dialog.
- Keep plugin versions consistent across environments that share .ktr files.
- Store transformations in source control to restore known-good XML.
- Validate transformations right after upgrading Pentaho/plugin versions.
When it happens
Trigger: loadXML() calls readData(stepnode); readData throws when XMLHandler calls fail or return unexpected values inside its try block — e.g. a .ktr saved by a newer/different plugin version missing the 'fields' entries or 'tab_is_enable_mapping' sub-nodes this reader expects.
Common situations: Opening a transformation whose LucidDB Streaming Loader step XML was hand-edited or corrupted; loading a .ktr produced by a newer Pentaho version into an older one; plugin jar version mismatch between save and load.
Understand the failure class
Background: "failed to unmarshal" / json.Unmarshal errors: why parsing a response into a Go struct fails and how to fix it — this error's family across 23 libraries.
Related errors
- AggregateRowsMeta.Exception.UnableToLoadStepInfo
- AppendMeta.Exception.UnableToLoadStepInfo
- GetTableNamesMeta.Exception.UnableToReadStepInfo
- GPBulkLoaderMeta.Exception.UnableToReadStepInfoFromXML
- GPBulkLoaderMeta.Exception.UnableToReadStepInfoFromXML
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/187e5cac46cecdfe.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/lucid-db-streaming-loader/core/src/main/java/org/pentaho/di/trans/steps/luciddbstreamingloader/LucidDBStreamingLoaderMeta.java:249
fieldStreamForFields[i] = XMLHandler.getTagValue( vnode, "field_stream_name" );
if ( fieldStreamForFields[i] == null ) {
fieldStreamForFields[i] = fieldTableForFields[i]; // default:
}
// the
// same
// name!
insOrUptFlag[i] = "Y".equalsIgnoreCase( XMLHandler.getTagValue( vnode, "insert_or_update_flag" ) );
}
for ( int i = 0; i < nrTabIsEnable; i++ ) {
Node vnode = XMLHandler.getSubNodeByNr( stepnode, "tab_is_enable_mapping", i );
tabIsEnable[i] = "Y".equalsIgnoreCase( XMLHandler.getTagValue( vnode, "tab_is_enable" ) );
}
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "LucidDBStreamingLoaderMeta.Exception.UnableToReadStepInfoFromXML" ), e );
}
}
public void setDefault() {
databaseMeta = null;
schemaName = "";
tableName = BaseMessages.getString( PKG, "LucidDBStreamingLoaderMeta.DefaultTableName" );
host = "localhost";
port = "9034";
operation = "MERGE";
allocate( 0, 0, 0 );
}
public String getXML() {
StringBuffer retval = new StringBuffer( 300 );
retvalView on GitHub (pinned to f3058517a1)