package org.pieShare.pieTools.piePlate.service.serializer.jacksonSerializer; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import org.pieShare.pieTools.piePlate.model.message.HeaderMessage; import org.pieShare.pieTools.piePlate.model.message.api.IClusterMessage; import org.pieShare.pieTools.piePlate.service.serializer.api.ISerializerService; import org.pieShare.pieTools.piePlate.service.serializer.exception.SerializerServiceException; import java.io.IOException; import org.pieShare.pieTools.piePlate.model.message.api.IPieMessage; import org.pieShare.pieTools.piePlate.model.serializer.jacksonSerializer.IPieMessageMixIn; /** * Created by Svetoslav on 19.03.14. */ public class JacksonSerializerService implements ISerializerService { private ObjectMapper objectMapper; public JacksonSerializerService() { this.objectMapper = new ObjectMapper(); this.objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); this.objectMapper.addMixInAnnotations(IClusterMessage.class, IPieMessageMixIn.class); } @Override public IPieMessage deserialize(byte[] buffer) throws SerializerServiceException { HeaderMessage header; try { header = objectMapper.readValue(buffer, HeaderMessage.class); } catch (IOException e) { throw new SerializerServiceException("Could not deserialize header!", e); } IPieMessage msg; try { msg = (IPieMessage) objectMapper.readValue(buffer, Class.forName(header.getType())); } catch (IOException e) { throw new SerializerServiceException("Could not deserialize msg!", e); } catch (ClassNotFoundException e) { throw new SerializerServiceException("Could not find given class name!", e); } return msg; } @Override public byte[] serialize(IPieMessage msg) throws SerializerServiceException { try { return objectMapper.writeValueAsBytes(msg); } catch (JsonProcessingException e) { throw new SerializerServiceException("Failed serializing JSON", e); } } }