AtomPage edited by willem jiangAtom ComponentThe atom: component is used for polling atom feeds. Camel will default poll the feed every 60th seconds. Maven users will need to add the following dependency to their pom.xml for this component: <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-atom</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
You can append query options to the URI in the following format, ?option=value&option=value&... Exchange data formatCamel will set the In body on the returned Exchange with the entries. Depending on the splitEntries flag Camel will either return one Entry or a List<Entry>.
Camel can set the Feed object on the In header (see feedHeader option to disable this): Message HeadersCamel atom uses these headers.
SamplesIn this sample we poll James Strachan's blog.
from("atom://http://macstrac.blogspot.com/feeds/posts/default").to("seda:feeds");
In this sample we want to filter only good blogs we like to a SEDA queue. The sample also shows how to setup Camel standalone, not running in any Container or using Spring. // This is the CamelContext that is the heart of Camel private CamelContext context; // We use a simple Hashtable for our bean registry. For more advanced usage Spring is supported out-of-the-box private Hashtable beans = new Hashtable(); // We initialize Camel private void setupCamel() throws Exception { // First we register a blog service in our bean registry beans.put("blogService", new BlogService()); // Then we create the camel context with our bean registry context = new DefaultCamelContext(new CamelInitialContextFactory().getInitialContext(beans)); // Then we add all the routes we need using the route builder DSL syntax context.addRoutes(createRouteBuilder()); // And finally we must start Camel to let the magic routing begins context.start(); } /** * This is the route builder where we create our routes in the advanced Camel DSL syntax */ protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { public void configure() throws Exception { // We pool the atom feeds from the source for further processing in the seda queue // we set the delay to 1 second for each pool as this is a unit test also and we can // not wait the default poll interval of 60 seconds. // Using splitEntries=true will during polling only fetch one Atom Entry at any given time. // As the feed.atom file contains 7 entries, using this will require 7 polls to fetch the entire // content. When Camel have reach the end of entries it will refresh the atom feed from URI source // and restart - but as Camel by default uses the UpdatedDateFilter it will only deliver new // blog entries to "seda:feeds". So only when James Straham updates his blog with a new entry // Camel will create an exchange for the seda:feeds. from("atom:file:src/test/data/feed.atom?splitEntries=true&consumer.delay=1000").to("seda:feeds"); // From the feeds we filter each blot entry by using our blog service class from("seda:feeds").filter().method("blogService", "isGoodBlog").to("seda:goodBlogs"); // And the good blogs is moved to a mock queue as this sample is also used for unit testing // this is one of the strengths in Camel that you can also use the mock endpoint for your // unit tests from("seda:goodBlogs").to("mock:result"); } }; } /** * This is the actual junit test method that does the assertion that our routes is working * as expected */ @Test public void testFiltering() throws Exception { // Get the mock endpoint MockEndpoint mock = context.getEndpoint("mock:result", MockEndpoint.class); // There should be two good blog entries from the feed mock.expectedMessageCount(2); // Asserts that the above expectations is true, will throw assertions exception if it failed // Camel will default wait max 20 seconds for the assertions to be true, if the conditions // is true sooner Camel will continue mock.assertIsSatisfied(); } /** * Services for blogs */ public class BlogService { /** * Tests the blogs if its a good blog entry or not */ public boolean isGoodBlog(Exchange exchange) { Entry entry = exchange.getIn().getBody(Entry.class); String title = entry.getTitle(); // We like blogs about Camel boolean good = title.toLowerCase().contains("camel"); return good; } } See Also
Change Notification Preferences
View Online
|
View Change
|
Add Comment
|
- [CONF] Apache Camel > Atom confluence
- [CONF] Apache Camel > Atom confluence