[[Atom-AtomComponent]]
Atom Component
~~~~~~~~~~~~~~

The *atom:* component is used for polling Atom feeds.

Camel will poll the feed every 60 seconds by default. +
 *Note:* The component currently only supports polling (consuming)
feeds.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<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>
------------------------------------------------------------

[[Atom-URIformat]]
URI format
^^^^^^^^^^

[source,java]
------------------------
atom://atomUri[?options]
------------------------

Where *atomUri* is the URI to the Atom feed to poll.

[[Atom-Options]]
Options
^^^^^^^

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Property |Default |Description
|`splitEntries` |`true` |If `true` Camel will poll the feed and for the subsequent polls return
each entry poll by poll. If the feed contains 7 entries then Camel will
return the first entry on the first poll, the 2nd entry on the next
poll, until no more entries where as Camel will do a new update on the
feed. If `false` then Camel will poll a fresh feed on every invocation.

|`filter` |`true` |Is only used by the split entries to filter the entries to return. Camel
will default use the `UpdateDateFilter` that only return new entries
from the feed. So the client consuming from the feed never receives the
same entry more than once. The filter will return the entries ordered by
the newest last.

|`lastUpdate` |`null` |Is only used by the filter, as the starting timestamp for selection
never entries (uses the `entry.updated` timestamp). Syntax format is:
`yyyy-MM-ddTHH:MM:ss`. Example: `2007-12-24T17:45:59`.

|`throttleEntries` |`true` |*Camel 2.5:* Sets whether all entries identified in a single feed poll
should be delivered immediately. If `true`, only one entry is processed
per `consumer.delay`. Only applicable when `splitEntries` is set to
`true`.

|`feedHeader` |`true` |Sets whether to add the Abdera Feed object as a header.

|`sortEntries` |`false` |If `splitEntries` is `true`, this sets whether to sort those entries by
updated date.

|`consumer.delay` |`500` |Delay in millis between each poll.

|`consumer.initialDelay` |`1000` |Millis before polling starts. 

|`consumer.userFixedDelay` |`false` |If `true`, use fixed delay between pools, otherwise fixed rate is used.
See
http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ScheduledExecutorService.html[ScheduledExecutorService]
in JDK for details.

|`username` |  | *Camel 2.16:* For basic authentication when polling from a HTTP feed

|`password` |  | *Camel 2.16:* For basic authentication when polling from a HTTP feed
|=======================================================================

You can append query options to the URI in the following format,
`?option=value&option=value&...`

[[Atom-Exchangedataformat]]
Exchange data format
^^^^^^^^^^^^^^^^^^^^

Camel 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>`.

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Option |Value |Behavior
|`splitEntries` |`true` |Only a single entry from the currently being processed feed is set:
`exchange.in.body(Entry)`

|`splitEntries` |`false` |The entire list of entries from the feed is set:
`exchange.in.body(List<Entry>)`
|=======================================================================

Camel can set the `Feed` object on the In header (see `feedHeader`
option to disable this):

[[Atom-MessageHeaders]]
Message Headers
^^^^^^^^^^^^^^^

Camel atom uses these headers.

[width="100%",cols="10%,90%",options="header",]
|=======================================================================
|Header |Description
|`CamelAtomFeed` |When consuming the `org.apache.abdera.model.Feed` object is set to this
header.
|=======================================================================

[[Atom-Samples]]
Samples
^^^^^^^

In this sample we poll James Strachan's blog.

[source,java]
---------------------------------------------------------------------------------
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.

[[Atom-SeeAlso]]
See Also
^^^^^^^^

* link:configuring-camel.html[Configuring Camel]
* link:component.html[Component]
* link:endpoint.html[Endpoint]
* link:getting-started.html[Getting Started]

* link:rss.html[RSS]

