{"record":{"id":"2999c82e9fef2302","repo":"Activiti/Activiti","slug":"cannot-find-property-property","errorCode":null,"errorMessage":"Cannot find property {property}","messagePattern":"Cannot find property (.+?)","errorType":"exception","errorClass":"PropertyNotFoundException","httpStatus":null,"severity":"error","filePath":"activiti-core-common/activiti-juel-jakarta/src/main/java/org/activiti/core/el/juel/util/RootPropertyResolver.java","lineNumber":79,"sourceCode":"        context.setPropertyResolved(isResolvable(base) && property instanceof String);\n        return context.isPropertyResolved();\n    }\n\n    @Override\n    public Class<?> getCommonPropertyType(ELContext context, Object base) {\n        return isResolvable(context) ? String.class : null;\n    }\n\n    @Override\n    public Class<?> getType(ELContext context, Object base, Object property) {\n        return resolve(context, base, property) ? Object.class : null;\n    }\n\n    @Override\n    public Object getValue(ELContext context, Object base, Object property) {\n        if (resolve(context, base, property)) {\n            if (!isProperty((String) property)) {\n                throw new PropertyNotFoundException(\"Cannot find property \" + property);\n            }\n            return getProperty((String) property);\n        }\n        return null;\n    }\n\n    @Override\n    public boolean isReadOnly(ELContext context, Object base, Object property) {\n        return resolve(context, base, property) ? readOnly : false;\n    }\n\n    @Override\n    public void setValue(ELContext context, Object base, Object property, Object value)\n        throws PropertyNotWritableException {\n        if (resolve(context, base, property)) {\n            if (readOnly) {\n                throw new PropertyNotWritableException(\"Resolver is read only!\");\n            }","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/Activiti/Activiti/blob/56435b1a97deeafdc09dd40074b056c89fba5a8a/activiti-core-common/activiti-juel-jakarta/src/main/java/org/activiti/core/el/juel/util/RootPropertyResolver.java#L61-L97","documentation":"RootPropertyResolver resolves top-level identifiers in JUEL expressions against a map of root properties. When resolve() marks the property as handled but no property with that name exists (and no null-property was registered), getValue throws PropertyNotFoundException.","triggerScenarios":"Evaluating an EL expression like ${unknown} where 'unknown' is not a registered root property; the resolver accepted the (null base, property) resolution but isProperty((String) property) returned false.","commonSituations":"Typos in property names inside process expressions; a root property registered under a different name or removed; expression evaluation in a fresh resolver that never had the property set.","solutions":["Register the missing property via setProperty(\"name\", value) or the resolver constructor map before evaluating.","Correct the property name in the EL expression to match a registered root property.","If lookups may be optional, wrap resolution logic so undefined properties return null instead of resolving through this resolver."],"exampleFix":"// before\nresolver.getValue(ctx, null, \"customer\"); // PropertyNotFoundException\n\n// after\nresolver.setProperty(\"customer\", customerObj);\nObject v = resolver.getValue(ctx, null, \"customer\");","handlingStrategy":"validation","validationCode":"if (!resolver.isProperty(propertyName)) { throw new IllegalArgumentException(\"Unknown root property: \" + propertyName); }","typeGuard":null,"tryCatchPattern":"try { return resolver.getValue(ctx, null, name); } catch (PropertyNotFoundException e) { log.warn(\"Missing root property {}\", name); return null; }","preventionTips":["Register all root properties before evaluating expressions.","Keep property names in constants shared between registration and expressions.","Validate expression identifiers against the resolver in tests."],"tags":["el","juel","property-not-found","expression-language"],"backgroundTag":"resource-not-found","analyzedSha":"56435b1a97deeafdc09dd40074b056c89fba5a8a","analyzedAt":"2026-09-09T21:00:06.703Z","contentChangedAt":"2026-09-09T21:00:06.703Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}