pentaho/pentaho-kettle · error · KettleXMLException
GetTableNamesMeta.Exception.UnableToReadStepInfo
GetTableNamesMeta.Exception.UnableToReadStepInfo
Error message
GetTableNamesMeta.Exception.UnableToReadStepInfo
What it means
GetTableNamesMeta.readData (invoked via loadXML) parses the step's XML node to rebuild step metadata and wraps any parsing exception in a KettleXMLException with this localized message. It means the step's configuration could not be read from the transformation XML — the .ktr node is malformed or contains unexpected content.
Solutions
- Check e.getCause() to identify the exact parsing failure (number format, null node, etc.).
- Open the .ktr in Spoon and delete/re-add the Get Table Names step to regenerate clean XML.
- Validate the XML file is well-formed (xmllint) and not truncated.
- If migrating from 7.0, confirm the legacy 'schenameNameField' fallback applies or manually rename the tag to 'schemaNameField'.
Example fix
// before: hand-edited XML tag mismatch <schenameNameField>mySchema</schenameNameField> <!-- 7.0 typo tag --> // after: regenerate step XML with the correct tag <schemaNameField>mySchema</schemaNameField>
Defensive patterns
Strategy: try-catch
Validate before calling
// validate the .ktr parses as XML before loading DocumentBuilderFactory.newInstance().newDocumentBuilder().parse( new File( ktrPath ) );
Try / catch
try {
TransMeta tm = new TransMeta( ktrPath );
} catch ( KettleXMLException e ) {
logError( "Step XML unreadable: " + e.getCause() + " - recreate the step in Spoon" );
} Prevention
- Don't hand-edit .ktr files; use Spoon.
- Keep transformations in version control to restore clean copies.
- Migrate old (7.0) transformations through Spoon to refresh XML tags.
When it happens
Trigger: loadXML calls readData on a <step> node whose child tags are missing or of unexpected type (e.g. XMLHandler.getTagValue returns bad data, NumberFormatException from tag-value-to-int conversions); includes the 7.0 legacy 'schenameNameField' compatibility path.
Common situations: Hand-edited or truncated .ktr file; transformation produced by a different/older Pentaho version whose XML tags don't match; XML corrupted by a bad merge or diff tool.
Understand the failure class
Background: JSON parse error: "Unexpected token" / "not valid JSON" / "failed to parse" — what JSON parsers are really complaining about — this error's family across 45 libraries.
Related errors
- GPBulkLoaderMeta.Exception.UnableToReadStepInfoFromXML
- GPLoadMeta.Exception.UnableToReadStepInfoFromXML
- MappingMeta.Exception.ErrorLoadingTransformationStepFromXML
- MultiMergeJoinMeta.Exception.UnableToLoadStepInfo
- NormaliserMeta.Exception.UnableToLoadStepInfoFromXML
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/c6eacae93743273c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/trans/steps/gettablenames/GetTableNamesMeta.java:400
includeCatalog = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "includeCatalog" ) );
includeSchema = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "includeSchema" ) );
includeTable = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "includeTable" ) );
includeView = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "includeView" ) );
includeProcedure = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "includeProcedure" ) );
includeSynonym = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "includeSynonym" ) );
addSchemaInOutput = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "addSchemaInOutput" ) );
dynamicSchema = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "dynamicSchema" ) );
schemaNameField = XMLHandler.getTagValue( stepnode, "schemaNameField" );
if ( XMLHandler.getTagValue( stepnode, "schenameNameField" ) != null ) {
/*
* Fix for wrong field name in the 7.0. Can be removed if we don't want to keep backward compatibility with 7.0
* tranformations.
*/
schemaNameField = XMLHandler.getTagValue( stepnode, "schenameNameField" );
}
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "GetTableNamesMeta.Exception.UnableToReadStepInfo" ), e );
}
}
public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
try {
this.databases = databases;
database = rep.loadDatabaseMetaFromStepAttribute( id_step, "id_connection", databases );
schemaname = rep.getStepAttributeString( id_step, "schemaname" );
tablenamefieldname = rep.getStepAttributeString( id_step, "tablenamefieldname" );
objecttypefieldname = rep.getStepAttributeString( id_step, "objecttypefieldname" );
sqlcreationfieldname = rep.getStepAttributeString( id_step, "sqlcreationfieldname" );
issystemobjectfieldname = rep.getStepAttributeString( id_step, "issystemobjectfieldname" );
includeCatalog = rep.getStepAttributeBoolean( id_step, "includeCatalog" );
includeSchema = rep.getStepAttributeBoolean( id_step, "includeSchema" );
includeTable = rep.getStepAttributeBoolean( id_step, "includeTable" );
includeView = rep.getStepAttributeBoolean( id_step, "includeView" );View on GitHub (pinned to f3058517a1)