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 java.util.Map; 020 021 /** 022 * The base message exchange interface providing access to the request, response and fault {@link Message} instances. 023 * Different providers such as JMS, JBI, CXF and HTTP can provide their own derived API to expose the underlying transport 024 * semantics to avoid the leaky abstractions of generic APIs. 025 * 026 * @version $Revision: 550760 $ 027 */ 028 public interface Exchange { 029 030 /** 031 * Returns the exchange id 032 * @return the unique id of the exchange 033 */ 034 String getExchangeId(); 035 036 /** 037 * Set the exchange id 038 * @param id 039 */ 040 void setExchangeId(String id); 041 042 043 /** 044 * Returns a property associated with this exchange by name 045 * 046 * @param name the name of the property 047 * @return the value of the given header or null if there is no property for the given name 048 */ 049 Object getProperty(String name); 050 051 052 /** 053 * Returns a property associated with this exchange by name and specifying the type required 054 * 055 * @param name the name of the property 056 * @param type the type of the property 057 * @return the value of the given header or null if there is no property for the given name or 058 * null if it cannot be converted to the given type 059 */ 060 <T> T getProperty(String name, Class<T> type); 061 062 /** 063 * Sets a property on the exchange 064 * 065 * @param name of the property 066 * @param value to associate with the name 067 */ 068 void setProperty(String name, Object value); 069 070 /** 071 * Returns all of the properties associated with the exchange 072 * 073 * @return all the headers in a Map 074 */ 075 Map<String, Object> getProperties(); 076 077 078 /** 079 * Returns the inbound request message 080 * @return the message 081 */ 082 Message getIn(); 083 084 /** 085 * Returns the outbound message, lazily creating one if one has not already been associated with this exchange. 086 * If you want to inspect this property but not force lazy creation then invoke the {@link #getOut(boolean)} method 087 * passing in null 088 * 089 * @return the response 090 */ 091 Message getOut(); 092 093 /** 094 * Returns the outbound message; optionally lazily creating one if one has not been associated with this exchange 095 * @return the response 096 */ 097 Message getOut(boolean lazyCreate); 098 099 /** 100 * Returns the fault message 101 * @return the fault 102 */ 103 Message getFault(); 104 105 /** 106 * Returns the exception associated with this exchange 107 * @return the exception (or null if no faults) 108 */ 109 Throwable getException(); 110 111 /** 112 * Sets the exception associated with this exchange 113 * @param e 114 */ 115 void setException(Throwable e); 116 117 /** 118 * Returns the container so that a processor can resolve endpoints from URIs 119 * 120 * @return the container which owns this exchange 121 */ 122 CamelContext getContext(); 123 124 /** 125 * Creates a copy of the current message exchange so that it can be forwarded to another 126 * destination 127 */ 128 Exchange copy(); 129 130 /** 131 * Copies the data into this exchange from the given exchange 132 * 133 * #param source is the source from which headers and messages will be copied 134 */ 135 void copyFrom(Exchange source); 136 }