You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2016/12/21 13:35:08 UTC

svn commit: r1775415 - in /sling/trunk/bundles/api/src: main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java

Author: sseifert
Date: Wed Dec 21 13:35:08 2016
New Revision: 1775415

URL: http://svn.apache.org/viewvc?rev=1775415&view=rev
Log:
SLING-6420 ensure arrays if primitives are untouched by converter

Modified:
    sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java
    sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java

Modified: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java?rev=1775415&r1=1775414&r2=1775415&view=diff
==============================================================================
--- sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java (original)
+++ sling/trunk/bundles/api/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java Wed Dec 21 13:35:08 2016
@@ -46,16 +46,19 @@ public final class ObjectConverter {
             return null;
         }
         
-        // convert array elements individually
-        if (type.isArray()) {
-            return (T)convertToArray(obj, type.getComponentType());
-        }
-        
         // check if direct assignment is possible
         if (type.isAssignableFrom(obj.getClass())) {
+            if (obj.getClass().isArray() && Array.getLength(obj) == 0) {
+                return null;
+            }
             return (T)obj;
         }
         
+        // convert array elements individually
+        if (type.isArray()) {
+            return (T)convertToArray(obj, type.getComponentType());
+        }
+        
         // convert Calendar in Date and vice versa
         if (Calendar.class.isAssignableFrom(type) && obj instanceof Date) {
             return (T)DateUtils.toCalendar((Date)obj);

Modified: sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java?rev=1775415&r1=1775414&r2=1775415&view=diff
==============================================================================
--- sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java (original)
+++ sling/trunk/bundles/api/src/test/java/org/apache/sling/api/wrappers/impl/ObjectConverterTest.java Wed Dec 21 13:35:08 2016
@@ -21,6 +21,8 @@ package org.apache.sling.api.wrappers.im
 import static org.apache.sling.api.wrappers.impl.DateUtils.calendarToString;
 import static org.apache.sling.api.wrappers.impl.DateUtils.toCalendar;
 import static org.apache.sling.api.wrappers.impl.DateUtils.toDate;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertNull;
 
 import java.math.BigDecimal;
 import java.util.Calendar;
@@ -217,4 +219,12 @@ public class ObjectConverterTest {
         Convert.<Boolean,Date>from(BOOLEAN_1, BOOLEAN_2).toNull(Date.class).test();
     }
     
+    @Test
+    public void testPrimitiveByteArray() {
+        byte[] array = new byte[] { 0x01, 0x02, 0x03 };
+        assertArrayEquals(array, ObjectConverter.convert(array, byte[].class));
+        assertNull(ObjectConverter.convert(new byte[0], byte[].class));
+        assertNull(ObjectConverter.convert(null, byte[].class));
+    }
+    
 }