001 package com.khubla.pragmatach.plugin.jackson; 002 003 import java.io.ByteArrayOutputStream; 004 005 import org.codehaus.jackson.JsonEncoding; 006 import org.codehaus.jackson.JsonFactory; 007 import org.codehaus.jackson.JsonGenerator; 008 import org.codehaus.jackson.map.ObjectMapper; 009 import org.codehaus.jackson.node.ObjectNode; 010 011 import com.khubla.pragmatach.framework.api.PragmatachException; 012 import com.khubla.pragmatach.framework.api.Response; 013 import com.khubla.pragmatach.framework.controller.impl.AbstractController; 014 import com.khubla.pragmatach.framework.controller.impl.trivial.TrivialResponse; 015 016 /** 017 * @author tome 018 */ 019 public class JacksonController extends AbstractController { 020 /** 021 * factory 022 */ 023 private final JsonFactory jsonFactory; 024 /** 025 * mapper 026 */ 027 private final ObjectMapper objectMapper; 028 029 /** 030 * ctor 031 */ 032 public JacksonController() { 033 jsonFactory = new JsonFactory(); 034 objectMapper = new ObjectMapper(jsonFactory); 035 } 036 037 public ObjectNode createNode() { 038 return objectMapper.createObjectNode(); 039 } 040 041 public JsonFactory getJsonFactory() { 042 return jsonFactory; 043 } 044 045 public ObjectMapper getObjectMapper() { 046 return objectMapper; 047 } 048 049 /** 050 * render 051 */ 052 public Response render(ObjectNode objectNode) throws PragmatachException { 053 try { 054 /* 055 * render json to text 056 */ 057 final ByteArrayOutputStream baos = new ByteArrayOutputStream(); 058 final JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(baos, JsonEncoding.UTF8); 059 jsonGenerator.writeTree(objectNode); 060 jsonGenerator.close(); 061 /* 062 * done 063 */ 064 return new TrivialResponse(null, baos.toString(), 200); 065 } catch (final Exception e) { 066 throw new PragmatachException("Exception in render", e); 067 } 068 } 069 }