package serializers.jackson; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Array; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.jr.ob.JSON; import data.media.MediaContent; import serializers.*; public class JacksonJrDatabind { public static void register(TestGroups groups) { groups.media.add(JavaBuiltIn.mediaTransformer, new JrSerializer<MediaContent>(MediaContent.class), new SerFeatures( SerFormat.JSON, SerGraph.FLAT_TREE, SerClass.ZERO_KNOWLEDGE, "" ) ); } public final static class JrSerializer<T> extends Serializer<T> { private final Class<T> type; private final JSON json; protected JrSerializer(Class<T> t) { type = t; json = JSON.std; } @Override public String getName() { return "json/jackson-jr/databind"; } @Override public T deserialize(byte[] array) throws Exception { return json.beanFrom(type, array); } @Override public byte[] serialize(T content) throws Exception { return json.asBytes(content); } @Override public final void serializeItems(T[] items, OutputStream out) throws IOException { JsonGenerator g = json.getStreamingFactory().createGenerator(out); // JSON allows simple sequences, so: for (int i = 0, len = items.length; i < len; ++i) { json.write(items[i], g); } g.close(); } @Override public T[] deserializeItems(InputStream in, int numberOfItems) throws IOException { @SuppressWarnings("unchecked") T[] result = (T[]) Array.newInstance(type, numberOfItems); JsonParser p = json.getStreamingFactory().createParser(in); for (int i = 0; i < numberOfItems; ++i) { result[i] = json.beanFrom(type, p); } p.close(); return result; } } }