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

io.crossbar.autobahn.wamp.interfaces.ISerializer Maven / Gradle / Ivy

The newest version!
///////////////////////////////////////////////////////////////////////////////
//
//   AutobahnJava - http://crossbar.io/autobahn
//
//   Copyright (c) Crossbar.io Technologies GmbH and contributors
//
//   Licensed under the MIT License.
//   http://www.opensource.org/licenses/mit-license.php
//
///////////////////////////////////////////////////////////////////////////////

package io.crossbar.autobahn.wamp.interfaces;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.List;

import io.crossbar.autobahn.utils.ABLogger;
import io.crossbar.autobahn.utils.IABLogger;


public abstract class ISerializer {

    private static final IABLogger LOGGER = ABLogger.getLogger(ISerializer.class.getName());

    public final ObjectMapper mapper;

    public ISerializer(JsonFactory factor) {
        mapper = new ObjectMapper(factor);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

    public byte[] serialize(List message) {
        try {
            return mapper.writeValueAsBytes(message);
        } catch (JsonProcessingException e) {
            LOGGER.v(e.getMessage(), e);
            return null;
        }
    }

    public List unserialize(byte[] payload, boolean isBinary) {
        try {
            return mapper.readValue(payload, new TypeReference>() {});
        } catch (IOException e) {
            LOGGER.v(e.getMessage(), e);
            return null;
        }
    }

    public  T convertValue(Object fromValue, TypeReference toValueTypeRef) {
        // https://github.com/FasterXML/jackson-databind#tutorial-fancier-stuff-conversions
        // ResultType result = mapper.convertValue(sourceObject, ResultType.class);
        return mapper.convertValue(fromValue, toValueTypeRef);
    }

    public  T convertValue(Object fromValue, Class toValueTypeClass) {
        // https://github.com/FasterXML/jackson-databind#tutorial-fancier-stuff-conversions
        // ResultType result = mapper.convertValue(sourceObject, ResultType.class);
        return mapper.convertValue(fromValue, toValueTypeClass);
    }

    public boolean isBinary() {
        return true;
    }
}