pentaho/pentaho-kettle · error · KettleException
JobTrans.Exception.MetaDataLoad
Error message
JobTrans.Exception.MetaDataLoad
What it means
Thrown from JobEntryTrans's transformation-metadata loading path (getTransMeta-style logic reached from the entry) when loading the referenced transformation's metadata throws a checked KettleException, which is re-thrown unchanged; any other unexpected Exception is wrapped in a KettleException with the JobTrans.Exception.MetaDataLoad message. It means the transformation's .ktr metadata could not be loaded. The root cause is attached.
Solutions
- Check the wrapped cause to see whether it's a file, XML, or repository problem
- Verify the transformation file/repository path exists and is readable at runtime (resolve any variables)
- Re-save/re-export the transformation with a compatible Pentaho version
- Confirm repository connection settings and permissions for metadata loading
Example fix
// before
jobEntry.setFilename( "${TRANS_DIR}/etl.ktr" ); // TRANS_DIR unset
// after
String path = jobEntry.environmentSubstitute( "${TRANS_DIR}/etl.ktr" );
if ( !new File( path ).exists() ) throw new IllegalStateException( "Missing ktr: " + path );
jobEntry.setFilename( "${TRANS_DIR}/etl.ktr" ); Defensive patterns
Strategy: validation
Validate before calling
String path = jobEntry.environmentSubstitute( jobEntry.getFilename() );
if ( path != null && !new File( path ).exists() ) {
throw new IllegalStateException( "Transformation file missing: " + path );
} Try / catch
try { TransMeta tm = jobEntry.getTransMeta(); } catch ( KettleException e ) { log.error( "Metadata load failed", e.getCause() != null ? e.getCause() : e ); } Prevention
- Ensure referenced .ktr files ship with the job
- Resolve variables in paths before execution
- Keep Pentaho versions consistent across environments
- Verify repository read permissions for metadata
When it happens
Trigger: The referenced transformation file does not exist or is unreadable, the .ktr XML is corrupt/incompatible, repository-based transformations cannot be found at the given path/id, or repository connection failures occur while loading metadata.
Common situations: Transformation moved/renamed on disk or in the repository after the job was designed; variables used in the transformation path not set at runtime; .ktr saved by a newer Pentaho version; repository permissions preventing metadata reads.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- LucidDBStreamingLoaderMeta.Exception.UnableToReadStepInfoFromXML
- MultiMergeJoin.Exception.UnableToFindFieldInReferenceStream
- A deadlock was detected between steps
- AggregateRowsMeta.Exception.UnableToLoadStepInfo
- AppendMeta.Exception.UnableToLoadStepInfo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/7cd160430238502e.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/trans/JobEntryTrans.java:1354
// parent directory (e.g. "/public" instead of "/public/test") when a transformation is invoked
// from a job entry.
// When the child parameter does exist in the parent parameters, overwrite the child parameter by the
// parent parameter.
StepWithMappingMeta.replaceVariableValues( transMeta, space, "Trans" );
if ( isPassingAllParameters() ) {
// All other parent parameters need to get copied into the child parameters (when the 'Inherit all
// variables from the transformation?' option is checked)
StepWithMappingMeta.addMissingVariables( transMeta, space );
}
}
return transMeta;
} catch ( final KettleException ke ) {
// if we get a KettleException, simply re-throw it
throw ke;
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "JobTrans.Exception.MetaDataLoad" ), e );
}
}
@Override
public boolean evaluates() {
return true;
}
@Override
public boolean isUnconditional() {
return true;
}
@Override
public List<SQLStatement> getSQLStatements( Repository repository, IMetaStore metaStore, VariableSpace space ) throws KettleException {
this.copyVariablesFrom( space );
TransMeta transMeta = getTransMeta( repository, metaStore, this );
View on GitHub (pinned to f3058517a1)