Package org.mule.transport

Source Code of org.mule.transport.AbstractMuleMessageFactory

/*
* $Id: AbstractMuleMessageFactory.java 19191 2010-08-25 21:05:23Z tcarlson $
* --------------------------------------------------------------------------------------
* Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
*
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/

package org.mule.transport;

import org.mule.DefaultMuleMessage;
import org.mule.api.MuleContext;
import org.mule.api.MuleMessage;
import org.mule.api.transport.MessageTypeNotSupportedException;
import org.mule.api.transport.MuleMessageFactory;

public abstract class AbstractMuleMessageFactory implements MuleMessageFactory
{
    protected MuleContext muleContext;

    public AbstractMuleMessageFactory(MuleContext context)
    {
        super();
        muleContext = context;
    }

    public MuleMessage create(Object transportMessage, String encoding) throws Exception
    {
        return create(transportMessage, null, encoding);
    }
   
    public MuleMessage create(Object transportMessage, MuleMessage previousMessage, String encoding)
        throws Exception
    {
        if (transportMessage == null)
        {
            return new DefaultMuleMessage(NullPayload.getInstance(), muleContext);
        }

        if (!isTransportMessageTypeSupported(transportMessage))
        {
            throw new MessageTypeNotSupportedException(transportMessage, getClass());
        }

        Object payload = extractPayload(transportMessage, encoding);
        DefaultMuleMessage message;
        if (previousMessage != null)
        {
            message = new DefaultMuleMessage(payload, previousMessage, muleContext);
        }
        else
        {
            message = new DefaultMuleMessage(payload, muleContext);
        }

        message.setEncoding(encoding);
        addProperties(message, transportMessage);
        addAttachments(message, transportMessage);
        return message;
    }

    protected abstract Class<?>[] getSupportedTransportMessageTypes();

    protected abstract Object extractPayload(Object transportMessage, String encoding) throws Exception;

    protected void addProperties(DefaultMuleMessage message, Object transportMessage) throws Exception
    {
        // Template method
    }

    protected void addAttachments(DefaultMuleMessage message, Object transportMessage) throws Exception
    {
        // Template method
    }

    private boolean isTransportMessageTypeSupported(Object transportMessage)
    {
        Class<?> transportMessageType = transportMessage.getClass();
        boolean match = false;
        for (Class<?> type : getSupportedTransportMessageTypes())
        {
            if (type.isAssignableFrom(transportMessageType))
            {
                match = true;
                break;
            }
        }
        return match;
    }
}
TOP

Related Classes of org.mule.transport.AbstractMuleMessageFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.