/** * */ package org.minnal.utils.serializer; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.InputStream; import java.io.OutputStream; import java.util.Collection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo.As; import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; import com.google.common.base.Charsets; /** * @author ganeshs * */ @JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY, property="class") public abstract class Serializer { private static final Logger logger = LoggerFactory.getLogger(Serializer.class); public static final Serializer DEFAULT_JSON_SERIALIZER = new DefaultJsonSerializer(); public static final Serializer DEFAULT_XML_SERIALIZER = new DefaultXmlSerializer(); public static final Serializer DEFAULT_TEXT_SERIALIZER = new DefaultTextSerializer(); public static final Serializer DEFAULT_FORM_SERIALIZER = new DefaultFormSerializer(); public static final Serializer DEFAULT_YAML_SERIALIZER = new DefaultYamlSerializer(); public String serialize(Object object) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); serialize(object, stream); return new String(stream.toByteArray(), Charsets.UTF_8); } public abstract void serialize(Object object, OutputStream stream); public <T> T deserialize(String content, Class<T> targetClass) { return deserialize(new ByteArrayInputStream(content.getBytes(Charsets.UTF_8)), targetClass); } public abstract <T> T deserialize(InputStream stream, Class<T> targetClass); public <T extends Collection<E>, E> T deserializeCollection(String content, Class<T> collectionType, Class<E> elementType) { return deserializeCollection(new ByteArrayInputStream(content.getBytes(Charsets.UTF_8)), collectionType, elementType); } public abstract <T extends Collection<E>, E> T deserializeCollection(InputStream stream, Class<T> collectionType, Class<E> elementType); /** * @param stream */ protected void closeStream(Closeable stream) { try { stream.close(); } catch (Exception e) { logger.trace("Failed while closing the stream", e); } } }