X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.json%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fserver%2Fjson%2FJsonServerSerializer.java;h=a5a7f43e3a0e5b51b5510bb58934e480a07f75e1;hb=0f27df01898453d05364befc15969f787f6a3392;hp=90a9c135c2815a37637f4d2f85b685a32c7ab38c;hpb=54ca073308e726107a5e59b50ce875ebeb43b965;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java index 90a9c135c..a5a7f43e3 100644 --- a/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java +++ b/server/runtime/org.argeo.server.json/src/main/java/org/argeo/server/json/JsonServerSerializer.java @@ -2,6 +2,7 @@ package org.argeo.server.json; import java.io.IOException; import java.io.StringWriter; +import java.io.Writer; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,50 +10,74 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.server.ArgeoServerException; +import org.argeo.server.Serializer; import org.argeo.server.ServerSerializer; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.map.ObjectMapper; -public class JsonServerSerializer implements ServerSerializer { +public class JsonServerSerializer implements ServerSerializer, Serializer { private final static Log log = LogFactory .getLog(JsonServerSerializer.class); private JsonFactory jsonFactory = new JsonFactory(); private ObjectMapper objectMapper = new ObjectMapper(); - private Boolean prettyPrint = true; + private Boolean prettyPrint = false; + + // private String encoding = "UTF8"; public void serialize(Object obj, HttpServletRequest request, HttpServletResponse response) { + response.setContentType("application/json"); + try { + serialize(response.getWriter(), obj); + } catch (IOException e) { + throw new ArgeoServerException("Cannot open response stream.", e); + } + } + + public void serialize(Writer writer, Object obj) { + serializeAndLog(obj); + JsonGenerator jsonGenerator = null; try { - response.setContentType("application/json"); - StringWriter stringWriter = null; - if (log.isTraceEnabled()) { - stringWriter = new StringWriter(); - jsonGenerator = jsonFactory.createJsonGenerator(stringWriter); - } else { - jsonGenerator = jsonFactory.createJsonGenerator(response - .getWriter()); - } + // jsonGenerator = jsonFactory.createJsonGenerator(response + // .getOutputStream(), JsonEncoding.valueOf(encoding)); + jsonGenerator = jsonFactory.createJsonGenerator(writer); if (prettyPrint) jsonGenerator.useDefaultPrettyPrinter(); objectMapper.writeValue(jsonGenerator, obj); + } catch (Exception e) { + throw new ArgeoServerException("Cannot serialize " + obj, e); + } finally { + if (jsonGenerator != null) + try { + jsonGenerator.close(); + } catch (IOException e) { + if (log.isTraceEnabled()) + log.error("Cannot close JSON generator", e); + } + } + } - jsonGenerator.close(); - - if (stringWriter != null) { - if (log.isTraceEnabled()) - log.debug(stringWriter.toString()); - response.getWriter().append(stringWriter.toString()); - } + protected void serializeAndLog(Object obj) { + if (!log.isTraceEnabled()) + return; + JsonGenerator jsonGenerator = null; + try { + StringWriter stringWriter = new StringWriter(); + jsonGenerator = jsonFactory.createJsonGenerator(stringWriter); + jsonGenerator.useDefaultPrettyPrinter(); + objectMapper.writeValue(jsonGenerator, obj); + jsonGenerator.close(); + log.debug(stringWriter.toString()); } catch (Exception e) { - throw new ArgeoServerException("Cannot serialize " + obj, e); + throw new ArgeoServerException("Cannot log JSON", e); } finally { if (jsonGenerator != null) try { @@ -61,6 +86,7 @@ public class JsonServerSerializer implements ServerSerializer { if (log.isTraceEnabled()) log.error("Cannot close JSON generator", e); } + } }