Author: gk Date: Sat Nov 2 17:18:33 2013 New Revision: 1538231 URL: http://svn.apache.org/r1538231 Log: Enhanced Exclude Filter in GSONBuilderService.java. Removed synchronized attribute in serialization method in class Jackson2MapperService.java.
Modified: turbine/fulcrum/trunk/json/api/src/test/org/apache/fulcrum/json/TestClass.java turbine/fulcrum/trunk/json/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/GSONServiceTest.java turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java Modified: turbine/fulcrum/trunk/json/api/src/test/org/apache/fulcrum/json/TestClass.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/api/src/test/org/apache/fulcrum/json/TestClass.java?rev=1538231&r1=1538230&r2=1538231&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/api/src/test/org/apache/fulcrum/json/TestClass.java (original) +++ turbine/fulcrum/trunk/json/api/src/test/org/apache/fulcrum/json/TestClass.java Sat Nov 2 17:18:33 2013 @@ -1,5 +1,7 @@ package org.apache.fulcrum.json; + +import java.util.HashMap; import java.util.Map; public class TestClass @@ -10,7 +12,15 @@ public class TestClass /** Setup our default configurationFileName */ private String configurationName = "Config.xml"; - /** Setup our default parameterFileName */ + public Map<String, Object> getContainer() { + return container; + } + + public void setContainer(Map<String, Object> container) { + this.container = container; + } + + /** Setup our default parameterFileName */ private String name = null; public TestClass() @@ -20,6 +30,8 @@ public class TestClass public TestClass(String name) { this.name = name; + this.container = new HashMap<String, Object>(); + this.container.put("cf", configurationName); } public String getName() Modified: turbine/fulcrum/trunk/json/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java?rev=1538231&r1=1538230&r2=1538231&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java (original) +++ turbine/fulcrum/trunk/json/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java Sat Nov 2 17:18:33 2013 @@ -22,8 +22,10 @@ package org.apache.fulcrum.json.gson; import java.lang.reflect.Type; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.Collections; import java.util.Date; import java.util.Enumeration; +import java.util.HashSet; import java.util.Hashtable; import org.apache.avalon.framework.activity.Initializable; @@ -112,7 +114,7 @@ public class GSONBuilderService extends public <T> String serializeAllExceptFilter( Object src, Class<T> filterClass, String... filterAttr ) throws Exception { - return gson.addSerializationExclusionStrategy(exclude( filterClass) ).create().toJson( src ); + return gson.addSerializationExclusionStrategy(exclude( filterClass, filterAttr) ).create().toJson( src ); } public JsonService registerTypeAdapter( JsonSerializer serdeser, Type type) { @@ -199,29 +201,36 @@ public class GSONBuilderService extends } } - private ExclusionStrategy exclude(Class clazz) + private ExclusionStrategy exclude(Class clazz, String...filterAttrs) { return new ExclusionStrategy() { - private Class<?> excludedThisClass; + public Class<?> excludedThisClass; + public HashSet<String> excludedAttributes; - private ExclusionStrategy init(Class<?> excludedThisClass) { + private ExclusionStrategy init(Class<?> excludedThisClass, String... filterAttrs) { this.excludedThisClass = excludedThisClass; + if (filterAttrs != null) { + this.excludedAttributes = new HashSet<String>(filterAttrs.length); + Collections.addAll(this.excludedAttributes, filterAttrs); + } else + this.excludedAttributes = new HashSet<String>(); + return this; } @Override public boolean shouldSkipClass(Class<?> clazz) { - return excludedThisClass.equals(clazz); + return (excludedThisClass != null)? excludedThisClass.equals(clazz): false; } @Override public boolean shouldSkipField( FieldAttributes paramFieldAttributes ) { - // TODO Auto-generated method stub - return false; + //return paramFieldAttributes.getDeclaringClass() == excludedThisClass && excludesAttributes.contains(paramFieldAttributes.getName()); + return (!excludedAttributes.isEmpty())? this.excludedAttributes.contains(paramFieldAttributes.getName()): false; } - }.init( clazz ); + }.init( clazz, filterAttrs ); } Modified: turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/GSONServiceTest.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/GSONServiceTest.java?rev=1538231&r1=1538230&r2=1538231&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/GSONServiceTest.java (original) +++ turbine/fulcrum/trunk/json/gson/src/test/org/apache/fulcrum/json/gson/GSONServiceTest.java Sat Nov 2 17:18:33 2013 @@ -42,7 +42,7 @@ public class GSONServiceTest extends Bas { private JsonService sc = null; private final String preDefinedOutput = - "{\"configurationName\":\"Config.xml\",\"name\":\"mytest\"}"; + "{\"container\":{\"cf\":\"Config.xml\"},\"configurationName\":\"Config.xml\",\"name\":\"mytest\"}"; /** * Constructor for test. @@ -75,13 +75,38 @@ public class GSONServiceTest extends Bas assertEquals("Encryption failed ", TestClass.class, deson.getClass()); } - public void testSerializeExclude() throws Exception + public void testSerializeExclude00() throws Exception + { + String serJson = sc.serializeAllExceptFilter( new TestClass("mytest"), (Class)null, (String[])null ); + assertEquals("Encryption failed ", "{\"container\":{\"cf\":\"Config.xml\"},\"configurationName\":\"Config.xml\",\"name\":\"mytest\"}", serJson); + } + + public void testSerializeExcludeClass() throws Exception { String serJson = sc.serializeAllExceptFilter( new TestClass("mytest"), String.class, (String[])null ); + assertEquals("Encryption failed ", "{\"container\":{}}", serJson); + } + + public void testSerializeExcludeClassAndField() throws Exception + { + String serJson = sc.serializeAllExceptFilter( new TestClass("mytest"), String.class, "container" ); System.out.println("serJson:"+ serJson); assertEquals("Encryption failed ", "{}", serJson); } + public void testSerializeExcludeClassAndFields() throws Exception + { + String serJson = sc.serializeAllExceptFilter( new TestClass("mytest"), Map.class, "configurationName", "name" ); + assertEquals("Encryption failed ", "{}", serJson); + } + + public void testSerializeExcludeField() throws Exception + { + + String serJson = sc.serializeAllExceptFilter( new TestClass("mytest"), (Class)null, "configurationName" ); + assertEquals("Encryption failed ", "{\"container\":{\"cf\":\"Config.xml\"},\"name\":\"mytest\"}", serJson); + } + public void testSerializeDate() throws Exception { final SimpleDateFormat MMddyyyy = new SimpleDateFormat( "MM/dd/yyyy"); Modified: turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java?rev=1538231&r1=1538230&r2=1538231&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java (original) +++ turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java Sat Nov 2 17:18:33 2013 @@ -100,7 +100,7 @@ public class Jackson2MapperService exten String[] defaultTypeDefs = null; @Override - public synchronized String ser( Object src ) + public String ser( Object src ) throws Exception { if (filters.containsKey( src.getClass().getName() )) { @@ -165,7 +165,7 @@ public class Jackson2MapperService exten } @SuppressWarnings( "rawtypes" ) - public synchronized String withMixinModule( Object src, String name, Class target, Class mixin ) throws JsonProcessingException { + public String withMixinModule( Object src, String name, Class target, Class mixin ) throws JsonProcessingException { Module mx = new MixinModule( name, target, mixin ); getLogger().debug( "registering module "+ mx + " for: " + mixin); return mapper.registerModule( mx ).writer().writeValueAsString( src );