pentaho/pentaho-kettle · error · KettleException
Property ' ' not found for injection to
Error message
Property '<propName>' not found for injection to <rootClass>
What it means
BeanInjector.setProperty throws KettleException when the injection property name given by a metadata-injection caller does not exist on the target plugin class. Unlike getObject/getProperty this is the main path used by the ETL metadata injection engine.
Solutions
- Inspect the target class's supported properties (show its injection metadata) and correct the mapping row name
- Pin/rebuild against a Kettle version matching the step plugin's property names
- Add @Injection to the field if you control the plugin and need that property injectable
Example fix
// before mapping: "tablename" -> targetField // after mapping: "TABLE_NAME" -> targetField // matches @Injection(name="TABLE_NAME")
Defensive patterns
Strategy: validation
Validate before calling
Map<String, BeanInjectionInfo.Property> props = new BeanInjectionInfo(targetStepClass).getProperties();
mappingKeys.forEach(k -> { if (!props.containsKey(k)) throw new IllegalArgumentException("Unknown property " + k); }); Try / catch
try { injector.setProperty(meta, propName, data, dataN); }
catch (KettleException e) { throw new KettleException("Injection mapping invalid for " + propName, e); } Prevention
- Validate the full metadata-injection mapping before running the ETL job
- Pin the Kettle version in build/pom so plugin property names stay stable
- Read the target step's documented injection fields instead of guessing names
When it happens
Trigger: A TransMeta/JobMeta generation step passes a source-field-to-property mapping whose property name is not registered in BeanInjectionInfo for the target step/job-entry class.
Common situations: Renamed/removed @Injection properties after a Pentaho upgrade; hard-coded mapping rows in the 'ETL metadata injection' step that no longer match; target step changed to a different plugin.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- Error inject property
- No setter defined for
- Property not found
- Property ' ' has more than one array in path for injection…
- Bounds of this rule are not numeric: lowerBound=
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/28bbb62932da6e9f.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/core/injection/bean/BeanInjector.java:158
}
break;
case NONE:
break;
}
}
return obj;
}
public boolean hasProperty( Object root, String propName ) {
BeanInjectionInfo.Property prop = info.getProperties().get( propName );
return prop != null;
}
public void setProperty( Object root, String propName, List<RowMetaAndData> data, String dataN )
throws KettleException {
BeanInjectionInfo.Property prop = info.getProperties().get( propName );
if ( prop == null ) {
throw new KettleException( "Property '" + propName + "' not found for injection to " + root.getClass() );
}
String dataName;
String dataValue;
if ( data != null ) {
dataName = dataN;
dataValue = null;
} else {
dataName = null;
dataValue = dataN;
}
if ( prop.pathArraysCount == 0 ) {
// no arrays in path
try {
setProperty( root, prop, 0, data != null ? data.get( 0 ) : null, dataName, dataValue );
} catch ( Exception ex ) {
throw new KettleException( "Error inject property '" + propName + "' into " + root.getClass(), ex );View on GitHub (pinned to f3058517a1)