/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.camel.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; import org.apache.camel.NoSuchBeanException; import org.apache.camel.NoSuchHeaderException; import org.apache.camel.NoSuchPropertyException; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultExchange; /** * @version */ public class ExchangeHelperTest extends ContextTestSupport { protected Exchange exchange; public void testValidProperty() throws Exception { String value = ExchangeHelper.getMandatoryProperty(exchange, "foo", String.class); assertEquals("foo property", "123", value); } public void testMissingProperty() throws Exception { try { String value = ExchangeHelper.getMandatoryProperty(exchange, "bar", String.class); fail("Should have failed but got: " + value); } catch (NoSuchPropertyException e) { assertEquals("bar", e.getPropertyName()); } } public void testPropertyOfIncompatibleType() throws Exception { try { List<?> value = ExchangeHelper.getMandatoryProperty(exchange, "foo", List.class); fail("Should have failed but got: " + value); } catch (NoSuchPropertyException e) { assertEquals("foo", e.getPropertyName()); } } public void testMissingHeader() throws Exception { try { String value = ExchangeHelper.getMandatoryHeader(exchange, "unknown", String.class); fail("Should have failed but got: " + value); } catch (NoSuchHeaderException e) { assertEquals("unknown", e.getHeaderName()); } } public void testHeaderOfIncompatibleType() throws Exception { exchange.getIn().setHeader("foo", 123); try { List<?> value = ExchangeHelper.getMandatoryHeader(exchange, "foo", List.class); fail("Should have failed but got: " + value); } catch (NoSuchHeaderException e) { assertEquals("foo", e.getHeaderName()); } } public void testNoSuchBean() throws Exception { try { ExchangeHelper.lookupMandatoryBean(exchange, "foo"); fail("Should have thrown an exception"); } catch (NoSuchBeanException e) { assertEquals("No bean could be found in the registry for: foo", e.getMessage()); assertEquals("foo", e.getName()); } } public void testNoSuchBeanType() throws Exception { try { ExchangeHelper.lookupMandatoryBean(exchange, "foo", String.class); fail("Should have thrown an exception"); } catch (NoSuchBeanException e) { assertEquals("No bean could be found in the registry for: foo", e.getMessage()); assertEquals("foo", e.getName()); } } public void testGetExchangeById() throws Exception { List<Exchange> list = new ArrayList<Exchange>(); Exchange e1 = context.getEndpoint("mock:foo").createExchange(); Exchange e2 = context.getEndpoint("mock:foo").createExchange(); list.add(e1); list.add(e2); assertNull(ExchangeHelper.getExchangeById(list, "unknown")); assertEquals(e1, ExchangeHelper.getExchangeById(list, e1.getExchangeId())); assertEquals(e2, ExchangeHelper.getExchangeById(list, e2.getExchangeId())); } public void testPopulateVariableMap() throws Exception { exchange.setPattern(ExchangePattern.InOut); exchange.getOut().setBody("bar"); exchange.getOut().setHeader("quote", "Camel rocks"); Map<String, Object> map = new HashMap<String, Object>(); ExchangeHelper.populateVariableMap(exchange, map); assertEquals(8, map.size()); assertSame(exchange, map.get("exchange")); assertSame(exchange.getIn(), map.get("in")); assertSame(exchange.getIn(), map.get("request")); assertSame(exchange.getOut(), map.get("out")); assertSame(exchange.getOut(), map.get("response")); assertSame(exchange.getIn().getHeaders(), map.get("headers")); assertSame(exchange.getIn().getBody(), map.get("body")); assertSame(exchange.getContext(), map.get("camelContext")); } public void testCreateVariableMap() throws Exception { exchange.setPattern(ExchangePattern.InOut); exchange.getOut().setBody("bar"); exchange.getOut().setHeader("quote", "Camel rocks"); Map<?, ?> map = ExchangeHelper.createVariableMap(exchange); assertEquals(8, map.size()); assertSame(exchange, map.get("exchange")); assertSame(exchange.getIn(), map.get("in")); assertSame(exchange.getIn(), map.get("request")); assertSame(exchange.getOut(), map.get("out")); assertSame(exchange.getOut(), map.get("response")); assertSame(exchange.getIn().getHeaders(), map.get("headers")); assertSame(exchange.getIn().getBody(), map.get("body")); assertSame(exchange.getContext(), map.get("camelContext")); } public void testCreateVariableMapNoExistingOut() throws Exception { exchange.setPattern(ExchangePattern.InOut); exchange.getIn().setBody("bar"); exchange.getIn().setHeader("quote", "Camel rocks"); assertFalse(exchange.hasOut()); Map<?, ?> map = ExchangeHelper.createVariableMap(exchange); // there should still be 8 in the map assertEquals(8, map.size()); assertSame(exchange, map.get("exchange")); assertSame(exchange.getIn(), map.get("in")); assertSame(exchange.getIn(), map.get("request")); assertSame(exchange.getIn(), map.get("out")); assertSame(exchange.getIn(), map.get("response")); assertSame(exchange.getIn().getHeaders(), map.get("headers")); assertSame(exchange.getIn().getBody(), map.get("body")); assertSame(exchange.getContext(), map.get("camelContext")); // but the Exchange does still not have an OUT message to avoid // causing side effects with the createVariableMap method assertFalse(exchange.hasOut()); } public void testGetContentType() throws Exception { exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "text/xml"); assertEquals("text/xml", ExchangeHelper.getContentType(exchange)); } public void testGetContentEncpding() throws Exception { exchange.getIn().setHeader(Exchange.CONTENT_ENCODING, "iso-8859-1"); assertEquals("iso-8859-1", ExchangeHelper.getContentEncoding(exchange)); } @Override protected void setUp() throws Exception { super.setUp(); exchange = new DefaultExchange(new DefaultCamelContext()); exchange.setProperty("foo", 123); } }