// Path: src/main/java/com/baidu/unbiz/multiengine/codec/MsgCodec.java
// public interface MsgCodec {
//     /**
//      * 反序列化
//      *
//      * @param clazz 反序列化后的类定义
//      * @param bytes 字节码
//      * @return 反序列化后的对象
//      * @throws CodecException
//      */
//      <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException;
// 
//     /**
//      * 序列化
//      *
//      * @param object 待序列化的对象
//      * @return 字节码
//      * @throws CodecException
//      */
//     <T> byte[] encode(T object) throws CodecException;
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/exception/CodecException.java
// public class CodecException extends RuntimeException {
// 
//     /**
//      * serialVersionUID
//      */
//     private static final long serialVersionUID = 5196421433506179782L;
// 
//     /**
//      * Creates a new instance of CodecException.
//      */
//     public CodecException() {
//         super();
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      * @param arg1
//      */
//     public CodecException(String arg0, Throwable arg1) {
//         super(arg0, arg1);
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      */
//     public CodecException(String arg0) {
//         super(arg0);
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      */
//     public CodecException(Throwable arg0) {
//         super(arg0);
//     }
// 
// }


import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import com.baidu.unbiz.multiengine.codec.MsgCodec;
import com.baidu.unbiz.multiengine.exception.CodecException;
package com.baidu.unbiz.multiengine.codec.common;



/**
 * JSON格式的消息编解码
 */
public class JsonCodec implements MsgCodec {
    /**
     * 对象匹配映射
     */
    private final ObjectMapper mapper;

    public JsonCodec() {
        mapper = new ObjectMapper();
        // ignoring unknown properties makes us more robust to changes in the schema
        mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // This will allow including type information all non-final types. This allows correct
        // serialization/deserialization of generic collections, for example List<MyType>.
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    }

    @Override
    public byte[] encode(Object object) throws CodecException {
        try {
            return mapper.writeValueAsBytes(object);
        } catch (Exception e) {
            throw new CodecException(e);
        }
    }

// Path: src/main/java/com/baidu/unbiz/multiengine/codec/MsgCodec.java
// public interface MsgCodec {
//     /**
//      * 反序列化
//      *
//      * @param clazz 反序列化后的类定义
//      * @param bytes 字节码
//      * @return 反序列化后的对象
//      * @throws CodecException
//      */
//      <T> T decode(Class<T> clazz, byte[] bytes) throws CodecException;
// 
//     /**
//      * 序列化
//      *
//      * @param object 待序列化的对象
//      * @return 字节码
//      * @throws CodecException
//      */
//     <T> byte[] encode(T object) throws CodecException;
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/exception/CodecException.java
// public class CodecException extends RuntimeException {
// 
//     /**
//      * serialVersionUID
//      */
//     private static final long serialVersionUID = 5196421433506179782L;
// 
//     /**
//      * Creates a new instance of CodecException.
//      */
//     public CodecException() {
//         super();
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      * @param arg1
//      */
//     public CodecException(String arg0, Throwable arg1) {
//         super(arg0, arg1);
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      */
//     public CodecException(String arg0) {
//         super(arg0);
//     }
// 
//     /**
//      * Creates a new instance of CodecException.
//      * 
//      * @param arg0
//      */
//     public CodecException(Throwable arg0) {
//         super(arg0);
//     }
// 
// }


// Path: src/main/java/com/baidu/unbiz/multiengine/codec/common/JsonCodec.java
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import com.baidu.unbiz.multiengine.codec.MsgCodec;
import com.baidu.unbiz.multiengine.exception.CodecException;

package com.baidu.unbiz.multiengine.codec.common;



/**
 * JSON格式的消息编解码
 */
public class JsonCodec implements MsgCodec {
    /**
     * 对象匹配映射
     */
    private final ObjectMapper mapper;

    public JsonCodec() {
        mapper = new ObjectMapper();
        // ignoring unknown properties makes us more robust to changes in the schema
        mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // This will allow including type information all non-final types. This allows correct
        // serialization/deserialization of generic collections, for example List<MyType>.
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    }

    @Override
    public byte[] encode(Object object) throws CodecException {
        try {
            return mapper.writeValueAsBytes(object);
        } catch (Exception e) {
            throw new CodecException(e);
        }
    }

    @Override