Author: painter Date: Mon Nov 5 17:43:51 2018 New Revision: 1845825 URL: http://svn.apache.org/viewvc?rev=1845825&view=rev Log: Fix/update javadocs and addressed a couple findbug performance issues in Jackson2MapperService
Modified: turbine/fulcrum/trunk/json/api/src/java/org/apache/fulcrum/json/JsonService.java turbine/fulcrum/trunk/json/api/src/site/site.xml turbine/fulcrum/trunk/json/gson/src/java/org/apache/fulcrum/json/gson/GSONBuilderService.java turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CustomModule.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/filters/CustomModuleWrapper.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=1845825&r1=1845824&r2=1845825&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 Mon Nov 5 17:43:51 2018 @@ -23,8 +23,8 @@ import java.text.DateFormat; import java.util.Collection; /** - * This class defines custom methods needed to serialize and deserialize and helper - * methods if needed. + * This class defines custom methods needed to serialize and deserialize and + * helper methods if needed. * * Some methods expect a class parameter. * @@ -37,238 +37,266 @@ import java.util.Collection; * @version $Id$ */ public interface JsonService { - /** Avalon Identifier **/ - String ROLE = JsonService.class.getName(); - - String SERVICE_NAME = ROLE; - - /** - * Serializes a Java object - * - * @param src - * the java object to be serialized, not null. - * - * @return JSON string - * - * @throws Exception - * if JSON serialization fails - */ - String ser(Object src) throws Exception; - - /** - * @param src - * the java object to be serialized, not null. - * @param cleanCache a boolean value, not null. - * If <code>true</code>, try to refresh cache after serialization - * - */ - String ser(Object src, Boolean cleanCache) throws Exception; - - /** - * Serializes a Java object - * - * @param src - * The Java object to be serialized - * @param type - * the Java Type, which should be used for the provided object . - * - * @return JSON string - * - * @throws Exception - * If JSON serialization fails - */ - <T> String ser(Object src, Class<T> type) throws Exception; - - /** - * - * @param src - * @param type - * @param cleanCache - * If <code>true</code>, try to clean cache after serialization - * - * For other attributes @see {@link #ser(Object, Class)} - */ - <T> String ser(Object src, Class<T> type, Boolean cleanCache) throws Exception; - - /** - * Deserializing a JSON string - * - * @param src - * the JSON string to be deserialized - * @param type - * the Java Type to be used as a class - * - * @return the Java Object - * - * @throws Exception - * if JSON deserialization fails - */ - <T> T deSer(String src, Class<T> type) throws Exception; - - /** - * This is to deserialize collections. Depending on the implementation either both collectiontype and elementType is needed or - * the elementType will be derived from the typed collectiontype. - * - * @param json - * The JSON string to be deserialized - * @param collectionType - * It could be just the collection or the typed collection. It may then be used to get the type for element type too. - * Cft. implementation tests for more details (GSON). - * @param elementType - * The element type. This is need in any case to assure the generic checking. - * @return the generated Java Collection. - * @throws Exception - */ - <T> Collection<T> deSerCollection(String json, Object collectionType, Class<T> elementType) - throws Exception; - - /** - * Custom method without caching. Caching is set to <code>false</code> for this method call. - * @see #serializeOnlyFilter(Object, Class, Boolean, String...). - * - * <code>refreshFilter</code> is set to <code>true</code> for this method call. - */ - public String serializeOnlyFilter(Object src, - String... filterAttr) throws Exception; - - /** - * Custom method. Caching key is derived from param src object class. - * @see #serializeOnlyFilter(Object, Class, Boolean, String...). - * - * @param src - * The Java object to serialize - * @param cleanFilter - * The Boolean value, not null. If it is <code>true</code>, cleans cache and the custom filter after serialization. - * - * <code>refreshFilter</code> is set to <code>true</code> for this method call. - */ - public String serializeOnlyFilter(Object src, Boolean cleanFilter, - String... filterAttr) throws Exception; - - /** - * @see #serializeOnlyFilter(Object, Class, Boolean, String...). - * - * Caching is set to <code>false</code> for this method call. - */ - public <T> String serializeOnlyFilter(Object src, Class<T> filterClass, - String... filterAttr) throws Exception; - - /** - * Serialize only object properties where filter attributes are provided. If no filter is set, no attributes should be returned. - * - * @param src - * The Java object to serialize - * @param filterClass - * 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. - * - * @param filterAttr - * The class bean attributes which should be serialized - * - * @return JSON string - * - * @throws Exception - * If JSON serialization or filter registration fails - */ - public <T> String serializeOnlyFilter(Object src, Class<T> filterClass, Boolean cleanFilter, - String... filterAttr) throws Exception; - - /** - * Serialize all object properties excluding provided filters attributes. If no filter is set, all attributes should be returned. - * - * @param src - * The Java object to serialize. By default the filtering is applied for this class. By default the class of the src object is the key for the filter object cached. - * @param filterClass - * The class, which should be filtered out, if found as a property type. - * @param cleanFilter - * If <code>true </code> cleans filter (clean cache and custom filter for this filterClass) after serialization. - * @param filterAttr - * The bean attributes which should not be serialized - * - * @return JSON string - * - * @throws Exception - * If JSON serialization or filter registration fails - */ - public <T> String serializeAllExceptFilter(Object src, - Class<T> filterClass, Boolean cleanFilter, String... filterAttr) throws Exception; - - /** - * Class Filter is derived from param src object class. - * <code>refreshFilter</code> is set to <code>false</code> for this method call. - * - * @see #serializeAllExceptFilter(Object, Class, Boolean, String...) - * - * <code>refreshFilter</code> is <code>false</code>. - */ - public <T> String serializeAllExceptFilter(Object src, - Class<T> filterClass, String... filterAttr) throws Exception; - - /** - * Class Filter is derived from param src object class. - * - * @see #serializeAllExceptFilter(Object, Class, Boolean, String...) - */ - public String serializeAllExceptFilter(Object src, - Boolean cleanFilter, String... filterAttr) throws Exception; - - /** - * @see #serializeAllExceptFilter(Object, Class, Boolean, String...) - */ - public String serializeAllExceptFilter(Object src, - String... filterAttr) throws Exception; - - /** - * Adds an adapter (mixin, serializer,..) for the target class depending on - * the JsonService implementation. - * Cft. to {@link #addAdapter(String, Class, Object)} - * - * @param name - * The name of the adapter - * @param target - * The target class for this adapter - * @param mixin - * The adapter/mixin for the target class - * - * @return the JsonService instance - * - * @throws Exception - * If adapter registration fails - */ - public JsonService addAdapter(String name, Class target, Class mixin) - throws Exception; - - /** - * Add an adapter (mixin, serializer,..) for the target class depending on - * the JsonService implementation. Adapters could by default not deregistered. If you want - * to get rid of them, you may try to reinit the service (or overwrite with the same target type, depending on - * implementation) - * - * @param name - * The name of the adapter - * @param target - * The target class for this adapter - * @param mixin - * The adapter/mixin for the target object - * (module/serializer/deserializer) - * - * @return A JsonService instance - * - * @throws Exception - * if adapter registration fails - */ - public JsonService addAdapter(String name, Class target, Object mixin) - throws Exception; - - /** - * @param df - * The {@link DateFormat} to be used by the JsonService, not null. - * - * It could be provided by component configuration too. - * - */ - public void setDateFormat(final DateFormat df); + /** Avalon Identifier **/ + String ROLE = JsonService.class.getName(); + + String SERVICE_NAME = ROLE; + + /** + * Serializes a Java object + * + * @param src the java object to be serialized, not null. + * + * @return JSON string + * + * @throws Exception if JSON serialization fails + */ + String ser(Object src) throws Exception; + + /** + * @param src the java object to be serialized, not null. + * @param cleanCache a boolean value, not null. If <code>true</code>, try to + * refresh cache after serialization + * @return serialized object + * @throws Exception generic exception + */ + String ser(Object src, Boolean cleanCache) throws Exception; + + /** + * Serializes a Java object + * + * @param src The Java object to be serialized + * @param type the Java Type, which should be used for the provided object + * @param <T> The class type + * @return JSON string + * @throws Exception If JSON serialization fails + */ + <T> String ser(Object src, Class<T> type) throws Exception; + + /** + * Serialize an object + * + * @param src The source object + * @param type The class type of the object + * @param <T> class type of the object + * @param cleanCache If <code>true</code>, try to clean cache after + * serialization + * + * For other attributes @see {@link #ser(Object, Class)} + * + * @return the serialized class + * + * @throws Exception if the JSON serialization fails + */ + <T> String ser(Object src, Class<T> type, Boolean cleanCache) throws Exception; + + /** + * Deserializing a JSON string + * + * @param src the JSON string to be deserialized + * @param type the Java Type to be used as a class + * @param <T> class type of the object + * @return the Java Object + * + * @throws Exception if JSON deserialization fails + */ + <T> T deSer(String src, Class<T> type) throws Exception; + + /** + * This is to deserialize collections. Depending on the implementation either + * both collectiontype and elementType is needed or the elementType will be + * derived from the typed collectiontype. + * + * @param json The JSON string to be deserialized + * @param collectionType It could be just the collection or the typed + * collection. It may then be used to get the type for + * element type too. Cft. implementation tests for more + * details (GSON). + * @param elementType The element type. This is need in any case to assure + * the generic checking. + * @param <T> class type of the object + * @return the generated Java Collection. + * @throws Exception if serialize collection fails + */ + <T> Collection<T> deSerCollection(String json, Object collectionType, Class<T> elementType) throws Exception; + + /** + * Custom method without caching. Caching is set to <code>false</code> for this + * method call. + * + * @see #serializeOnlyFilter(Object, Class, Boolean, String...) + * + * <code>refreshFilter</code> is set to <code>true</code> for this method + * call. + * + * @param src the source object + * @param filterAttr filter attributes + * @return JSON string + * @throws Exception if fails + */ + public String serializeOnlyFilter(Object src, String... filterAttr) throws Exception; + + /** + * Custom method. Caching key is derived from param src object class. + * + * @see #serializeOnlyFilter(Object, Class, Boolean, String...) + * + * @param src The Java object to serialize + * @param cleanFilter The Boolean value, not null. If it is <code>true</code>, + * cleans cache and the custom filter after serialization. + * + * <code>refreshFilter</code> is set to <code>true</code> for + * this method call. + * + * @param filterAttr filter attributes + * @return JSON string + * @throws Exception if fails + */ + public String serializeOnlyFilter(Object src, Boolean cleanFilter, String... filterAttr) throws Exception; + + /** + * @see #serializeOnlyFilter(Object, Class, Boolean, String...) + * Caching is set to <code>false</code> for this method call. + * + * @param src The Java object to serialize + * @param filterClass The filter class + * @param <T> class type of the object + * @param filterAttr filter attributes + * @return JSON string + * @throws Exception if fails + */ + public <T> String serializeOnlyFilter(Object src, Class<T> filterClass, String... filterAttr) throws Exception; + + /** + * Serialize only object properties where filter attributes are provided. If no + * filter is set, no attributes should be returned. + * + * @param src The Java object to serialize + * @param filterClass By default filterClass is a) the class to be filtered + * (required for filtering list elements) b) the key in the + * filter object cached. + * @param <T> class type of the object + * @param cleanFilter The Boolean value, not null. If it is <code>true</code>, + * cleans cache and the custom filter after serialization. + * + * @param filterAttr The class bean attributes which should be serialized + * + * @return JSON string + * + * @throws Exception If JSON serialization or filter registration fails + */ + public <T> String serializeOnlyFilter(Object src, Class<T> filterClass, Boolean cleanFilter, String... filterAttr) + throws Exception; + + /** + * Serialize all object properties excluding provided filters attributes. If no + * filter is set, all attributes should be returned. + * + * @param src The Java object to serialize. By default the filtering is + * applied for this class. By default the class of the src + * object is the key for the filter object cached. + * @param filterClass The class, which should be filtered out, if found as a + * property type. + * @param <T> class type of the object + * @param cleanFilter If <code>true </code> cleans filter (clean cache and + * custom filter for this filterClass) after serialization. + * @param filterAttr The bean attributes which should not be serialized + * + * @return JSON string + * + * @throws Exception If JSON serialization or filter registration fails + */ + public <T> String serializeAllExceptFilter(Object src, Class<T> filterClass, Boolean cleanFilter, + String... filterAttr) throws Exception; + + /** + * Class Filter is derived from param src object class. + * <code>refreshFilter</code> is set to <code>false</code> for this method call. + * + * @see #serializeAllExceptFilter(Object, Class, Boolean, String...) + * + * <code>refreshFilter</code> is <code>false</code>. + * + * @param src The Java object to serialize. By default the filtering is + * applied for this class. By default the class of the src + * object is the key for the filter object cached. + * @param <T> class type of the object + * @param filterClass The class, which should be filtered out, if found as a + * property type. + * + * @param filterAttr The bean attributes which should not be serialized + * @return JSON string + * @throws Exception If JSON serialization or filter registration fails + */ + public <T> String serializeAllExceptFilter(Object src, Class<T> filterClass, String... filterAttr) throws Exception; + + /** + * Class Filter is derived from param src object class. + * + * @see #serializeAllExceptFilter(Object, Class, Boolean, String...) + * + * @param src The Java object to serialize. By default the filtering is + * applied for this class. By default the class of the src + * object is the key for the filter object cached. + * + * @param cleanFilter If <code>true </code> cleans filter (clean cache and + * custom filter for this filterClass) after serialization. + * + * @param filterAttr The bean attributes which should not be serialized + * @return JSON string + * @throws Exception If JSON serialization or filter registration fails + */ + public String serializeAllExceptFilter(Object src, Boolean cleanFilter, String... filterAttr) throws Exception; + + /** + * @see #serializeAllExceptFilter(Object, Class, Boolean, String...) + * @param src The Java object to serialize. By default the filtering is + * applied for this class. By default the class of the src + * object is the key for the filter object cached. + * + * @param filterAttr The bean attributes which should not be serialized + * @return JSON string + * @throws Exception If JSON serialization or filter registration fails + */ + public String serializeAllExceptFilter(Object src, String... filterAttr) throws Exception; + + /** + * Adds an adapter (mixin, serializer,..) for the target class depending on the + * JsonService implementation. Cft. to + * {@link #addAdapter(String, Class, Object)} + * + * @param name The name of the adapter + * @param target The target class for this adapter + * @param mixin The adapter/mixin for the target class + * + * @return the JsonService instance + * + * @throws Exception If adapter registration fails + */ + public JsonService addAdapter(String name, Class target, Class mixin) throws Exception; + + /** + * Add an adapter (mixin, serializer,..) for the target class depending on the + * JsonService implementation. Adapters could by default not deregistered. If + * you want to get rid of them, you may try to reinit the service (or overwrite + * with the same target type, depending on implementation) + * + * @param name The name of the adapter + * @param target The target class for this adapter + * @param mixin The adapter/mixin for the target object + * (module/serializer/deserializer) + * + * @return A JsonService instance + * + * @throws Exception if adapter registration fails + */ + public JsonService addAdapter(String name, Class target, Object mixin) throws Exception; + + /** + * @param df The {@link DateFormat} to be used by the JsonService, not null. + * It could be provided by component configuration too. + * + */ + public void setDateFormat(final DateFormat df); } Modified: turbine/fulcrum/trunk/json/api/src/site/site.xml URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/api/src/site/site.xml?rev=1845825&r1=1845824&r2=1845825&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/api/src/site/site.xml (original) +++ turbine/fulcrum/trunk/json/api/src/site/site.xml Mon Nov 5 17:43:51 2018 @@ -22,7 +22,8 @@ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd" name="Fulcrum JSON API"> -<body> +<body> + <menu ref="reports"></menu> </body> </project> 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=1845825&r1=1845824&r2=1845825&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 Mon Nov 5 17:43:51 2018 @@ -209,16 +209,19 @@ public class GSONBuilderService extends } /** - * Alternative method to calling {@link #gson#registerTypeAdapter(Object, Type)}. + * Alternative method to calling {@link #registerTypeAdapter(Object, Type)} * Note: Always use either this direct format call or the other adapter register call, * otherwise inconsistencies may occur! * - * @param dformat + * @param dfStr date format string */ public void setDateFormat(final String dfStr) { gson.setDateFormat(dfStr); } + /* (non-Javadoc) + * @see org.apache.fulcrum.json.JsonService#setDateFormat(java.text.DateFormat) + */ @Override public void setDateFormat(final DateFormat df) { DateTypeAdapter dateTypeAdapter = new DateTypeAdapter(); @@ -233,6 +236,9 @@ public class GSONBuilderService extends // return gson.create().toJson( src ); } + /* (non-Javadoc) + * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration) + */ @Override public void configure(Configuration conf) throws ConfigurationException { @@ -264,6 +270,9 @@ public class GSONBuilderService extends } } + /* (non-Javadoc) + * @see org.apache.avalon.framework.activity.Initializable#initialize() + */ @Override public void initialize() throws Exception { gson = new GsonBuilder(); @@ -376,6 +385,11 @@ public class GSONBuilderService extends }.init(clazz, filterAttrs); } + /** + * @param clazz the class to exclude + * @param filterAttrs bean elements not to be serialized + * @return + */ private ExclusionStrategy include(Class clazz, String... filterAttrs) { return new ExclusionStrategy() { Modified: turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CustomModule.java URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CustomModule.java?rev=1845825&r1=1845824&r2=1845825&view=diff ============================================================================== --- turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CustomModule.java (original) +++ turbine/fulcrum/trunk/json/jackson2/src/java/org/apache/fulcrum/json/jackson/CustomModule.java Mon Nov 5 17:43:51 2018 @@ -27,6 +27,14 @@ public final class CustomModule<T> exten private static final long serialVersionUID = 1L; + /** + * Instantiate a custom module + * + * @param name Name of module + * @param targetClazz The target class + * @param stdSer Standard serializer + * @param stdDeser Standard de-serializer + */ public CustomModule(String name, Class<T> targetClazz, StdSerializer<T> stdSer, StdDeserializer<T> stdDeser) { super(name, Version.unknownVersion());