Improve JSON support
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.json / src / main / java / org / argeo / server / json / GenericJsonDeserializer.java
index c91f76d3675a244212eb607cda01633abeb77b30..18c7d3e520bb1472c1c31d1d180652bbb84c6ea3 100644 (file)
@@ -24,11 +24,13 @@ 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";
 
        private List<JsonObjectFactory> objectFactories = new ArrayList<JsonObjectFactory>();
 
+       @SuppressWarnings("unchecked")
        @Override
        public T deserialize(JsonParser parser, DeserializationContext ctxt)
                        throws IOException, JsonProcessingException {
@@ -44,7 +46,7 @@ public class GenericJsonDeserializer<T> extends JsonDeserializer<T> {
                generator.writeTree(root);
                String str = writer.toString();
 
-               if (log.isDebugEnabled())
+               if (log.isTraceEnabled())
                        log.debug("Deserialize object of type=" + type + ", str=" + str);
 
                JsonObjectFactory objectFactory = null;
@@ -56,6 +58,9 @@ 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);
 
@@ -70,4 +75,8 @@ public class GenericJsonDeserializer<T> extends JsonDeserializer<T> {
                this.objectFactories = objectFactories;
        }
 
+       public List<JsonObjectFactory> getObjectFactories() {
+               return objectFactories;
+       }
+
 }