Author: markt
Date: Thu Sep 12 10:06:16 2013
New Revision: 1522512
URL: http://svn.apache.org/r1522512
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55552
Separate the return type (which must be an object) from the expected type which
may be a primitive. This is necessary for EL 3.0 onwards as the default
handling of nulls is now different for primitives and objects. The expression
engine needs to know what the true expected type is in order to correctly
coerce the result to the right type.
Modified:
tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java
Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java?rev=1522512&r1=1522511&r2=1522512&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java Thu Sep 12
10:06:16 2013
@@ -357,32 +357,33 @@ public class JspUtil {
* Determine whether to use the expected type's textual name or, if
it's
* a primitive, the name of its correspondent boxed type.
*/
- String targetType = expectedType.getCanonicalName();
+ String returnType = expectedType.getCanonicalName();
+ String targetType = returnType;
String primitiveConverterMethod = null;
if (expectedType.isPrimitive()) {
if (expectedType.equals(Boolean.TYPE)) {
- targetType = Boolean.class.getName();
+ returnType = Boolean.class.getName();
primitiveConverterMethod = "booleanValue";
} else if (expectedType.equals(Byte.TYPE)) {
- targetType = Byte.class.getName();
+ returnType = Byte.class.getName();
primitiveConverterMethod = "byteValue";
} else if (expectedType.equals(Character.TYPE)) {
- targetType = Character.class.getName();
+ returnType = Character.class.getName();
primitiveConverterMethod = "charValue";
} else if (expectedType.equals(Short.TYPE)) {
- targetType = Short.class.getName();
+ returnType = Short.class.getName();
primitiveConverterMethod = "shortValue";
} else if (expectedType.equals(Integer.TYPE)) {
- targetType = Integer.class.getName();
+ returnType = Integer.class.getName();
primitiveConverterMethod = "intValue";
} else if (expectedType.equals(Long.TYPE)) {
- targetType = Long.class.getName();
+ returnType = Long.class.getName();
primitiveConverterMethod = "longValue";
} else if (expectedType.equals(Float.TYPE)) {
- targetType = Float.class.getName();
+ returnType = Float.class.getName();
primitiveConverterMethod = "floatValue";
} else if (expectedType.equals(Double.TYPE)) {
- targetType = Double.class.getName();
+ returnType = Double.class.getName();
primitiveConverterMethod = "doubleValue";
}
}
@@ -408,7 +409,7 @@ public class JspUtil {
targetType = toJavaSourceType(targetType);
StringBuilder call = new StringBuilder(
"("
- + targetType
+ + returnType
+ ") "
+
"org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate"
+ "(" + Generator.quote(expression) + ", " + targetType
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]