All Downloads are FREE. Search and download functionalities are using the official Maven repository.

space.chensheng.wsmessenger.message.converter.JsonSerializeStrategy Maven / Gradle / Ivy

The newest version!
package space.chensheng.wsmessenger.message.converter;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import space.chensheng.wsmessenger.common.util.ExceptionUtil;
import space.chensheng.wsmessenger.common.util.JsonMapper;
import space.chensheng.wsmessenger.message.component.EmptyWsMessage;
import space.chensheng.wsmessenger.message.component.MessageHeader;
import space.chensheng.wsmessenger.message.component.WsMessage;

import java.io.UnsupportedEncodingException;

public class JsonSerializeStrategy implements SerializeStrategy {
    private static final Logger logger = LoggerFactory.getLogger(JsonSerializeStrategy.class);

    private static final byte[] EMPTY_BYTES = new byte[0];

    private static final String DEFAULT_CHARSET = "UTF-8";

    @Override
    public MessageHeader deserializeHeader(byte[] bytes) {
        if (bytes == null) {
            return null;
        }

        String msgContent;
        try {
            msgContent = new String(bytes, DEFAULT_CHARSET);
        } catch (UnsupportedEncodingException e) {
            logger.error(ExceptionUtil.getExceptionDetails(e));
            return null;
        }

        EmptyWsMessage wsMessage = JsonMapper.nonEmptyMapper().fromJson(msgContent, EmptyWsMessage.class);
        if (wsMessage == null) {
            return null;
        }

        return wsMessage.getHeader();
    }

    @Override
    public boolean supports(MessageHeader header) {
        if (header == null) {
            return false;
        }

        if (header.getSerializeType() == null) {
            return true;
        }

        return header.getSerializeType() == SerializeType.JSON;
    }

    @Override
    public byte[] serialize(WsMessage message) {
        if (message == null) {
            return EMPTY_BYTES;
        }

        String msgContent = JsonMapper.nonEmptyMapper().toJson(message);
        if (msgContent == null) {
            return EMPTY_BYTES;
        }

        try {
            return msgContent.getBytes(DEFAULT_CHARSET);
        } catch (UnsupportedEncodingException e) {
            logger.error(ExceptionUtil.getExceptionDetails(e));
        }
        return EMPTY_BYTES;
    }

    @Override
    public WsMessage deserialize(byte[] bytes, String messageType) {
        if (bytes == null) {
            return null;
        }

        Class msgType = null;
        try {
            msgType = Class.forName(messageType);
        } catch (ClassNotFoundException e) {
            logger.error(ExceptionUtil.getExceptionDetails(e));
            return null;
        }

        if (!WsMessage.class.isAssignableFrom(msgType)) {
            logger.error("message type {} is not sub class of {}", msgType, WsMessage.class);
            return null;
        }

        String msgContent;
        try {
            msgContent = new String(bytes, DEFAULT_CHARSET);
        } catch (UnsupportedEncodingException e) {
            logger.error(ExceptionUtil.getExceptionDetails(e));
            return null;
        }

        return (WsMessage) JsonMapper.nonEmptyMapper().fromJson(msgContent, msgType);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy