{"record":{"id":"3c7d352d054c53cd","repo":"pentaho/pentaho-kettle","slug":"property-propname-has-more-than-one-array-in-path-for","errorCode":null,"errorMessage":"Property '<propName>' has more than one array in path for injection to <rootClass>","messagePattern":"Property '<propName>' has more than one array in path for injection to <rootClass>","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/core/injection/bean/BeanInjector.java","lineNumber":201,"sourceCode":"            setProperty( root, prop, i, data.get( i ), dataName, dataValue );\n          }\n        } else {\n          allocateCollectionField( root, info, propName );\n          for ( int i = 0;; i++ ) {\n            // NOTE: case when constant value is provided and need to fill out all entries with the same value\n            // assumption is the field array/list size allocated to correct size\n            boolean found = setProperty( root, prop, i, null, null, dataValue );\n            if ( !found ) {\n              break;\n            }\n          }\n        }\n      } catch ( Exception ex ) {\n        throw new KettleException( \"Error inject property '\" + propName + \"' into \" + root.getClass(), ex );\n      }\n    } else {\n      if ( prop.pathArraysCount > 1 ) {\n        throw new KettleException( \"Property '\" + propName + \"' has more than one array in path for injection to \"\n            + root.getClass() );\n      }\n    }\n  }\n\n  /**\n   * Sets data from RowMetaAndData, or constant value from dataValue depends on 'data != null'.\n   */\n  private boolean setProperty( Object root, BeanInjectionInfo.Property prop, int index, RowMetaAndData data,\n      String dataName, String dataValue ) throws Exception {\n    Object obj = root;\n    for ( int i = 1; i < prop.path.size(); i++ ) {\n      BeanLevelInfo s = prop.path.get( i );\n      if ( i < prop.path.size() - 1 ) {       // NOTE: if prop.path.size() > 2, then @InjectionDeep field\n        // get path\n        Object next;\n        switch ( s.dim ) {\n          case ARRAY:","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/core/injection/bean/BeanInjector.java#L183-L219","documentation":"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.","triggerScenarios":"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.","commonSituations":"Plugin authors annotating deeply nested collection fields; using legacy plugin classes with complex nested options under metadata injection.","solutions":["Flatten the plugin's option structure so injectable properties have at most one array in their path","Remove @Injection from the deeply nested field and inject via an intermediate supported property","Restructure injection into multiple sequential inject calls on nested objects"],"exampleFix":"// before\nclass A { @Injection(name=\"X\") List<B> bs; } // path: list-of-lists\n// after\nexpose flat @Injection(name=\"X\") List<String> x on the root step class","handlingStrategy":"validation","validationCode":"BeanInjectionInfo.Property p = new BeanInjectionInfo(stepClass).getProperties().get(propName);\nif (p != null && p.pathArraysCount > 1)\n  throw new IllegalArgumentException(\"Property \" + propName + \" unsupported (multi-array path)\");","typeGuard":null,"tryCatchPattern":"try { injector.setProperty(root, propName, data, n); }\ncatch (KettleException e) { log.error(\"Unsupported nested-array property \" + propName); }","preventionTips":["Design plugin option beans with at most one collection level per property","Scan all injectable properties for pathArraysCount>1 during plugin build","Prefer flat property naming (e.g. FIELD_NAME_i) over deep nesting"],"tags":["pentaho-kettle","metadata-injection","unsupported"],"backgroundTag":"unsupported-operation","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}