package com.google.sitebricks.client.transport; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.TypeFactory; import com.google.inject.TypeLiteral; import com.google.inject.Inject; import com.google.inject.Singleton; /** * @author Dhanji R. Prasanna (dhanji@gmail.com) */ @Singleton public class JacksonJsonTransport extends Json { private final ObjectMapper objectMapper; @Inject public JacksonJsonTransport(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } public ObjectMapper getObjectMapper() { return objectMapper; } public <T> T in(InputStream in, Class<T> type) throws IOException { return objectMapper.readValue(in, type); } @Override public <T> T in(InputStream in, TypeLiteral<T> type) throws IOException { return objectMapper.readValue(in, TypeFactory.defaultInstance().constructType(type.getType())); } public <T> void out(OutputStream out, Class<T> type, T data) { try { objectMapper.writeValue(out, data); } catch (IOException e) { throw new RuntimeException(e); } } }