X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.json%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fserver%2Fjson%2FJsonServerMapper.java;h=7a368f80c2d8efc9b1833e13eb383248338c7b76;hb=e38c8ad82cb57e56ab246b1d65f440653bed78f8;hp=8fef8e6b2fa7772638bbcdae89280d0c218cc201;hpb=00ae7654c948e62c35ef88e7d8d528965d5e0371;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java index 8fef8e6b2..7a368f80c 100644 --- a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java +++ b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerMapper.java @@ -2,12 +2,15 @@ package org.argeo.server.json; import java.io.IOException; import java.io.Reader; +import java.io.StringReader; import java.util.HashMap; import java.util.Map; +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.ArgeoException; +import org.argeo.server.Deserializer; import org.argeo.server.ServerDeserializer; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.DeserializationContext; @@ -18,17 +21,20 @@ 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; + private Class targetClass; - private Map deserializers = new HashMap(); + private Map, JsonDeserializer> deserializers = new HashMap, JsonDeserializer>(); + @SuppressWarnings("unchecked") public void afterPropertiesSet() throws Exception { 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); @@ -40,8 +46,9 @@ public class JsonServerMapper extends JsonServerSerializer implements JsonDeserializer deserializer, Object bean, String propertyName) throws IOException, JsonProcessingException { - if (log.isDebugEnabled()) + if (log.isTraceEnabled()) log.debug("Ignore property " + propertyName); + ctxt.getParser().skipChildren(); return true; } }); @@ -49,30 +56,58 @@ 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); + throw new ArgeoException("Cannot deserialize " + reader, e); + } + + } + + public T deserialize(Reader reader, Class 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 ArgeoException("Cannot deserialize " + reader, e); } } - public void setTargetClass(Class targetClass) { + public Object deserialize(String content) { + StringReader reader = new StringReader(content); + try { + return deserialize(reader); + } finally { + IOUtils.closeQuietly(reader); + } + } + + public void setTargetClass(Class targetClass) { this.targetClass = targetClass; } - public void setDeserializers(Map deserializers) { + public void setDeserializers( + Map, JsonDeserializer> deserializers) { this.deserializers = deserializers; } + public Class getTargetClass() { + return targetClass; + } + + public Map, JsonDeserializer> getDeserializers() { + return deserializers; + } + }