1 package org
.argeo
.server
.json
;
3 import java
.io
.IOException
;
5 import java
.io
.StringReader
;
6 import java
.util
.HashMap
;
9 import org
.apache
.commons
.io
.IOUtils
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.argeo
.server
.ArgeoServerException
;
13 import org
.argeo
.server
.ServerDeserializer
;
14 import org
.codehaus
.jackson
.JsonProcessingException
;
15 import org
.codehaus
.jackson
.map
.DeserializationContext
;
16 import org
.codehaus
.jackson
.map
.DeserializationProblemHandler
;
17 import org
.codehaus
.jackson
.map
.JsonDeserializer
;
18 import org
.codehaus
.jackson
.map
.deser
.CustomDeserializerFactory
;
19 import org
.codehaus
.jackson
.map
.deser
.StdDeserializerProvider
;
20 import org
.springframework
.beans
.factory
.InitializingBean
;
22 public class JsonServerMapper
extends JsonServerSerializer
implements
23 ServerDeserializer
, InitializingBean
{
24 private final static Log log
= LogFactory
.getLog(JsonServerMapper
.class);
26 private Class
<?
> targetClass
;
28 private Map
<Class
<?
>, JsonDeserializer
<?
>> deserializers
= new HashMap
<Class
<?
>, JsonDeserializer
<?
>>();
30 @SuppressWarnings("unchecked")
31 public void afterPropertiesSet() throws Exception
{
32 CustomDeserializerFactory dsf
= new CustomDeserializerFactory();
33 for (Class clss
: deserializers
.keySet()) {
34 dsf
.addSpecificMapping(clss
, deserializers
.get(clss
));
36 StdDeserializerProvider sdp
= new StdDeserializerProvider(dsf
);
37 getObjectMapper().setDeserializerProvider(sdp
);
38 // ignore unkown properties
39 getObjectMapper().getDeserializationConfig().addHandler(
40 new DeserializationProblemHandler() {
41 public boolean handleUnknownProperty(
42 DeserializationContext ctxt
,
43 JsonDeserializer
<?
> deserializer
, Object bean
,
44 String propertyName
) throws IOException
,
45 JsonProcessingException
{
46 if (log
.isTraceEnabled())
47 log
.debug("Ignore property " + propertyName
);
48 ctxt
.getParser().skipChildren();
54 public Object
deserialize(Reader reader
) {
56 // String body = request.getParameter("body");
57 // if (body == null) {
58 // // lets read the message body instead
59 // BufferedReader reader = request.getReader();
60 // StringBuffer buffer = new StringBuffer();
61 // String line = null;
62 // while (((line = reader.readLine()) != null)) {
63 // buffer.append(line);
65 // body = buffer.toString();
67 return getObjectMapper().readValue(reader
, targetClass
);
68 } catch (Exception e
) {
69 throw new ArgeoServerException("Cannot deserialize " + reader
, e
);
74 public Object
deserialize(String content
) {
75 StringReader reader
= new StringReader(content
);
77 return deserialize(reader
);
79 IOUtils
.closeQuietly(reader
);
83 public void setTargetClass(Class
<?
> targetClass
) {
84 this.targetClass
= targetClass
;
87 public void setDeserializers(Map
<Class
<?
>, JsonDeserializer
<?
>> deserializers
) {
88 this.deserializers
= deserializers
;
91 public Class
<?
> getTargetClass() {
95 public Map
<Class
<?
>, JsonDeserializer
<?
>> getDeserializers() {