Repository: camel Updated Branches: refs/heads/master 48020041f -> 2ded240dd
CAMEL-9501 Support to setup the filter InitParameters from Jetty URI Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2ded240d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2ded240d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2ded240d Branch: refs/heads/master Commit: 2ded240ddcb5fc92f6dd56e606e0906e63a21a4e Parents: 4802004 Author: Willem Jiang <willem.ji...@gmail.com> Authored: Sun Feb 21 18:56:31 2016 +0800 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Sun Feb 21 19:09:24 2016 +0800 ---------------------------------------------------------------------- .../org/apache/camel/util/IntrospectionSupport.java | 15 +++++++++++++++ .../camel/component/jetty/JettyHttpComponent.java | 10 +++++++++- .../camel/component/jetty/JettyHttpEndpoint.java | 15 +++++++++++++++ .../camel/component/jetty/CustomFiltersTest.java | 9 +++++++-- 4 files changed, 46 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2ded240d/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java b/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java index e4a98df..46fd82e 100755 --- a/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java +++ b/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java @@ -448,6 +448,21 @@ public final class IntrospectionSupport { return rc; } + public static Map<String, String> extractStringProperties(Map<String, Object> properties) { + ObjectHelper.notNull(properties, "properties"); + + Map<String, String> rc = new LinkedHashMap<String, String>(properties.size()); + + for (Iterator<Map.Entry<String, Object>> it = properties.entrySet().iterator(); it.hasNext();) { + Map.Entry<String, Object> entry = it.next(); + String name = entry.getKey(); + String value = entry.getValue().toString(); + rc.put(name, value); + } + + return rc; + } + public static boolean setProperties(CamelContext context, TypeConverter typeConverter, Object target, Map<String, Object> properties) throws Exception { ObjectHelper.notNull(target, "target"); ObjectHelper.notNull(properties, "properties"); http://git-wip-us.apache.org/repos/asf/camel/blob/2ded240d/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java index ca6afc0..5e39a14 100644 --- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java +++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java @@ -185,6 +185,9 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements // extract httpClient. parameters Map<String, Object> httpClientParameters = IntrospectionSupport.extractProperties(parameters, "httpClient."); + // extract filterInit. parameters + Map<String, String> filterInitParameters = IntrospectionSupport.extractStringProperties(IntrospectionSupport.extractProperties(parameters, "filterInit.")); + String address = remaining; URI addressUri = new URI(UnsafeUriCharactersEncoder.encodeHttpURI(address)); URI endpointUri = URISupport.createRemainingURI(addressUri, parameters); @@ -217,10 +220,12 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements } // setup the proxy host and proxy port - if (httpClientParameters != null && !httpClientParameters.isEmpty()) { endpoint.setHttpClientParameters(httpClientParameters); } + if (filterInitParameters != null && !filterInitParameters.isEmpty()) { + endpoint.setFilterInitParameters(filterInitParameters); + } if (handlerList.size() > 0) { endpoint.setHandlers(handlerList); } @@ -369,6 +374,9 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements List<Filter> filters = endpoint.getFilters(); for (Filter filter : filters) { FilterHolder filterHolder = new FilterHolder(); + if (endpoint.getFilterInitParameters() != null) { + filterHolder.setInitParameters(endpoint.getFilterInitParameters()); + } filterHolder.setFilter(new CamelFilterWrapper(filter)); String pathSpec = endpoint.getPath(); if (pathSpec == null || "".equals(pathSpec)) { http://git-wip-us.apache.org/repos/asf/camel/blob/2ded240d/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java index 81bf601..c5f11e5 100644 --- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java +++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java @@ -95,6 +95,10 @@ public abstract class JettyHttpEndpoint extends HttpCommonEndpoint { description = "Allows using a custom filters which is putted into a list and can be find in the Registry." + " Multiple values can be separated by comma.") private List<Filter> filters; + @UriParam(label = "consumer, advanced", prefix = "filter.", multiValue = true, + description = "Configuration of the filter init parameters. These parameters will be applied to the filter list before starting the jetty server.") + private Map<String, String> filterInitParameters; + @UriParam(label = "producer,advanced", description = "To use a custom JettyHttpBinding which be used to customize how a response should be written for the producer.") private JettyHttpBinding jettyBinding; @@ -407,6 +411,17 @@ public abstract class JettyHttpEndpoint extends HttpCommonEndpoint { this.httpClientParameters = httpClientParameters; } + public Map<String, String> getFilterInitParameters() { + return filterInitParameters; + } + + /** + * Configuration of the filter init parameters. These parameters will be applied to the filter list before starting the jetty server. + */ + public void setFilterInitParameters(Map<String, String> filterInitParameters) { + this.filterInitParameters = filterInitParameters; + } + public boolean isEnableCORS() { return enableCORS; } http://git-wip-us.apache.org/repos/asf/camel/blob/2ded240d/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/CustomFiltersTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/CustomFiltersTest.java b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/CustomFiltersTest.java index c60eaa9..c8478b3 100644 --- a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/CustomFiltersTest.java +++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/CustomFiltersTest.java @@ -40,16 +40,18 @@ import org.junit.Test; public class CustomFiltersTest extends BaseJettyTest { private static class MyTestFilter implements Filter { + private String keyWord; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // set a marker attribute to show that this filter class was used ((HttpServletResponse)response).addHeader("MyTestFilter", "true"); + ((HttpServletResponse)response).setHeader("KeyWord", keyWord); chain.doFilter(request , response); } @Override public void init(FilterConfig filterConfig) throws ServletException { - // do nothing here + keyWord = filterConfig.getInitParameter("keyWord"); } @Override @@ -73,6 +75,9 @@ public class CustomFiltersTest extends BaseJettyTest { String result = httppost.getResponseBodyAsString(); assertEquals("Get a wrong result", "This is a test response", result); assertNotNull("Did not use custom multipart filter", httppost.getResponseHeader("MyTestFilter")); + + // just make sure the KeyWord header is set + assertEquals("Did not set the right KeyWord header", "KEY", httppost.getResponseHeader("KeyWord").getValue()); } @Test @@ -94,7 +99,7 @@ public class CustomFiltersTest extends BaseJettyTest { public void configure() throws Exception { // Test the filter list options - from("jetty://http://localhost:{{port}}/testFilters?filtersRef=myFilters").process(new Processor() { + from("jetty://http://localhost:{{port}}/testFilters?filtersRef=myFilters&filterInit.keyWord=KEY").process(new Processor() { public void process(Exchange exchange) throws Exception { Message in = exchange.getIn(); String request = in.getBody(String.class);