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

amqp.spring.converter.StringConverter Maven / Gradle / Ivy

There is a newer version: 1.7.0
Show newest version
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
package amqp.spring.converter;

import java.io.UnsupportedEncodingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.support.converter.AbstractMessageConverter;
import org.springframework.amqp.support.converter.MessageConversionException;

/**
 * Marshal (and un-marshal) a message into a String given the message's encoding
 */
public class StringConverter extends AbstractMessageConverter {
    private static transient final Logger LOG = LoggerFactory.getLogger(StringConverter.class);
    public static final String DEFAULT_CONTENT_TYPE = "application/text";
    
    protected String encoding = "UTF-8";
    protected String contentType = null;

    public String getContentType() {
        return contentType;
    }

    public void setContentType(String contentType) {
        this.contentType = contentType;
    }

    public String getEncoding() {
        return encoding;
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }
    
    @Override
    protected Message createMessage(Object object, MessageProperties messageProperties) {
        try {
            byte[] body = null;
            if(object != null) {
                body = object.toString().getBytes(this.encoding);
            }
            
            String msgContentType = this.contentType == null ? DEFAULT_CONTENT_TYPE : this.contentType;
            messageProperties.setContentType(msgContentType);
            messageProperties.setContentEncoding(this.encoding);
            messageProperties.setContentLength(body.length);
            return new Message(body, messageProperties);
        } catch (UnsupportedEncodingException ex) {
            LOG.error("Cannot encode strings as {}", this.encoding, ex);
            throw new MessageConversionException("Cannot encode strings as "+this.encoding, ex);
        }
    }

    @Override
    public Object fromMessage(Message message) throws MessageConversionException {
        MessageProperties messageProperties = message.getMessageProperties();
        if(messageProperties == null)
            throw new MessageConversionException("Cannot decode a message with no properties!");

        byte[] body = message.getBody();
        if(body == null)
            return null;

        String messageEncoding = messageProperties.getContentEncoding();
        if(messageEncoding == null)
            messageEncoding = this.encoding;

        String messageContentType = messageProperties.getContentType();
        if(this.contentType != null && ! this.contentType.equalsIgnoreCase(messageContentType))
            throw new MessageConversionException("Cannot understand a message of type "+messageContentType);

        try {
            return new String(body, messageEncoding);
        } catch (UnsupportedEncodingException ex) {
            LOG.error("Cannot dencode strings as {}", this.encoding, ex);
            throw new MessageConversionException("Cannot dencode strings as "+this.encoding, ex);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy