{"record":{"id":"778f8db71be32507","repo":"pentaho/pentaho-kettle","slug":"no-value-found-for-property-property-and-obbject-class-obj","errorCode":null,"errorMessage":"No value found for property [<property>] and obbject class [<obj class name>]","messagePattern":"No value found for property \\[<property>\\] and obbject class \\[<obj class name>\\]","errorType":"exception","errorClass":"KettleConfigException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/config/PropertySetter.java","lineNumber":49,"sourceCode":" *\n */\npublic class PropertySetter {\n\n  public static final String OGNL = \"ognl\";\n  public static final String I18N = \"i18n\";\n\n  private Map<String, OgnlExpression> ognlExpressions = new HashMap<>();\n\n  private OgnlContext octx = new OgnlContext();\n\n  // this should not be a static/factory method in order to allow caching of\n  // compiled ognl expressions\n  public void setProperty( Object obj, String property, String value ) throws KettleConfigException {\n    String[] expression = value.split( \":\" );\n    Object val;\n\n    if ( expression.length == 0 ) {\n      throw new KettleConfigException( \"No value found for property [\"\n        + property + \"] and obbject class [\" + obj.getClass().getName() + \"]\" );\n    }\n\n    String directive = expression[0];\n\n    if ( I18N.equalsIgnoreCase( directive ) ) {\n      val = setI18nProperty( expression, value );\n    } else if ( OGNL.equalsIgnoreCase( directive ) ) {\n      val = setOgnlProperty( expression, value );\n    } else {\n      val = value;\n    }\n\n    try {\n      // SET!\n      BeanUtils.setProperty( obj, property, val );\n    } catch ( Exception e ) {\n      throw new KettleConfigException( e );","sourceCodeStart":31,"sourceCodeEnd":67,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/config/PropertySetter.java#L31-L67","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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."],"exampleFix":"// before (config XML)\n<property name=\"output.dir\" value=\"\"/>\n\n// after\n<property name=\"output.dir\" value=\"/data/kettle/output\"/>","handlingStrategy":"validation","validationCode":"if (value == null || value.trim().isEmpty()) {\n  throw new IllegalArgumentException(\"Property '\" + property + \"' requires a non-empty directive value\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["config","kettle","property-resolution"],"backgroundTag":"empty-required-field","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"}