flowable/flowable-engine · error · PropertyNotFoundException
error.property.base.null
Error message
error.property.base.null
What it means
AstProperty.getValueReference evaluates the prefix base object and requires it to be non-null to build a ValueReference. When the base is null it throws PropertyNotFoundException('error.property.base.null'), i.e. you tried to get a value reference on a property of a null object.
Solutions
- Initialize/populate the base variable before evaluating the expression.
- Use null-guarded expressions: ${person != null ? person.name : null} or null-safe resolver behavior.
- Fix the variable name/registration so the prefix resolves to the intended bean.
- Defer evaluation until the object graph is ready.
Example fix
// before
ValueReference vr = ve.getValueReference(context); // ${user.email}, user==null
// after
if (factory.createValueExpression(ctx, "${user}", Object.class).getValue(context) != null) {
ValueReference vr = ve.getValueReference(context);
} Defensive patterns
Strategy: validation
Validate before calling
Object base = factory.createValueExpression(ctx, "${user}", Object.class).getValue(context);
if (base == null) throw new IllegalStateException("Cannot get ValueReference: base 'user' is null"); Type guard
boolean hasNonNullBase(Bindings b, ELContext ctx, AstNode prefix) {
return prefix.eval(b, ctx) != null;
} Try / catch
try {
ValueReference vr = ve.getValueReference(context);
} catch (PropertyNotFoundException e) {
if (!e.getMessage().contains("base.null")) throw e;
return null; // handle missing base gracefully
} Prevention
- Resolve/populate the base object before obtaining ValueReferences
- Use null-safe conditional expressions in EL for optional objects
- Fail fast at model-preparation time when required beans are missing
When it happens
Trigger: getValueReference/ValueReference resolution (e.g. for setting or ELContext-based resolution) on expressions like ${person.name} where 'person' evaluates to null; chained navigation ${a.b.c} where an intermediate is null.
Common situations: Uninitialized beans/process variables; resolver returning null for a lookup key; expressions evaluated before the model is populated (e.g. early form rendering).
Related errors
- error.property.base.null
- Cannot coerce property to array index:
- Cannot find method with parameters in
- Cannot parse array index:
- Cannot write property
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/87147237e6751452.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/de/odysseus/el/tree/impl/ast/AstProperty.java:57
public AstProperty(AstNode prefix, boolean lvalue, boolean strict, boolean ignoreReturnType) {
this.prefix = prefix;
this.lvalue = lvalue;
this.strict = strict;
this.ignoreReturnType = ignoreReturnType;
}
protected abstract Object getProperty(Bindings bindings, ELContext context) throws ELException;
protected AstNode getPrefix() {
return prefix;
}
@Override
public ValueReference getValueReference(Bindings bindings, ELContext context) {
Object base = prefix.eval(bindings, context);
if (base == null) {
throw new PropertyNotFoundException(LocalMessages.get("error.property.base.null", prefix));
}
Object property = getProperty(bindings, context);
if (property == null && strict) {
throw new PropertyNotFoundException(LocalMessages.get("error.property.property.notfound", "null", base));
}
return new ValueReference(base, property);
}
@Override
public Object eval(Bindings bindings, ELContext context) {
Object base = prefix.eval(bindings, context);
if (base == null) {
return null;
}
Object property = getProperty(bindings, context);
if (property == null && strict) {
return null;
}View on GitHub (pinned to d6d39ce1c6)