Author: markt
Date: Wed Oct 29 09:49:02 2014
New Revision: 1635081

URL: http://svn.apache.org/r1635081
Log:
When coercing an object to an array type in Expression Langauage, handle the 
case where the source object is an array of primitives.

Modified:
    tomcat/trunk/java/org/apache/el/lang/ELSupport.java
    tomcat/trunk/test/javax/el/TestELProcessor.java
    tomcat/trunk/test/javax/el/TesterBean.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/el/lang/ELSupport.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/lang/ELSupport.java?rev=1635081&r1=1635080&r2=1635081&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/lang/ELSupport.java (original)
+++ tomcat/trunk/java/org/apache/el/lang/ELSupport.java Wed Oct 29 09:49:02 2014
@@ -494,16 +494,18 @@ public class ELSupport {
             final Class<?> type) {
         // Note: Nested arrays will result in nested calls to this method.
 
+        // Note: Calling method has checked the obj is an array.
+
+        int size = Array.getLength(obj);
         // Cast the input object to an array (calling method has checked it is
         // an array)
-        Object[] array = (Object[]) obj;
         // Get the target type for the array elements
         Class<?> componentType = type.getComponentType();
         // Create a new array of the correct type
-        Object result = Array.newInstance(componentType, array.length);
+        Object result = Array.newInstance(componentType, size);
         // Coerce each element in turn.
-        for (int i = 0; i < array.length; i++) {
-            Array.set(result, i, coerceToType(array[i], componentType));
+        for (int i = 0; i < size; i++) {
+            Array.set(result, i, coerceToType(Array.get(obj, i), 
componentType));
         }
 
         return result;

Modified: tomcat/trunk/test/javax/el/TestELProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TestELProcessor.java?rev=1635081&r1=1635080&r2=1635081&view=diff
==============================================================================
--- tomcat/trunk/test/javax/el/TestELProcessor.java (original)
+++ tomcat/trunk/test/javax/el/TestELProcessor.java Wed Oct 29 09:49:02 2014
@@ -191,4 +191,21 @@ public class TestELProcessor {
         elp.eval("fn:test(null, null)");
         Assert.assertEquals("I", TesterFunctions.getCallList());
     }
+
+
+    @Test
+    public void testPrimitiveArray01() {
+        ELProcessor elp = new ELProcessor();
+        TesterBean bean01= new TesterBean("bean01");
+        elp.defineBean("bean01", bean01);
+        elp.defineBean("bean02", new TesterBean("bean02"));
+
+        Object result = 
elp.eval("bean02.setValueC(bean01.valueB);bean02.valueC");
+
+        Integer[] resultArray = (Integer[]) result;
+        Assert.assertEquals(bean01.getValueB().length, resultArray.length);
+        for (int i = 0; i < resultArray.length; i++) {
+            Assert.assertEquals(bean01.getValueB()[i], 
resultArray[i].intValue());
+        }
+    }
 }

Modified: tomcat/trunk/test/javax/el/TesterBean.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TesterBean.java?rev=1635081&r1=1635080&r2=1635081&view=diff
==============================================================================
--- tomcat/trunk/test/javax/el/TesterBean.java (original)
+++ tomcat/trunk/test/javax/el/TesterBean.java Wed Oct 29 09:49:02 2014
@@ -19,6 +19,7 @@ package javax.el;
 public class TesterBean {
 
     private String name;
+    private Integer[] valueC;
 
     public TesterBean(String name) {
         this.name = name;
@@ -40,4 +41,16 @@ public class TesterBean {
     public String getValueA() throws Exception {
         throw new Exception();
     }
+
+    public int[] getValueB() {
+        return new int[] {1,2,3,4,5};
+    }
+
+    public void setValueC(Integer[] values) {
+        valueC = values;
+    }
+
+    public Integer[] getValueC() {
+        return valueC;
+    }
 }

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1635081&r1=1635080&r2=1635081&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Oct 29 09:49:02 2014
@@ -241,6 +241,11 @@
         <code>$</code> and <code>#</code> when processing literal expressions 
in
         expression language. (markt)
       </fix>
+      <fix>
+        When coercing an object to an array type in Expression Langauage, 
handle
+        the case where the source object is an array of primitives.
+        (markt/kkolinko)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Cluster">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to