You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by ss...@apache.org on 2013/11/19 13:51:54 UTC

svn commit: r1543409 - in /shindig/trunk/java/common/src: main/java/org/apache/shindig/protocol/conversion/BeanJsonConverter.java test/java/org/apache/shindig/protocol/conversion/BeanJsonConverterTest.java

Author: ssievers
Date: Tue Nov 19 12:51:54 2013
New Revision: 1543409

URL: http://svn.apache.org/r1543409
Log:
SHINDIG-1947 | Bridge methods should be ignored when finding property setter methods for JSON serialization | Patch from Andreas Kohn.  Thanks!

Modified:
    shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanJsonConverter.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanJsonConverterTest.java

Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanJsonConverter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanJsonConverter.java?rev=1543409&r1=1543408&r2=1543409&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanJsonConverter.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanJsonConverter.java Tue Nov 19 12:51:54 2013
@@ -48,6 +48,7 @@ import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
@@ -104,11 +105,12 @@ public class BeanJsonConverter implement
     JsonSerializer.append(buf, pojo);
   }
 
-  private static String getPropertyName(Method setter) {
+  @VisibleForTesting
+  protected static String getPropertyName(Method setter) {
     JsonProperty property = setter.getAnnotation(JsonProperty.class);
     if (property == null) {
       String name = setter.getName();
-      if (name.startsWith("set") && !Modifier.isStatic(setter.getModifiers())) {
+      if (name.startsWith("set") && !Modifier.isStatic(setter.getModifiers()) && !setter.isBridge()) {
         return name.substring(3, 4).toLowerCase() + name.substring(4);
       }
       return null;

Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanJsonConverterTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanJsonConverterTest.java?rev=1543409&r1=1543408&r2=1543409&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanJsonConverterTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanJsonConverterTest.java Tue Nov 19 12:51:54 2013
@@ -31,6 +31,7 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -46,6 +47,18 @@ public class BeanJsonConverterTest exten
     beanJsonConverter = new BeanJsonConverter(Guice.createInjector());
   }
 
+  public interface GenericInterface<T> {
+    void setT(T value);
+  }
+
+  public static class GenericObject implements GenericInterface<String> {
+    String value;
+
+    public void setT(String value) {
+      this.value = value;
+    }
+  }
+
   public static class TestObject {
     static String staticValue;
     String hello;
@@ -202,4 +215,12 @@ public class BeanJsonConverterTest exten
          ExtendableTestObject.class);
     assertTrue(data.isEmpty());
   }
+
+  @Test
+  public void testGetPropertyNameOfBridgeMethod() throws NoSuchMethodException, SecurityException {
+    Method bridgeSetter = GenericObject.class.getMethod("setT", Object.class);
+    assertNull(BeanJsonConverter.getPropertyName(bridgeSetter));
+    Method realSetter = GenericObject.class.getMethod("setT", String.class);;
+    assertEquals("t", BeanJsonConverter.getPropertyName(realSetter));
+  }
 }