Improve serialization interfaces
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.json / src / main / java / org / argeo / server / json / JsonServerMapper.java
index 266ff2eec3f041ec37f1908b4c18c86456aa7660..36312ed59fe4f4e614875732d4bedeefdc49398d 100644 (file)
@@ -10,6 +10,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.server.ArgeoServerException;
+import org.argeo.server.Deserializer;
 import org.argeo.server.ServerDeserializer;
 import org.codehaus.jackson.JsonProcessingException;
 import org.codehaus.jackson.map.DeserializationContext;
@@ -20,7 +21,7 @@ import org.codehaus.jackson.map.deser.StdDeserializerProvider;
 import org.springframework.beans.factory.InitializingBean;
 
 public class JsonServerMapper extends JsonServerSerializer implements
-               ServerDeserializer, InitializingBean {
+               ServerDeserializer, Deserializer, InitializingBean {
        private final static Log log = LogFactory.getLog(JsonServerMapper.class);
 
        private Class<?> targetClass;
@@ -53,17 +54,12 @@ public class JsonServerMapper extends JsonServerSerializer implements
 
        public Object deserialize(Reader reader) {
                try {
-                       // String body = request.getParameter("body");
-                       // if (body == null) {
-                       // // lets read the message body instead
-                       // BufferedReader reader = request.getReader();
-                       // StringBuffer buffer = new StringBuffer();
-                       // String line = null;
-                       // while (((line = reader.readLine()) != null)) {
-                       // buffer.append(line);
-                       // }
-                       // body = buffer.toString();
-                       // }
+                       if (log.isTraceEnabled()) {
+                               String str = IOUtils.toString(reader);
+                               log.debug(str);
+                               reader = new StringReader(str);
+                       }
+
                        return getObjectMapper().readValue(reader, targetClass);
                } catch (Exception e) {
                        throw new ArgeoServerException("Cannot deserialize " + reader, e);
@@ -71,6 +67,21 @@ public class JsonServerMapper extends JsonServerSerializer implements
 
        }
 
+       public <T> T deserialize(Reader reader, Class<T> clss) {
+               try {
+                       if (log.isTraceEnabled()) {
+                               String str = IOUtils.toString(reader);
+                               log.debug(str);
+                               reader = new StringReader(str);
+                       }
+
+                       return getObjectMapper().readValue(reader, clss);
+               } catch (Exception e) {
+                       throw new ArgeoServerException("Cannot deserialize " + reader, e);
+               }
+
+       }
+
        public Object deserialize(String content) {
                StringReader reader = new StringReader(content);
                try {
@@ -84,7 +95,8 @@ public class JsonServerMapper extends JsonServerSerializer implements
                this.targetClass = targetClass;
        }
 
-       public void setDeserializers(Map<Class<?>, JsonDeserializer<?>> deserializers) {
+       public void setDeserializers(
+                       Map<Class<?>, JsonDeserializer<?>> deserializers) {
                this.deserializers = deserializers;
        }