Author: davsclaus Date: Tue Nov 10 07:22:33 2009 New Revision: 834374 URL: http://svn.apache.org/viewvc?rev=834374&view=rev Log: CAMEL-2150: Fixed rss/atom components sending camel parameters when using http.
Added: camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpConsumerTest.java - copied, changed from r834163, camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpNoCamelParametersTest.java (with props) camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssHttpNoCamelParametersTest.java (with props) Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.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=834374&r1=834373&r2=834374&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 Tue Nov 10 07:22:33 2009 @@ -93,10 +93,25 @@ } } + afterConfiguration(uri, path, endpoint, parameters); return endpoint; } /** + * Strategy to do post configuration logic. + * <p/> + * Can be used to construct an URI based on the remaining parameters. For example the parameters that configures + * the endpoint have been removed from the parameters which which leaves it with only additional parameters. + * + * @param endpoint the created endpoint + * @param parameters the remaining parameters after the endpoint has been created and parsed the parameters + * @throws Exception can be thrown to indicate error creating the endpoint + */ + protected void afterConfiguration(String uri, String remaining, Endpoint endpoint, Map parameters) throws Exception { + // noop + } + + /** * Strategy for validation of parameters, that was not able to be resolved to any endpoint options. * * @param uri the uri - the uri the end user provided untouched Modified: camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java?rev=834374&r1=834373&r2=834374&view=diff ============================================================================== --- camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java (original) +++ camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java Tue Nov 10 07:22:33 2009 @@ -19,6 +19,7 @@ import java.net.URI; import java.util.Map; +import org.apache.camel.Endpoint; import org.apache.camel.component.feed.FeedComponent; import org.apache.camel.component.feed.FeedEndpoint; import org.apache.camel.util.URISupport; @@ -34,18 +35,28 @@ @Override protected FeedEndpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception { + return new AtomEndpoint(uri, this, null); + } - // Parameters should be kept in the remaining path, since they might be needed to get the actual ATOM feed - URI remainingUri = URISupport.createRemainingURI(new URI(remaining), parameters); + @Override + protected void afterConfiguration(String uri, String remaining, Endpoint endpoint, Map parameters) throws Exception { + AtomEndpoint atom = (AtomEndpoint) endpoint; + if (atom.getFeedUri() != null) { + // already set so do not change it + return; + } - // if http or https then the uri should include the parameters as we can have URI parameters - // that need to be sent to the remote server when retrieving feeds - String scheme = remainingUri.getScheme(); - if (scheme != null && (scheme.equals("http") || scheme.equals("https"))) { - return new AtomEndpoint(uri, this, remainingUri.toString()); + // recreate feed uri after we have configured the endpoint so we can use the left over parameters + // for the http feed + String feedUri; + if (!parameters.isEmpty()) { + URI remainingUri = URISupport.createRemainingURI(new URI(remaining), parameters); + feedUri = remainingUri.toString(); + } else { + feedUri = remaining; } - return new AtomEndpoint(uri, this, remaining); + atom.setFeedUri(feedUri); } } Copied: camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpConsumerTest.java (from r834163, camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpConsumerTest.java?p2=camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpConsumerTest.java&p1=camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java&r1=834163&r2=834374&rev=834374&view=diff ============================================================================== --- camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java (original) +++ camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpConsumerTest.java Tue Nov 10 07:22:33 2009 @@ -16,57 +16,31 @@ */ package org.apache.camel.component.atom; -import java.util.List; - -import org.apache.abdera.model.Feed; - -import org.apache.camel.Exchange; -import org.apache.camel.Message; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Ignore; import org.junit.Test; /** - * Unit test for AtomPollingConsumer + * Unit test for consuming from a http feed */ -public class AtomPollingConsumerTest extends CamelTestSupport { +public class AtomHttpConsumerTest extends CamelTestSupport { + @Ignore("requires to be online for testing") @Test - public void testNoSplitEntries() throws Exception { + public void testHttpConsumer() throws Exception { MockEndpoint mock = getMockEndpoint("mock:result"); mock.expectedMessageCount(1); mock.assertIsSatisfied(); - - Exchange exchange = mock.getExchanges().get(0); - Message in = exchange.getIn(); - assertNotNull(in); - assertTrue(in.getBody() instanceof List); - assertTrue(in.getHeader(AtomConstants.ATOM_FEED) instanceof Feed); - - Feed feed = in.getHeader(AtomConstants.ATOM_FEED, Feed.class); - assertEquals("James Strachan", feed.getAuthor().getName()); - - List entries = in.getBody(List.class); - assertEquals(7, entries.size()); - } - - @Test - public void testUsingAtomUriParameter() throws Exception { - MockEndpoint mock = getMockEndpoint("mock:result2"); - mock.expectedMessageCount(1); - mock.assertIsSatisfied(); } protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { public void configure() throws Exception { - from("atom:file:src/test/data/feed.atom?splitEntries=false").to("mock:result"); - - // this is a bit weird syntax that normally is not used using the feedUri parameter - from("atom:?feedUri=file:src/test/data/feed.atom&splitEntries=false").to("mock:result2"); + from("atom:http://feeds2.feedburner.com/ApacheCamel.atom?splitEntries=false").to("mock:result"); } }; } -} +} \ No newline at end of file Added: camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpNoCamelParametersTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpNoCamelParametersTest.java?rev=834374&view=auto ============================================================================== --- camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpNoCamelParametersTest.java (added) +++ camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpNoCamelParametersTest.java Tue Nov 10 07:22:33 2009 @@ -0,0 +1,47 @@ +/** + * 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.atom; + +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +/** + * @version $Revision$ + */ +public class AtomHttpNoCamelParametersTest extends CamelTestSupport { + + @Test + public void testAtomHttpNoCamelParameters() throws Exception { + AtomEndpoint atom = context.getEndpoint("atom://http://www.iafrica.com/pls/cms/grapevine.xml?sortEntries=true&feedHeader=true", AtomEndpoint.class); + assertNotNull(atom); + + assertEquals("http://www.iafrica.com/pls/cms/grapevine.xml", atom.getFeedUri()); + assertEquals(true, atom.isFeedHeader()); + assertEquals(true, atom.isSortEntries()); + } + + @Test + public void testAtomHttpNoCamelParametersAndOneFeedParameter() throws Exception { + AtomEndpoint atom = context.getEndpoint("atom://http://www.iafrica.com/pls/cms/grapevine.xml?sortEntries=true&feedHeader=true&foo=bar", AtomEndpoint.class); + assertNotNull(atom); + + assertEquals("http://www.iafrica.com/pls/cms/grapevine.xml?foo=bar", atom.getFeedUri()); + assertEquals(true, atom.isFeedHeader()); + assertEquals(true, atom.isSortEntries()); + } + +} Propchange: camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpNoCamelParametersTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomHttpNoCamelParametersTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java?rev=834374&r1=834373&r2=834374&view=diff ============================================================================== --- camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java (original) +++ camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java Tue Nov 10 07:22:33 2009 @@ -58,6 +58,12 @@ mock.assertIsSatisfied(); } + @Test + public void testNoCamelParametersInFeedUri() throws Exception { + AtomEndpoint endpoint = context.getEndpoint("atom:file:src/test/data/feed.atom?splitEntries=false", AtomEndpoint.class); + assertEquals("file:src/test/data/feed.atom", endpoint.getFeedUri()); + } + protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { public void configure() throws Exception { Modified: camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java?rev=834374&r1=834373&r2=834374&view=diff ============================================================================== --- camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java (original) +++ camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java Tue Nov 10 07:22:33 2009 @@ -19,6 +19,7 @@ import java.net.URI; import java.util.Map; +import org.apache.camel.Endpoint; import org.apache.camel.component.feed.FeedComponent; import org.apache.camel.component.feed.FeedEndpoint; import org.apache.camel.util.URISupport; @@ -31,15 +32,28 @@ public class RssComponent extends FeedComponent { protected FeedEndpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception { + return new RssEndpoint(uri, this, null); + } - // Parameters should be kept in the remaining path, since they might be needed to get the actual RSS feed - URI remainingUri = URISupport.createRemainingURI(new URI(remaining), parameters); + @Override + protected void afterConfiguration(String uri, String remaining, Endpoint endpoint, Map parameters) throws Exception { + RssEndpoint rss = (RssEndpoint) endpoint; + if (rss.getFeedUri() != null) { + // already set so do not change it + return; + } - if (remainingUri.getScheme().equals("http") || remainingUri.getScheme().equals("https")) { - return new RssEndpoint(uri, this, remainingUri.toString()); + // recreate feed uri after we have configured the endpoint so we can use the left over parameters + // for the http feed + String feedUri; + if (!parameters.isEmpty()) { + URI remainingUri = URISupport.createRemainingURI(new URI(remaining), parameters); + feedUri = remainingUri.toString(); + } else { + feedUri = remaining; } - return new RssEndpoint(uri, this, remaining); + rss.setFeedUri(feedUri); } - + } \ No newline at end of file Added: camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssHttpNoCamelParametersTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssHttpNoCamelParametersTest.java?rev=834374&view=auto ============================================================================== --- camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssHttpNoCamelParametersTest.java (added) +++ camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssHttpNoCamelParametersTest.java Tue Nov 10 07:22:33 2009 @@ -0,0 +1,47 @@ +/** + * 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.rss; + +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.Test; + +/** + * @version $Revision$ + */ +public class RssHttpNoCamelParametersTest extends CamelTestSupport { + + @Test + public void testRssHttpNoCamelParameters() throws Exception { + RssEndpoint rss = context.getEndpoint("rss://http://www.iafrica.com/pls/cms/grapevine.xml?sortEntries=true&feedHeader=true", RssEndpoint.class); + assertNotNull(rss); + + assertEquals("http://www.iafrica.com/pls/cms/grapevine.xml", rss.getFeedUri()); + assertEquals(true, rss.isFeedHeader()); + assertEquals(true, rss.isSortEntries()); + } + + @Test + public void testRssHttpNoCamelParametersAndOneFeedParameter() throws Exception { + RssEndpoint rss = context.getEndpoint("rss://http://www.iafrica.com/pls/cms/grapevine.xml?sortEntries=true&feedHeader=true&foo=bar", RssEndpoint.class); + assertNotNull(rss); + + assertEquals("http://www.iafrica.com/pls/cms/grapevine.xml?foo=bar", rss.getFeedUri()); + assertEquals(true, rss.isFeedHeader()); + assertEquals(true, rss.isSortEntries()); + } + +} Propchange: camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssHttpNoCamelParametersTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssHttpNoCamelParametersTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date