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.util;
018
019 import org.apache.camel.Endpoint;
020 import org.apache.camel.Exchange;
021 import org.apache.camel.InvalidPayloadException;
022 import org.apache.camel.InvalidTypeException;
023 import org.apache.camel.NoSuchEndpointException;
024 import org.apache.camel.NoSuchPropertyException;
025
026 /**
027 * Some helper methods for working with {@link Exchange} objects
028 *
029 * @version $Revision: 563607 $
030 */
031 public class ExchangeHelper {
032
033 /**
034 * Utility classes should not have a public constructor.
035 */
036 private ExchangeHelper() {
037 }
038
039 /**
040 * Attempts to resolve the endpoint for the given value
041 *
042 * @param exchange the message exchange being processed
043 * @param value the value which can be an {@link Endpoint} or an object
044 * which provides a String representation of an endpoint via
045 * {@link #toString()}
046 *
047 * @return the endpoint
048 * @throws NoSuchEndpointException if the endpoint cannot be resolved
049 */
050 @SuppressWarnings({"unchecked" })
051 public static <E extends Exchange> Endpoint<E> resolveEndpoint(E exchange, Object value)
052 throws NoSuchEndpointException {
053 Endpoint<E> endpoint;
054 if (value instanceof Endpoint) {
055 endpoint = (Endpoint<E>)value;
056 } else {
057 String uri = value.toString();
058 endpoint = CamelContextHelper.getMandatoryEndpoint(exchange.getContext(), uri);
059 }
060 return endpoint;
061 }
062
063 public static <T> T getMandatoryProperty(Exchange exchange, String propertyName, Class<T> type)
064 throws NoSuchPropertyException {
065 T answer = exchange.getProperty(propertyName, type);
066 if (answer == null) {
067 throw new NoSuchPropertyException(exchange, propertyName, type);
068 }
069 return answer;
070 }
071
072 /**
073 * Returns the mandatory inbound message body of the correct type or throws
074 * an exception if it is not present
075 */
076 public static <T> T getMandatoryInBody(Exchange exchange, Class<T> type) throws InvalidPayloadException {
077 T answer = exchange.getIn().getBody(type);
078 if (answer == null) {
079 throw new InvalidPayloadException(exchange, type);
080 }
081 return answer;
082 }
083
084 /**
085 * Converts the value to the given expected type or throws an exception
086 */
087 public static <T> T convertToMandatoryType(Exchange exchange, Class<T> type, Object value)
088 throws InvalidTypeException {
089 T answer = convertToType(exchange, type, value);
090 if (answer == null) {
091 throw new InvalidTypeException(exchange, value, type);
092 }
093 return answer;
094 }
095
096 /**
097 * Converts the value to the given expected type returning null if it could
098 * not be converted
099 */
100 public static <T> T convertToType(Exchange exchange, Class<T> type, Object value) {
101 return exchange.getContext().getTypeConverter().convertTo(type, value);
102 }
103 }