--- /dev/null
+package org.argeo.server.json;
+
+import java.io.BufferedReader;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.argeo.server.ArgeoServerException;
+import org.argeo.server.ServerDeserializer;
+import org.argeo.server.ServerSerializer;
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.ObjectMapper;
+
+public class JsonServerMapper implements ServerSerializer, ServerDeserializer {
+ private JsonFactory jsonFactory = new JsonFactory();
+ private ObjectMapper objectMapper = new ObjectMapper();
+
+ public void serialize(Object obj, HttpServletRequest request,
+ HttpServletResponse response) {
+ try {
+ response.setContentType("application/json");
+
+ JsonGenerator jsonGenerator = jsonFactory
+ .createJsonGenerator(response.getWriter());
+ jsonGenerator.useDefaultPrettyPrinter();
+
+ objectMapper.writeValue(jsonGenerator, obj);
+ } catch (Exception e) {
+ throw new ArgeoServerException("Cannot serialize " + obj, e);
+ }
+ }
+
+ public Object deserialize(Object obj, HttpServletRequest request) {
+ 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();
+ }
+ return objectMapper.readValue(body, Object.class);
+ } catch (Exception e) {
+ throw new ArgeoServerException("Cannot deserialize " + request, e);
+ }
+ }
+
+}