pentaho/pentaho-kettle · error · KettleException

Property ' ' has more than one array in path for injection…

Error message

Property '<propName>' has more than one array in path for injection to <rootClass>

What it means

Thrown when an injection property's path would traverse more than one array (e.g. a field of arrays of objects that themselves contain arrays). The bean-injection engine only supports zero or one array level in a property path, so such properties are rejected.

Solutions

  1. Flatten the plugin's option structure so injectable properties have at most one array in their path
  2. Remove @Injection from the deeply nested field and inject via an intermediate supported property
  3. Restructure injection into multiple sequential inject calls on nested objects

Example fix

// before
class A { @Injection(name="X") List<B> bs; } // path: list-of-lists
// after
expose flat @Injection(name="X") List<String> x on the root step class
Defensive patterns

Strategy: validation

Validate before calling

BeanInjectionInfo.Property p = new BeanInjectionInfo(stepClass).getProperties().get(propName);
if (p != null && p.pathArraysCount > 1)
  throw new IllegalArgumentException("Property " + propName + " unsupported (multi-array path)");

Try / catch

try { injector.setProperty(root, propName, data, n); }
catch (KettleException e) { log.error("Unsupported nested-array property " + propName); }

Prevention

When it happens

Trigger: Target class has a nested structure like @Injection field List<A> where A contains another injectable List — resolving its path yields pathArraysCount > 1 and setProperty rejects it.

Common situations: Plugin authors annotating deeply nested collection fields; using legacy plugin classes with complex nested options under metadata injection.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/3c7d352d054c53cd. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/core/injection/bean/BeanInjector.java:201

            setProperty( root, prop, i, data.get( i ), dataName, dataValue );
          }
        } else {
          allocateCollectionField( root, info, propName );
          for ( int i = 0;; i++ ) {
            // NOTE: case when constant value is provided and need to fill out all entries with the same value
            // assumption is the field array/list size allocated to correct size
            boolean found = setProperty( root, prop, i, null, null, dataValue );
            if ( !found ) {
              break;
            }
          }
        }
      } catch ( Exception ex ) {
        throw new KettleException( "Error inject property '" + propName + "' into " + root.getClass(), ex );
      }
    } else {
      if ( prop.pathArraysCount > 1 ) {
        throw new KettleException( "Property '" + propName + "' has more than one array in path for injection to "
            + root.getClass() );
      }
    }
  }

  /**
   * Sets data from RowMetaAndData, or constant value from dataValue depends on 'data != null'.
   */
  private boolean setProperty( Object root, BeanInjectionInfo.Property prop, int index, RowMetaAndData data,
      String dataName, String dataValue ) throws Exception {
    Object obj = root;
    for ( int i = 1; i < prop.path.size(); i++ ) {
      BeanLevelInfo s = prop.path.get( i );
      if ( i < prop.path.size() - 1 ) {       // NOTE: if prop.path.size() > 2, then @InjectionDeep field
        // get path
        Object next;
        switch ( s.dim ) {
          case ARRAY:

View on GitHub (pinned to f3058517a1)