Author: gk
Date: Wed Jun 10 09:28:02 2015
New Revision: 1684614
URL: http://svn.apache.org/r1684614
Log:
- adding log support for SimpleNameIntrospector.java
- javadoc update
- added test
Modified:
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/Jackson2MapperService.java
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java
Modified:
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java?rev=1684614&r1=1684613&r2=1684614&view=diff
==============================================================================
---
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
(original)
+++
turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java
Wed Jun 10 09:28:02 2015
@@ -157,7 +157,7 @@ public interface JsonService {
* @param src
* The Java object to serialize
* @param filterClass
- * By default filterClass is the key in the filter object
cached.
+ * By default filterClass is a) the class to be filtered
(required for filtering list elements) b) the key in the filter object cached.
*
* @param cleanFilter
* The Boolean value, not null. If it is <code>true</code>,
cleans cache and the custom filter after serialization.
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=1684614&r1=1684613&r2=1684614&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
Wed Jun 10 09:28:02 2015
@@ -31,6 +31,7 @@ import org.apache.avalon.framework.confi
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.fulcrum.json.JsonService;
import org.apache.fulcrum.json.jackson.filters.CustomModuleWrapper;
@@ -361,7 +362,9 @@ public class Jackson2MapperService exten
/**
*
* @param src The source Object to be filtered.
- * @param filterClass Explicit class as a class filter, which is only used
as a filter in {@link #serializeAllExceptFilter(Object, Class, String...)}. In
all other cases this is set to src objects´s source class to become the key in
the filter object cache.
+ * @param filterClass This Class array contains at least one element. If
no class is provided it is the class type of the source object.
+ * Setting a class filter explicitely should only used as a filter in
{@link #serializeAllExceptFilter(Object, Class, String...)}.
+ * In any case the filterClass is to become the key in the filter object
cache.
* This is because, no use case was found to include just one class in a
filter, e.g. in @link {@link #serializeOnlyFilter(Object, Class, Boolean,
String...)}, i.e. just serializing only a provided filter class.
* @param pf Expecting a property filter from e.g @link {@link
SimpleBeanPropertyFilter}.
* @param clean if <code>true</code> does not reuse the filter object (no
cashing).
@@ -379,7 +382,7 @@ public class Jackson2MapperService exten
String serialized = ser(src, filter, clean);
if (!cacheFilters || clean) {
if (src != null) {
- cacheService.removeFilter(src.getClass(), excludeType);
+ cacheService.removeFilter(src.getClass(), excludeType);//
reset required, just use filteredClasses[0]?
} else if (filterClasses.length >0) {
cacheService.removeFilter(filterClasses[0], excludeType);
}
@@ -391,9 +394,10 @@ public class Jackson2MapperService exten
private <T> FilterProvider checkFilter(PropertyFilter pf,
Class rootFilterClass, Class<T>[] filterClasses, Boolean
excludeType) {
SimpleFilterProvider filter = null;
- if (filterClasses == null ) {
+ if (filterClasses == null ) { // never happens actually
filter = retrieveFilter(pf, new Class[]{ rootFilterClass },
excludeType);
} else {
+ // this is the case if we have no explicit class filter
if (filterClasses.length > 0 &&
!rootFilterClass.equals(filterClasses[0])) {
filter = retrieveFilter(pf, rootFilterClass, filterClasses,
excludeType );
} else {
@@ -403,7 +407,8 @@ public class Jackson2MapperService exten
return filter;
}
- private <T> SimpleFilterProvider retrieveFilter(PropertyFilter pf,
Class<T> cachefilterClass, Class<T>[] filterClasses, Boolean excludeType ) {
+ private <T> SimpleFilterProvider retrieveFilter(PropertyFilter pf,
Class<T> cachefilterClass,
+ Class<T>[] filterClasses, Boolean excludeType ) {
SimpleFilterProvider filter = null;
if (pf != null) {
filter = new SimpleFilterProvider();
@@ -588,6 +593,21 @@ public class Jackson2MapperService exten
} else {
mapper.setAnnotationIntrospector(primary);
}
+
+ if (primary instanceof LogEnabled)
+ {
+
((LogEnabled)primary).enableLogging(getLogger().getChildLogger(primary.getClass().getSimpleName()));
+ getLogger().info(
+ "setting primary introspector logger: "
+ + primary.getClass().getSimpleName());
+ }
+ if (secondary instanceof LogEnabled)
+ {
+
((LogEnabled)secondary).enableLogging(getLogger().getChildLogger(secondary.getClass().getSimpleName()));
+ getLogger().info(
+ "setting secondary introspector logger: "
+ + primary.getClass().getSimpleName());
+ }
if (features != null) {
Enumeration<String> enumFeatureKey = features.keys();
Modified:
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java?rev=1684614&r1=1684613&r2=1684614&view=diff
==============================================================================
---
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
(original)
+++
turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/SimpleNameIntrospector.java
Wed Jun 10 09:28:02 2015
@@ -23,6 +23,9 @@ import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+
import com.fasterxml.jackson.databind.introspect.Annotated;
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
import com.fasterxml.jackson.databind.introspect.NopAnnotationIntrospector;
@@ -39,7 +42,7 @@ import com.fasterxml.jackson.databind.se
* @version $Id$
*
*/
-public class SimpleNameIntrospector extends NopAnnotationIntrospector {
+public class SimpleNameIntrospector extends NopAnnotationIntrospector
implements LogEnabled {
/**
*
*/
@@ -49,12 +52,13 @@ public class SimpleNameIntrospector exte
private List<String> externalFilterExcludeClasses = new
CopyOnWriteArrayList<String>();
private List<String> externalFilterIncludeClasses = new
CopyOnWriteArrayList<String>();
private AtomicBoolean isExludeType = new AtomicBoolean(false);
+
+ private Logger logger;
/**
* Filtering on method types.
*
*/
- @Override
public Boolean isIgnorableType(AnnotatedClass ac) {
Boolean isIgnorable = super.isIgnorableType(ac);
if (isIgnorable == null || !isIgnorable) {
@@ -83,7 +87,6 @@ public class SimpleNameIntrospector exte
* {@link #filteredClasses} contains the class provided. The
* filter itself currently is {@link SimpleFilterProvider}.
*/
- @Override
public Object findFilterId(Annotated ac) {
Object id = super.findFilterId(ac);
// Let's default to current behavior if annotation is found:
@@ -95,17 +98,20 @@ public class SimpleNameIntrospector exte
if (!filteredClasses.isEmpty()
&& filteredClasses.contains(targetClazz)
) {
+ logger.debug("filter applying to " +name);
id = name;
} else {
// check if target class is a child from filter class -> apply
filter
for (Class<?> filterClazz : filteredClasses) {
// the currently checked class /targetClazz could be child
to the filter class /filterClazz -> filter child
if (filterClazz.isAssignableFrom(targetClazz)) {
+ logger.debug("filter applying to parent " +filterClazz
+" matching child class "+name );
id = name;
break;
}
// the currently checked class /targetClazz could be parent
to the filter class /filterClazz -> filter parent
if (targetClazz.isAssignableFrom(filterClazz)) {
+ logger.debug("filter applying to child "
+filterClazz+" matching parent class "+name);
id = name;
break;
}
@@ -185,5 +191,9 @@ public class SimpleNameIntrospector exte
public void setIsExludeType(boolean isExludeType) {
this.isExludeType.getAndSet(isExludeType);
}
+ @Override
+ public void enableLogging(Logger logger) {
+ this.logger = logger;
+ }
}
\ No newline at end of file
Modified:
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java?rev=1684614&r1=1684613&r2=1684614&view=diff
==============================================================================
---
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java
(original)
+++
turbine/fulcrum/trunk/json/jackson2/src/test/org/apache/fulcrum/json/jackson/DefaultServiceTest.java
Wed Jun 10 09:28:02 2015
@@ -27,6 +27,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.fulcrum.json.JsonService;
import org.apache.fulcrum.json.Rectangle;
import org.apache.fulcrum.json.TestClass;
@@ -56,6 +57,7 @@ public class DefaultServiceTest extends
}
public void setUp() throws Exception {
+ setLogLevel(ConsoleLogger.LEVEL_DEBUG);
super.setUp();
sc = (JsonService) this.lookup(JsonService.ROLE);
}
@@ -251,7 +253,7 @@ public class DefaultServiceTest extends
rectangle);
}
- public void testSerializeAllExceptaANDWithOnlyFilter2() throws Exception {
+ public void testSerializeAllExceptANDWithOnlyFilter2() throws Exception {
String serJson = sc.serializeAllExceptFilter(new
TestClass("mytest"),"configurationName");
assertEquals("Serialization failed ",
@@ -272,6 +274,20 @@ public class DefaultServiceTest extends
rectangle);
}
+ public void testSerializeBeanWithOnlyFilter() throws Exception {
+ Bean bean = new BeanChild();
+ bean.setAge(1);bean.setName("bean1");
+ assertEquals("{\"name\":\"bean1\"}",sc.serializeOnlyFilter(bean,
true,"name"));
+ assertEquals("{\"name\":\"bean1\"}",sc.serializeOnlyFilter(bean,
Bean.class, true,"name")); // parent filter
+ assertEquals("{\"name\":\"bean1\"}",sc.serializeOnlyFilter(bean,
BeanChild.class, true,"name"));
+ bean = new Bean();
+ bean.setAge(0);bean.setName("bean0");
+ assertEquals("{\"name\":\"bean0\"}",sc.serializeOnlyFilter(bean,
true,"name"));
+ assertEquals("{\"name\":\"bean0\"}",sc.serializeOnlyFilter(bean,
Bean.class, true,"name"));
+ assertEquals("{\"name\":\"bean0\"}",sc.serializeOnlyFilter(bean,
BeanChild.class, true,"name"));// child filter
+
+ }
+
public void testSerializeCollectionWithOnlyFilterAndParentClass() throws
Exception {
List<BeanChild> beanList = new ArrayList<BeanChild>();