Improve JSON support
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 16 Oct 2009 12:42:13 +0000 (12:42 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 16 Oct 2009 12:42:13 +0000 (12:42 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@3043 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/GenericJsonDeserializer.java
server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonObjectFactoryImpl.java
server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java

index 6bfe9b698431a58694880bd627ee886896dd8cab..18c7d3e520bb1472c1c31d1d180652bbb84c6ea3 100644 (file)
@@ -24,6 +24,7 @@ public class GenericJsonDeserializer<T> extends JsonDeserializer<T> {
 
        private JsonFactory jsonFactory = new JsonFactory();
        private ObjectCodec objectCodec = new ObjectMapper();
+       private JsonObjectFactory defaultObjectFactory = new JsonObjectFactoryImpl();
 
        private String typeField = "type";
 
@@ -57,10 +58,13 @@ public class GenericJsonDeserializer<T> extends JsonDeserializer<T> {
                }
 
                if (objectFactory == null)
+                       objectFactory = defaultObjectFactory;
+
+               if (objectFactory == null || !objectFactory.supports(type))
                        throw new ArgeoServerException(
                                        "Cannot find JSON object factory for type " + type);
 
-               return (T)objectFactory.readValue(type, str);
+               return (T) objectFactory.readValue(type, str);
        }
 
        public void setTypeField(String typeField) {
index 0f1e91e498040e273f32af07240ec9daf1de9fa3..40e197e02c624c5c41da21241ee8f12be204605c 100644 (file)
@@ -21,7 +21,7 @@ public class JsonObjectFactoryImpl implements JsonObjectFactory,
        private ClassLoader classLoader = getClass().getClassLoader();
 
        private ObjectMapper objectMapper = new ObjectMapper();
-       private Map<String, Class<?>> supportedTypes = new HashMap<String,  Class<?>>();
+       private Map<String, Class<?>> supportedTypes = new HashMap<String, Class<?>>();
 
        public Boolean supports(String type) {
                if (supportedTypes.containsKey(type))
@@ -32,7 +32,7 @@ public class JsonObjectFactoryImpl implements JsonObjectFactory,
 
        @SuppressWarnings("unchecked")
        public <T> T readValue(String type, String str) {
-               final  Class<?> clss;
+               final Class<?> clss;
                if (supportedTypes.containsKey(type))
                        clss = supportedTypes.get(type);
                else {
@@ -49,35 +49,11 @@ public class JsonObjectFactoryImpl implements JsonObjectFactory,
                }
        }
 
-       public void setSupportedTypes(Map<String,  Class<?>> supportedTypes) {
+       public void setSupportedTypes(Map<String, Class<?>> supportedTypes) {
                this.supportedTypes = supportedTypes;
        }
 
-       protected  Class<?> loadClass(String type) {
-//             try {
-//                     return Class.forName(type);
-//             } catch (ClassNotFoundException e) {
-//                     if (log.isDebugEnabled())
-//                             log.debug("Class.forName failed: " + e);
-//             }
-//
-//             try {
-//                     return Thread.currentThread().getContextClassLoader().loadClass(
-//                                     type);
-//             } catch (ClassNotFoundException e) {
-//                     if (log.isDebugEnabled())
-//                             log
-//                                             .debug("Thread.currentThread().getContextClassLoader().loadClass failed: "
-//                                                             + e);
-//             }
-//
-//             try {
-//                     return getClass().getClassLoader().loadClass(type);
-//             } catch (ClassNotFoundException e) {
-//                     if (log.isDebugEnabled())
-//                             log.debug("getClass().getClassLoader().loadClass failed: " + e);
-//             }
-//
+       protected Class<?> loadClass(String type) {
                try {
                        return classLoader.loadClass(type);
                } catch (ClassNotFoundException e) {
index 36312ed59fe4f4e614875732d4bedeefdc49398d..7ca8352d5998676df6e4847a02e13d9ffdfeed18 100644 (file)
@@ -33,6 +33,8 @@ public class JsonServerMapper extends JsonServerSerializer implements
                CustomDeserializerFactory dsf = new CustomDeserializerFactory();
                for (Class clss : deserializers.keySet()) {
                        dsf.addSpecificMapping(clss, deserializers.get(clss));
+                       if (log.isDebugEnabled())
+                               log.debug("Add JSON mapping for " + clss);
                }
                StdDeserializerProvider sdp = new StdDeserializerProvider(dsf);
                getObjectMapper().setDeserializerProvider(sdp);