Author: davsclaus Date: Sat Sep 25 10:55:32 2010 New Revision: 1001191 URL: http://svn.apache.org/viewvc?rev=1001191&view=rev Log: CAMEL-3157: Updated javadoc for Exchange
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=1001191&r1=1001190&r2=1001191&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Sat Sep 25 10:55:32 2010 @@ -23,10 +23,40 @@ import org.apache.camel.spi.Synchronizat import org.apache.camel.spi.UnitOfWork; /** - * The base message exchange interface providing access to the request, response - * and fault {...@link Message} instances. Different providers such as JMS, JBI, - * CXF and HTTP can provide their own derived API to expose the underlying - * transport semantics to avoid the leaky abstractions of generic APIs. + * Exchange is the message container holding the information during the entire routing. + * <p/><br/> + * Most noticeable the {...@link Exchange} provides access to the request, response and + * fault {...@link Message} messages. + * <p/><br/> + * It also provides information about what is known as the + * {...@link ExchangePattern Message Exchange Pattern} (or MEP for short). Its a status + * which represents if the message is a <i>one-way</i> or <i>request-reply</i> exchange pattern. + * A <i>one-way</i> pattern is defined as the {...@link org.apache.camel.ExchangePattern#InOnly} + * adn the <i>request-reply</i> is the {...@link org.apache.camel.ExchangePattern#InOut}. + * Those two patterns are the most commonly used. The other patterns is hardly used at all. + * <p/><br/> + * The {...@link Exchange} also holds meta-data during the entire lifecycle of the exchange which + * are stored as properties, accessible using the various {...@link #getProperty(String)} method + * and the {...@link #setProperty(String, Object)} is used to store a property. For example you + * can use this to store security related information. Also Camel itself stores information + * as properties, like some of the <a href="http://camel.apache.org/enterprise-integration-patterns.html"> + * Enterprise Integration Patterns</a> does. + * <p/><br/> + * If an {...@link Exchange} failed during routing the caused {...@link Exception} is stored and accessible + * using the {...@link #getException()} method. + * <p/><br/> + * <b>Important:</b> + * As a Camel end user and you want to update the current {...@link Message} on the {...@link Exchange} then + * you should pay attention. There are two methods two retrieve the message named as {...@link #getIn()} + * and {...@link #getOut()}. This API has been there since Camel 1.0. You most often should only use + * the {...@link #getIn()} method and change the current message by updating it directly. By doing this + * you ensure all the information is kept for further processing. On the other hand if you use the + * {...@link #getOut()} method to update the {...@link Message} then a <b>new</b> message is created which + * means any headers, attachments or the likes from the {...@link #getIn()} {...@link Message} is lost. + * The {...@link #getOut()} method is often only used in special cases or internally by Camel or specific + * Camel components. + * <br/> + * See also this <a href="http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html">FAQ entry</a> for more details. * * @version $Revision$ */ @@ -249,6 +279,8 @@ public interface Exchange { * this method. * <p/> * <br/>If you want to test whether an OUT message have been set or not, use the {...@link #hasOut()} method. + * <p/> + * See also the class java doc for this {...@link Exchange} for more details. * * @return the response * @see #getIn() @@ -261,6 +293,8 @@ public interface Exchange { * <br/><b>Important:</b> If you want to change the current message, then use {...@link #getIn(Class)} instead as it will * ensure headers etc. is kept and propagated when routing continues. Bottom line end users should rarely use * this method. + * <p/> + * See also the class java doc for this {...@link Exchange} for more details. * * @param type the given type * @return the message as the given type or <tt>null</tt> if not possible to covert to given type