You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by kr...@apache.org on 2009/12/13 11:18:25 UTC
svn commit: r890042 - in /camel/trunk:
camel-core/src/main/java/org/apache/camel/impl/
camel-core/src/main/java/org/apache/camel/util/
camel-core/src/test/java/org/apache/camel/impl/
components/camel-http/src/main/java/org/apache/camel/component/http/ ...
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 {
+ }
+
+}