Allows to return HTML from serializing views
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.json / src / main / java / org / argeo / server / json / GenericJsonDeserializer.java
index 6bfe9b698431a58694880bd627ee886896dd8cab..5c865af961b845b5662efa05c68b75fd1130cbc5 100644 (file)
@@ -7,7 +7,7 @@ import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.server.ArgeoServerException;
+import org.argeo.ArgeoException;
 import org.codehaus.jackson.JsonFactory;
 import org.codehaus.jackson.JsonGenerator;
 import org.codehaus.jackson.JsonNode;
@@ -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)
-                       throw new ArgeoServerException(
+                       objectFactory = defaultObjectFactory;
+
+               if (objectFactory == null || !objectFactory.supports(type))
+                       throw new ArgeoException(
                                        "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) {