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

  1. Inspect the target class's supported properties (show its injection metadata) and correct the mapping row name
  2. Pin/rebuild against a Kettle version matching the step plugin's property names
  3. 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

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


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)