Package org.servicemix.components.util

Source Code of org.servicemix.components.util.CopyTransformer

/**
*
* Copyright 2005 LogicBlaze, Inc. http://www.logicblaze.com
*
* 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 org.servicemix.components.util;

import org.servicemix.jbi.jaxp.BytesSource;
import org.servicemix.jbi.jaxp.ResourceSource;
import org.servicemix.jbi.jaxp.SourceTransformer;
import org.servicemix.jbi.jaxp.StringSource;
import org.xml.sax.SAXException;

import javax.activation.DataHandler;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.stream.StreamSource;

import java.io.IOException;
import java.util.Iterator;

/**
* A simple transformer which copies the properties and content from the source message to the destination message.
*
* @version $Revision: 657 $
*/
public class CopyTransformer implements MessageTransformer {

    private static final CopyTransformer instance = new CopyTransformer();

    private SourceTransformer sourceTransformer = new SourceTransformer();

    /**
     * Returns the singleton instance
     *
     * @return the singleton instance
     */
    public static CopyTransformer getInstance() {
        return instance;
    }

    public boolean transform(MessageExchange exchange, NormalizedMessage from, NormalizedMessage to) throws MessagingException {
        copyProperties(from, to);

        Source content = from.getContent();
        if (content instanceof StreamSource &&
          !(content instanceof StringSource) &&
          !(content instanceof BytesSource) &&
          !(content instanceof ResourceSource)) {
            // lets avoid stream open exceptions by using a temporary format
            try {
                content = sourceTransformer.toDOMSource(from);
            }
            catch (TransformerException e) {
                throw new MessagingException(e);
            }
            catch (ParserConfigurationException e) {
                throw new MessagingException(e);
            }
            catch (IOException e) {
                throw new MessagingException(e);
            }
            catch (SAXException e) {
                throw new MessagingException(e);
            }
        }
        to.setContent(content);
       
        copyAttachments(from, to);
        return true;
    }

    /**
     * Copies all of the properties from one message to another
     *
     * @param from the message containing the properties
     * @param to the destination messages where the properties are set
     */
    public static void copyProperties(NormalizedMessage from, NormalizedMessage to) {
        for (Iterator iter = from.getPropertyNames().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            Object value = from.getProperty(name);
            to.setProperty(name, value);
        }
    }

    /**
     * Copies the attachments from a message to another message
     *
     * @param from the message with the attachments
     * @param to the message to which attachments are added
     * @throws MessagingException if an attachment could not be added
     */
    public static void copyAttachments(NormalizedMessage from, NormalizedMessage to) throws MessagingException {
        for (Iterator iter = from.getAttachmentNames().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            DataHandler value = from.getAttachment(name);
            to.addAttachment(name, value);
        }
    }
}
TOP

Related Classes of org.servicemix.components.util.CopyTransformer

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.