Author: krasserm Date: Sun Dec 13 10:18:22 2009 New Revision: 890042 URL: http://svn.apache.org/viewvc?rev=890042&view=rev Log: Fix for CAMEL-2248
Added: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpReferenceParameterTest.java camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltReferenceParameterTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java?rev=890042&r1=890041&r2=890042&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java Sun Dec 13 10:18:22 2009 @@ -352,11 +352,14 @@ /** * Resolves a reference parameter in the registry and removes it from the map. * - * @param <T> type of object to lookup in th registry. + * @param <T> type of object to lookup in the registry. * @param parameters parameter map. * @param key parameter map key. - * @param type type of object to lookup in th registry. - * @return the referenced object or <code>null</code>. + * @param type type of object to lookup in the registry. + * @return the referenced object or <code>null</code> if the parameter map + * doesn't contain the key. + * @throws IllegalArgumentException if a non-null reference was not found in + * registry. */ public <T> T resolveAndRemoveReferenceParameter(Map<String, Object> parameters, String key, Class<T> type) { return resolveAndRemoveReferenceParameter(parameters, key, type, null); @@ -369,20 +372,18 @@ * @param parameters parameter map. * @param key parameter map key. * @param type type of object to lookup in the registry. - * @param defaultValue default value to use if either the parameter map doesn't - * contain the key or the registry doesn't contain an object - * of requested type. - * @return the referenced object, the default value or <code>null</code>. + * @param defaultValue default value to use if the parameter map doesn't + * contain the key. + * @return the referenced object or the default value. + * @throws IllegalArgumentException if referenced object was not found in + * registry. */ public <T> T resolveAndRemoveReferenceParameter(Map<String, Object> parameters, String key, Class<T> type, T defaultValue) { String value = getAndRemoveParameter(parameters, key, String.class); - if (EndpointHelper.isReferenceParameter(value)) { - T result = EndpointHelper.resolveReferenceParameter(getCamelContext(), value.toString(), type); - return result == null ? defaultValue : result; - } else if (value == null) { + if (value == null) { return defaultValue; } else { - throw new IllegalArgumentException("Parameter value " + value + " is not a valid reference"); + return EndpointHelper.resolveReferenceParameter(getCamelContext(), value.toString(), type); } } @@ -396,8 +397,10 @@ * parameter map key. * @param elementType * result list element type. - * @return the list of referenced objects or an empty list, never - * <code>null</code>. + * @return the list of referenced objects or an empty list if the parameter + * map doesn't contain the key. + * @throws IllegalArgumentException if any of the referenced objects was + * not found in registry. * @see EndpointHelper#resolveReferenceListParameter(CamelContext, String, Class) */ public <T> List<T> resolveAndRemoveReferenceListParameter(Map<String, Object> parameters, String key, Class<T> elementType) { @@ -415,22 +418,20 @@ * @param elementType * result list element type. * @param defaultValue - * default value to use if either the parameter map doesn't - * contain the key or the lookup for none of the references - * was successful. - * @return the list of referenced objects, the default value or an empty list, never - * <code>null</code>. + * default value to use if the parameter map doesn't + * contain the key. + * @return the list of referenced objects or the default value. + * @throws IllegalArgumentException if any of the referenced objects was + * not found in registry. * @see EndpointHelper#resolveReferenceListParameter(CamelContext, String, Class) */ public <T> List<T> resolveAndRemoveReferenceListParameter(Map<String, Object> parameters, String key, Class<T> elementType, List<T> defaultValue) { String value = getAndRemoveParameter(parameters, key, String.class); - if (EndpointHelper.isReferenceParameter(value)) { - List<T> result = EndpointHelper.resolveReferenceListParameter(getCamelContext(), value.toString(), elementType); - return result.isEmpty() ? defaultValue : result; - } else if (value == null) { + + if (value == null) { return defaultValue; } else { - throw new IllegalArgumentException("Parameter value " + value + " is not a valid reference (list)"); + return EndpointHelper.resolveReferenceListParameter(getCamelContext(), value.toString(), elementType); } } Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java?rev=890042&r1=890041&r2=890042&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/EndpointHelper.java Sun Dec 13 10:18:22 2009 @@ -175,7 +175,8 @@ Object v = entry.getValue(); String value = v != null ? v.toString() : null; if (value != null && isReferenceParameter(value)) { - Object ref = resolveReferenceParameter(context, value, Object.class); + // For backwards-compatibility reasons, no mandatory lookup is done here + Object ref = resolveReferenceParameter(context, value, Object.class, false); if (ref != null) { boolean hit = IntrospectionSupport.setProperty(context.getTypeConverter(), bean, name, ref); if (hit) { @@ -204,15 +205,36 @@ * Resolves a reference parameter by making a lookup in the registry. * * @param <T> type of object to lookup. - * @param context Camel content to use for lookup. + * @param context Camel context to use for lookup. * @param value reference parameter value. * @param type type of object to lookup. - * @return lookup result or <code>null</code>. + * @return lookup result. + * @throws IllegalArgumentException if referenced object was not found in + * registry. */ public static <T> T resolveReferenceParameter(CamelContext context, String value, Class<T> type) { - assert isReferenceParameter(value); - return context.getRegistry().lookup(value.substring(1), type); - + return resolveReferenceParameter(context, value, type, true); + } + + /** + * Resolves a reference parameter by making a lookup in the registry. + * + * @param <T> type of object to lookup. + * @param context Camel context to use for lookup. + * @param value reference parameter value. + * @param type type of object to lookup. + * @return lookup result (or <code>null</code> only if + * <code>mandatory</code> is <code>false</code>). + * @throws IllegalArgumentException if object was not found in registry and + * <code>mandatory</code> is <code>true</code>. + */ + public static <T> T resolveReferenceParameter(CamelContext context, String value, Class<T> type, boolean mandatory) { + String valueNoHash = value.replaceAll("#", ""); + if (mandatory) { + return CamelContextHelper.mandatoryLookup(context, valueNoHash, type); + } else { + return CamelContextHelper.lookup(context, valueNoHash, type); + } } /** @@ -223,17 +245,16 @@ * <li>a single reference to a bean type T</li> * <li>a single reference to a bean of type java.util.List</li> * </ul> - * Only bean lookup results that are not <code>null</code> are added to the - * result list. * * @param context - * Camel content to use for lookup. + * Camel context to use for lookup. * @param value * reference parameter value. * @param elementType * result list element type. - * @return list of non-null lookup results or an empty list, never - * <code>null</code>. + * @return list of lookup results. + * @throws IllegalArgumentException if any referenced object was not found + * in registry. */ @SuppressWarnings("unchecked") public static <T> List<T> resolveReferenceListParameter(CamelContext context, String value, Class<T> elementType) { @@ -246,19 +267,14 @@ if (bean instanceof List) { // The bean is a list return (List)bean; - } else if (elementType.isInstance(bean)) { - // The bean is a list element - return (List<T>)Arrays.asList(bean); } else { - return Collections.emptyList(); + // The bean is a list element + return Arrays.asList(elementType.cast(bean)); } } else { // more than one list element ArrayList<T> result = new ArrayList<T>(elements.size()); for (String element : elements) { - T bean = resolveReferenceParameter(context, element.trim(), elementType); - if (bean != null) { - result.add(bean); - } + result.add(resolveReferenceParameter(context, element.trim(), elementType)); } return result; } Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java?rev=890042&r1=890041&r2=890042&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentTest.java Sun Dec 13 10:18:22 2009 @@ -86,22 +86,22 @@ MyComponent my = new MyComponent(this.context); Date value = my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class); assertEquals(new Date(0), value); + // usage of leading # is optional + parameters.put("date", "beginning"); + value = my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class); + assertEquals(new Date(0), value); } - public void testResolveAndRemoveReferenceParameterNotInRegistryDefault() { - Map<String, Object> parameters = new HashMap<String, Object>(); - parameters.put("date", "#somewhen"); - MyComponent my = new MyComponent(this.context); - Date value = my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class, new Date(1)); - assertEquals(new Date(1), value); - } - - public void testResolveAndRemoveReferenceParameterNotInRegistryNull() { + public void testResolveAndRemoveReferenceParameterNotInRegistry() { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("date", "#somewhen"); MyComponent my = new MyComponent(this.context); - Date value = my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class); - assertNull(value); + try { + my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class); + fail("returned without finding object in registry"); + } catch (IllegalArgumentException e) { + // test passes + } } public void testResolveAndRemoveReferenceParameterNotInMapDefault() { @@ -120,18 +120,6 @@ assertNull(value); } - public void testResolveAndRemoveInvalidReferenceParameter() { - Map<String, Object> parameters = new HashMap<String, Object>(); - parameters.put("date", "beginning"); - MyComponent my = new MyComponent(this.context); - try { - my.resolveAndRemoveReferenceParameter(parameters, "date", Date.class); - fail("usage of invalid reference"); - } catch (IllegalArgumentException e) { - // test passed - } - } - public void testResolveAndRemoveReferenceListParameterElement() { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("dates", "#bean1"); @@ -149,6 +137,12 @@ assertEquals(2, values.size()); assertEquals(new Date(10), values.get(0)); assertEquals(new Date(11), values.get(1)); + // usage of leading # is optional + parameters.put("dates", "bean1,bean2"); + values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class); + assertEquals(2, values.size()); + assertEquals(new Date(10), values.get(0)); + assertEquals(new Date(11), values.get(1)); } public void testResolveAndRemoveReferenceListParameterListCommaTrim() { @@ -159,6 +153,12 @@ assertEquals(2, values.size()); assertEquals(new Date(10), values.get(0)); assertEquals(new Date(11), values.get(1)); + // usage of leading # is optional + parameters.put("dates", " bean1 , bean2 "); + values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class); + assertEquals(2, values.size()); + assertEquals(new Date(10), values.get(0)); + assertEquals(new Date(11), values.get(1)); } public void testResolveAndRemoveReferenceListParameterListBean() { @@ -169,15 +169,24 @@ assertEquals(2, values.size()); assertEquals(new Date(10), values.get(0)); assertEquals(new Date(11), values.get(1)); + // usage of leading # is optional + parameters.put("dates", "#listBean"); + values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class); + assertEquals(2, values.size()); + assertEquals(new Date(10), values.get(0)); + assertEquals(new Date(11), values.get(1)); } public void testResolveAndRemoveReferenceListParameterInvalidBean() { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("dates", "#bean1,#bean3"); MyComponent my = new MyComponent(this.context); - List<Date> values = my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class); - assertEquals(1, values.size()); - assertEquals(new Date(10), values.get(0)); + try { + my.resolveAndRemoveReferenceListParameter(parameters, "dates", Date.class); + fail("returned without finding object in registry"); + } catch (IllegalArgumentException e) { + // test passes + } } public void testContextShouldBeSet() throws Exception { Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java?rev=890042&r1=890041&r2=890042&view=diff ============================================================================== --- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java (original) +++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java Sun Dec 13 10:18:22 2009 @@ -22,7 +22,6 @@ import org.apache.camel.Endpoint; import org.apache.camel.ResolveEndpointFailedException; import org.apache.camel.impl.HeaderFilterStrategyComponent; -import org.apache.camel.util.CamelContextHelper; import org.apache.camel.util.CastUtils; import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.URISupport; @@ -69,16 +68,12 @@ */ protected void configureParameters(Map<String, Object> parameters) { // lookup http binding in registry if provided - String ref = getAndRemoveParameter(parameters, "httpBindingRef", String.class); - if (ref != null) { - httpBinding = CamelContextHelper.mandatoryLookup(getCamelContext(), ref, HttpBinding.class); - } + httpBinding = resolveAndRemoveReferenceParameter( + parameters, "httpBindingRef", HttpBinding.class); // lookup http client front configurer in the registry if provided - ref = getAndRemoveParameter(parameters, "httpClientConfigurerRef", String.class); - if (ref != null) { - httpClientConfigurer = CamelContextHelper.mandatoryLookup(getCamelContext(), ref, HttpClientConfigurer.class); - } + httpClientConfigurer = resolveAndRemoveReferenceParameter( + parameters, "httpClientConfigurerRef", HttpClientConfigurer.class); // check the user name and password for basic authentication String username = getAndRemoveParameter(parameters, "username", String.class); Added: camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpReferenceParameterTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpReferenceParameterTest.java?rev=890042&view=auto ============================================================================== --- camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpReferenceParameterTest.java (added) +++ camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpReferenceParameterTest.java Sun Dec 13 10:18:22 2009 @@ -0,0 +1,88 @@ +/** + * 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.component.http; + +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.apache.commons.httpclient.HttpClient; +import org.junit.Test; + +/** + * Unit test for resolving reference parameters. + */ +public class HttpReferenceParameterTest extends CamelTestSupport { + + private static final String TEST_URI_1 = "http://localhost:8080?httpBindingRef=#customBinding&httpClientConfigurerRef=#customConfigurer"; + private static final String TEST_URI_2 = "http://localhost:8081?httpBindingRef=customBinding&httpClientConfigurerRef=customConfigurer"; + + private HttpEndpoint endpoint1; + private HttpEndpoint endpoint2; + + private TestHttpBinding testBinding; + private TestClientConfigurer testConfigurer; + + @Override + public void setUp() throws Exception { + this.testBinding = new TestHttpBinding(); + this.testConfigurer = new TestClientConfigurer(); + super.setUp(); + this.endpoint1 = (HttpEndpoint)context.getEndpoint(TEST_URI_1); + this.endpoint2 = (HttpEndpoint)context.getEndpoint(TEST_URI_2); + } + + @Test + public void testHttpBindingRef() { + assertSame(testBinding, endpoint1.getBinding()); + assertSame(testBinding, endpoint2.getBinding()); + } + + @Test + public void testHttpClientConfigurerRef() { + assertSame(testConfigurer, endpoint1.getHttpClientConfigurer()); + assertSame(testConfigurer, endpoint2.getHttpClientConfigurer()); + } + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry registry = super.createRegistry(); + registry.bind("customBinding", testBinding); + registry.bind("customConfigurer", testConfigurer); + return registry; + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() { + from("direct:start1").to(TEST_URI_1); + from("direct:start2").to(TEST_URI_2); + } + }; + } + + private static class TestHttpBinding extends DefaultHttpBinding { + } + + private static class TestClientConfigurer implements HttpClientConfigurer { + + public void configureHttpClient(HttpClient client) { + } + + } + +} Modified: camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java?rev=890042&r1=890041&r2=890042&view=diff ============================================================================== --- camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java (original) +++ camel/trunk/components/camel-jetty/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java Sun Dec 13 10:18:22 2009 @@ -17,7 +17,6 @@ package org.apache.camel.component.jetty; import java.net.URI; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -28,7 +27,6 @@ import org.apache.camel.component.http.HttpComponent; import org.apache.camel.component.http.HttpConsumer; import org.apache.camel.component.http.HttpEndpoint; -import org.apache.camel.util.CamelContextHelper; import org.apache.camel.util.CastUtils; import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.URISupport; @@ -99,18 +97,8 @@ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { uri = uri.startsWith("jetty:") ? remaining : uri; - // handlers - List<Handler> handlerList = new ArrayList<Handler>(); - String handlers = getAndRemoveParameter(parameters, "handlers", String.class); - if (handlers != null) { - // remove any leading # for reference lookup as we know its a reference lookup - handlers = handlers.replaceAll("#", ""); - // lookup each individual handler and add it to the list - for (String key : handlers.split(",")) { - handlerList.add(CamelContextHelper.mandatoryLookup(getCamelContext(), key, Handler.class)); - } - } - + List<Handler> handlerList = resolveAndRemoveReferenceListParameter(parameters, "handlers", Handler.class); + // configure regular parameters configureParameters(parameters); Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java?rev=890042&r1=890041&r2=890042&view=diff ============================================================================== --- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java (original) +++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java Sun Dec 13 10:18:22 2009 @@ -54,6 +54,7 @@ private static final transient Log LOG = LogFactory.getLog(JmsComponent.class); private static final String DEFAULT_QUEUE_BROWSE_STRATEGY = "org.apache.camel.component.jms.DefaultQueueBrowseStrategy"; + private static final String KEY_FORMAT_STRATEGY_PARAM = "jmsKeyFormatStrategy"; private JmsConfiguration configuration; private ApplicationContext applicationContext; private Requestor requestor; @@ -435,23 +436,17 @@ } // jms header strategy - String strategy = getAndRemoveParameter(parameters, "jmsKeyFormatStrategy", String.class); - if (strategy != null) { - if (EndpointHelper.isReferenceParameter(strategy)) { - String key = strategy.substring(1); - endpoint.setJmsKeyFormatStrategy(getCamelContext().getRegistry().lookup(key, JmsKeyFormatStrategy.class)); - } else { - // should be on of the default ones we support - if ("default".equalsIgnoreCase(strategy)) { - endpoint.setJmsKeyFormatStrategy(new DefaultJmsKeyFormatStrategy()); - } else if ("passthrough".equalsIgnoreCase(strategy)) { - endpoint.setJmsKeyFormatStrategy(new PassThroughJmsKeyFormatStrategy()); - } else { - throw new IllegalArgumentException("Unknown jmsKeyFormatStrategy option: " + strategy); - } - } + String strategyVal = getAndRemoveParameter(parameters, KEY_FORMAT_STRATEGY_PARAM, String.class); + if ("default".equalsIgnoreCase(strategyVal)) { + endpoint.setJmsKeyFormatStrategy(new DefaultJmsKeyFormatStrategy()); + } else if ("passthrough".equalsIgnoreCase(strategyVal)) { + endpoint.setJmsKeyFormatStrategy(new PassThroughJmsKeyFormatStrategy()); + } else { // a reference + parameters.put(KEY_FORMAT_STRATEGY_PARAM, strategyVal); + endpoint.setJmsKeyFormatStrategy(resolveAndRemoveReferenceParameter( + parameters, KEY_FORMAT_STRATEGY_PARAM, JmsKeyFormatStrategy.class)); } - + setProperties(endpoint.getConfiguration(), parameters); endpoint.setHeaderFilterStrategy(getHeaderFilterStrategy()); Modified: camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java?rev=890042&r1=890041&r2=890042&view=diff ============================================================================== --- camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java (original) +++ camel/trunk/components/camel-spring/src/main/java/org/apache/camel/component/xslt/XsltComponent.java Sun Dec 13 10:18:22 2009 @@ -53,11 +53,7 @@ XsltBuilder xslt = getCamelContext().getInjector().newInstance(XsltBuilder.class); // lets allow the converter to be configured - XmlConverter converter = null; - String converterName = getAndRemoveParameter(parameters, "converter", String.class); - if (converterName != null) { - converter = CamelContextHelper.mandatoryLookup(getCamelContext(), converterName, XmlConverter.class); - } + XmlConverter converter = resolveAndRemoveReferenceParameter(parameters, "converter", XmlConverter.class); if (converter == null) { converter = getXmlConverter(); } @@ -77,9 +73,8 @@ } } - String transformerFactoryName = getAndRemoveParameter(parameters, "transformerFactory", String.class); - if (transformerFactoryName != null) { - factory = CamelContextHelper.mandatoryLookup(getCamelContext(), transformerFactoryName, TransformerFactory.class); + if (parameters.get("transformerFactory") != null) { + factory = resolveAndRemoveReferenceParameter(parameters, "transformerFactory", TransformerFactory.class); } if (factory != null) { Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltReferenceParameterTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltReferenceParameterTest.java?rev=890042&view=auto ============================================================================== --- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltReferenceParameterTest.java (added) +++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/component/xslt/XsltReferenceParameterTest.java Sun Dec 13 10:18:22 2009 @@ -0,0 +1,95 @@ +/** + * 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.component.xslt; + +import javax.xml.transform.ErrorListener; +import javax.xml.transform.Source; +import javax.xml.transform.Templates; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.URIResolver; + +import org.apache.camel.CamelContext; +import org.apache.camel.TestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.builder.xml.XsltBuilder; +import org.apache.camel.converter.jaxp.XmlConverter; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.impl.ProcessorEndpoint; +import org.apache.camel.util.jndi.JndiContext; + +/** + * Unit test for testing reference parameters. + */ +public class XsltReferenceParameterTest extends TestSupport { + + private static final String TEST_URI_1 = + "xslt:org/apache/camel/component/xslt/transform.xsl?converter=#testConverter&transformerFactory=#testTransformerFactory"; + private static final String TEST_URI_2 = + "xslt:org/apache/camel/component/xslt/transform.xsl?converter=testConverter&transformerFactory=testTransformerFactory"; + + private TestConverter testConverter; + private TransformerFactory testTransformerFactory; + + private XsltBuilder builder1; + private XsltBuilder builder2; + + public void setUp() throws Exception { + JndiRegistry registry = new JndiRegistry(new JndiContext()); + RouteBuilder builder = createRouteBuilder(); + CamelContext context = new DefaultCamelContext(registry); + + testConverter = new TestConverter(); + testTransformerFactory = TransformerFactory.newInstance(); + + registry.bind("testConverter", testConverter); + registry.bind("testTransformerFactory", testTransformerFactory); + + ProcessorEndpoint pep1 = (ProcessorEndpoint)context.getEndpoint(TEST_URI_1); + ProcessorEndpoint pep2 = (ProcessorEndpoint)context.getEndpoint(TEST_URI_2); + + builder1 = (XsltBuilder)pep1.getProcessor(); + builder2 = (XsltBuilder)pep2.getProcessor(); + + context.addRoutes(builder); + context.start(); + } + + public void testConverterReference() { + assertSame(testConverter, builder1.getConverter()); + assertSame(testConverter, builder2.getConverter()); + } + + public void testTransformerFactoryReference() { + assertSame(testTransformerFactory, builder1.getConverter().getTransformerFactory()); + assertSame(testTransformerFactory, builder2.getConverter().getTransformerFactory()); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from("direct:a").to(TEST_URI_1); + from("direct:b").to(TEST_URI_2); + } + }; + } + + private static class TestConverter extends XmlConverter { + } + +}