001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.camel;
018    
019    import org.apache.camel.impl.MessageSupport;
020    
021    import java.util.Map;
022    
023    /**
024     * Implements the <a
025     * href="http://activemq.apache.org/camel/message.html">Message</a> pattern and
026     * represents an inbound or outbound message as part of an {@link Exchange}
027     * 
028     * @version $Revision: 564677 $
029     */
030    public interface Message {
031    
032        /**
033         * @return the id of the message
034         */
035        String getMessageId();
036    
037        /**
038         * set the id of the message
039         * 
040         * @param messageId
041         */
042        void setMessageId(String messageId);
043    
044        /**
045         * Returns the exchange this message is related to
046         * 
047         * @return
048         */
049        Exchange getExchange();
050    
051        /**
052         * Accesses a specific header
053         * 
054         * @param name
055         * @return object header associated with the name
056         */
057        Object getHeader(String name);
058    
059        /**
060         * Returns a header associated with this message by name and specifying the
061         * type required
062         * 
063         * @param name the name of the header
064         * @param type the type of the header
065         * @return the value of the given header or null if there is no property for
066         *         the given name or it cannot be converted to the given type
067         */
068        <T> T getHeader(String name, Class<T> type);
069    
070        /**
071         * Sets a header on the message
072         * 
073         * @param name of the header
074         * @param value to associate with the name
075         */
076        void setHeader(String name, Object value);
077    
078        /**
079         * Returns all of the headers associated with the message
080         * 
081         * @return all the headers in a Map
082         */
083        Map<String, Object> getHeaders();
084    
085        /**
086         * Set all the headers associated with this message
087         * 
088         * @param headers
089         */
090        void setHeaders(Map<String, Object> headers);
091    
092        /**
093         * Returns the body of the message as a POJO
094         * 
095         * @return the body of the message
096         */
097        Object getBody();
098    
099        /**
100         * Returns the body as the specified type
101         * 
102         * @param type the type that the body
103         * @return the body of the message as the specified type
104         */
105        <T> T getBody(Class<T> type);
106    
107        /**
108         * Sets the body of the message
109         */
110        void setBody(Object body);
111    
112        /**
113         * Sets the body of the message as a specific type
114         */
115        <T> void setBody(Object body, Class<T> type);
116    
117        /**
118         * Creates a copy of this message so that it can be used and possibly
119         * modified further in another exchange
120         * 
121         * @return a new message instance copied from this message
122         */
123        Message copy();
124    
125        /**
126         * Copies the contents of the other message into this message
127         */
128        void copyFrom(Message message);
129    }