{"record":{"id":"a99456c591a626db","repo":"flowable/flowable-engine","slug":"could-not-find-property-property-in-base-getc","errorCode":null,"errorMessage":"Could not find property ${property} in ${base.getClass()}","messagePattern":"Could not find property (.+?) in (.+?)","errorType":"exception","errorClass":"PropertyNotFoundException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/CouldNotResolvePropertyELResolver.java","lineNumber":35,"sourceCode":" * The last resolver in the row, when we can not decide what to do.\n *\n * @author martin.grofcik\n */\npublic class CouldNotResolvePropertyELResolver extends ELResolver {\n    @Override\n    public Class<?> getCommonPropertyType(ELContext context, Object base) {\n        return Object.class;\n    }\n\n    @Override\n    public Class<?> getType(ELContext context, Object base, Object property) {\n        return Object.class;\n    }\n\n    @Override\n    public Object getValue(ELContext context, Object base, Object property) {\n        if (base != null) {\n            throw new PropertyNotFoundException(\"Could not find property \" + property + \" in \" + base.getClass());\n        }\n        return null;\n    }\n\n    @Override\n    public boolean isReadOnly(ELContext context, Object base, Object property) {\n        return false;\n    }\n\n    @Override\n    public void setValue(ELContext context, Object base, Object property, Object value) {\n        throw new PropertyNotWritableException(\"Cannot write property: \" + property);\n    }\n}\n","sourceCodeStart":17,"sourceCodeEnd":50,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/CouldNotResolvePropertyELResolver.java#L17-L50","documentation":"Flowable's bundled EL resolver throws PropertyNotFoundException from getValue when an EL expression resolves a property against a non-null base object but no such property exists. It is a fallback resolver that fails any unresolved property lookup.","triggerScenarios":"Evaluating a UEL expression like ${myBean.someProperty} where myBean is non-null but does not expose someProperty, and no earlier ELResolver in the chain resolved the property.","commonSituations":"Typos in property names inside BPMN expression attributes or delegateExpression fields; renaming a JavaBean getter without updating process XML; using expressions against Maps/POJOs that lack the referenced key/field.","solutions":["Check the expression text for a typo in the property name","Verify the base bean class actually has a public getter for the property","If resolving against a Map, ensure the key exists before evaluation","Register a custom ELResolver earlier in the chain if the property should resolve dynamically"],"exampleFix":"// before (BPMN)\n<flowable:expression>${order.totlAmount}</flowable:expression>\n// after\n<flowable:expression>${order.totalAmount}</flowable:expression>","handlingStrategy":"validation","validationCode":"// Before evaluating: check the property exists on the bean\nboolean hasProperty = java.util.Arrays.stream(org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptors(bean.getClass()))\n    .anyMatch(d -> d.getName().equals(propertyName));\nif (!hasProperty) throw new IllegalStateException(\"Unknown property: \" + propertyName);","typeGuard":"static <T> T safeGet(Object base, String prop, Class<T> type) {\n  return type.cast(org.apache.commons.beanutils.PropertyUtils.getProperty(base, prop));\n}","tryCatchPattern":"try {\n  valueResolver.getValue(elContext, base, property);\n} catch (PropertyNotFoundException e) {\n  logger.warn(\"EL property not found: {} in {}\", property, base.getClass(), e);\n}","preventionTips":["Spell-check expressions in BPMN XML against bean getter names","Add tests that evaluate all expressions used in process definitions","Keep property renaming refactors paired with expression updates"],"tags":["el","expression-language","property-resolution","flowable"],"backgroundTag":"property-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}