com.kinglcc.spring.jms.core.converter.Jackson2MessageAdapterConverter.java Source code

Java tutorial

Introduction

Here is the source code for com.kinglcc.spring.jms.core.converter.Jackson2MessageAdapterConverter.java

Source

/*
 * Copyright 2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */
package com.kinglcc.spring.jms.core.converter;

import java.io.IOException;
import java.lang.reflect.Type;

import org.springframework.messaging.Message;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.converter.MessageConversionException;

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * Jackson2MessageAdapterConverter
 * <pre>
 * Use Jackson2 to convert {@link Message}
 * </pre>
 * @see GenericMessageAdapterConverter
 * 
 * @author liaochaochao
 * @since 2016128 ?5:49:15
 */
public class Jackson2MessageAdapterConverter extends MappingJackson2MessageConverter
        implements GenericMessageAdapterConverter {

    @Override
    public Object fromMessage(Message<?> message, Type targetType, Class<?> contextClass) {
        ObjectMapper objectMapper = getObjectMapper();
        JavaType javaType = objectMapper.getTypeFactory().constructType(targetType, contextClass);
        try {
            Object payload = message.getPayload();
            if (payload instanceof byte[]) {
                return objectMapper.readValue((byte[]) payload, javaType);
            } else {
                return objectMapper.readValue((String) payload, javaType);
            }
        } catch (IOException ex) {
            throw new MessageConversionException(message, "Could not read JSON: " + ex.getMessage(), ex);
        }
    }

    @Override
    public Object fromMessage(Message<?> message, Type targetType) {
        return fromMessage(message, targetType, null);
    }

}