pentaho/pentaho-kettle · error · KettleConfigException
No value found for property
Error message
No value found for property [<property>] and obbject class [<obj class name>]
What it means
PropertySetter.setProperty parses a config value as a colon-separated directive expression (e.g. 'i18n:pkg:key' or 'ognl:expr'). This error is thrown when splitting the value on ':' yields zero tokens, meaning the value is effectively empty or malformed, so no property value can be resolved. It wraps the failure as a KettleConfigException naming the target property and object class.
Solutions
- Set a non-empty value for the property in the configuration source being loaded.
- Check for variable/parameter substitution that resolved to an empty string and fix the variable definition.
- Use the correct directive prefix ('i18n:pkg:key' or 'ognl:expression') so the value parses into at least one token.
- Wrap the config loading call in try-catch on KettleConfigException to log which property is misconfigured.
Example fix
// before (config XML) <property name="output.dir" value=""/> // after <property name="output.dir" value="/data/kettle/output"/>
Defensive patterns
Strategy: validation
Validate before calling
if (value == null || value.trim().isEmpty()) {
throw new IllegalArgumentException("Property '" + property + "' requires a non-empty directive value");
} Prevention
- Never leave property values empty in Kettle config XML.
- Check that variable substitution in config templates never yields empty strings.
- Validate the whole config file with a schema check before loading.
When it happens
Trigger: Calling PropertySetter.setProperty(obj, property, value) where value is empty or splits to zero tokens (e.g. value == "" with String.split producing a zero-length array in the library's split handling).
Common situations: Kettle configuration files where a property value was left blank or the value element was omitted; templated configs where a variable substitution resolved to nothing; hand-edited XML configs missing the value after the last edit.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- A connection of type PALO is expected
- A connection of type PALO is expected
- Caught a number format exception converting minimum length…
- FlattenerMeta.Exception.FlattenFieldRequired
- MappingDialog.Exception.StepNameNotFound
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/778f8db71be32507.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/pentaho/di/core/config/PropertySetter.java:49
*
*/
public class PropertySetter {
public static final String OGNL = "ognl";
public static final String I18N = "i18n";
private Map<String, OgnlExpression> ognlExpressions = new HashMap<>();
private OgnlContext octx = new OgnlContext();
// this should not be a static/factory method in order to allow caching of
// compiled ognl expressions
public void setProperty( Object obj, String property, String value ) throws KettleConfigException {
String[] expression = value.split( ":" );
Object val;
if ( expression.length == 0 ) {
throw new KettleConfigException( "No value found for property ["
+ property + "] and obbject class [" + obj.getClass().getName() + "]" );
}
String directive = expression[0];
if ( I18N.equalsIgnoreCase( directive ) ) {
val = setI18nProperty( expression, value );
} else if ( OGNL.equalsIgnoreCase( directive ) ) {
val = setOgnlProperty( expression, value );
} else {
val = value;
}
try {
// SET!
BeanUtils.setProperty( obj, property, val );
} catch ( Exception e ) {
throw new KettleConfigException( e );View on GitHub (pinned to f3058517a1)