Index: org/apache/el/parser/AstValue.java =================================================================== --- org/apache/el/parser/AstValue.java (revision 656429) +++ org/apache/el/parser/AstValue.java (working copy) @@ -129,10 +129,15 @@ Target t = getTarget(ctx); ctx.setPropertyResolved(false); ELResolver resolver = ctx.getELResolver(); - resolver.setValue(ctx, t.base, t.property, - // coerce to the expected type - ELSupport.coerceToType(value, - resolver.getType(ctx, t.base, t.property))); + + Class targetClass = resolver.getType(ctx, t.base, t.property); + + // value is not assignable so coerce to the expected type + if ((value == null && targetClass.isPrimitive()) || (value != null && !targetClass.isInstance(value))) { + value = ELSupport.coerceToType(value, resolver.getType(ctx, t.base, t.property)); + } + + resolver.setValue(ctx, t.base, t.property, value); } public MethodInfo getMethodInfo(EvaluationContext ctx, Class[] paramTypes)