The rss: component is used for polling RSS feeds. Fuse Mediation Router will default poll the feed every 60th seconds.
Note: The component currently only supports polling (consuming) feeds.
rss:rssUri
Where rssUri
is the URI to the RSS feed to poll.
You can append query options to the URI in the following format,
?option=value&option=value&...
Property | Default | Description |
---|---|---|
splitEntries
|
true
|
If true , Fuse Mediation Router splits a feed into its individual entries and
returns each entry, poll by poll. For example, if a feed contains seven entries, Fuse Mediation Router
returns the first entry on the first poll, the second entry on the second poll, and so on.
When no more entries are left in the feed, Fuse Mediation Router contacts the remote RSS URI to obtain
a new feed. If false , Fuse Mediation Router obtains a fresh feed on every poll and
returns all of the feed's entries. |
filter
|
true
|
Use in combination with the splitEntries option in order to filter
returned entries. By default, Fuse Mediation Router applies the UpdateDateFilter
filter, which returns only new entries from the feed, ensuring that the consumer endpoint
never receives an entry more than once. The filter orders the entries chronologically,
with the newest returned last. |
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. |
lastUpdate
|
null
|
Use in combination with the filter option to block entries earlier
than a specific date/time (uses the entry.updated timestamp). The
format is: yyyy-MM-ddTHH:MM:ss . Example:
2007-12-24T17:45:59 . |
feedHeader
|
true
|
Specifies whether to add the ROME SyndFeed object as a header. |
sortEntries
|
false
|
If splitEntries is true , this specifies whether
to sort the entries by updated date. |
consumer.delay
|
60000
|
Delay in milliseconds between each poll. |
consumer.initialDelay
|
1000
|
Milliseconds before polling starts. |
consumer.userFixedDelay
|
false
|
Set to true to use fixed delay between pools, otherwise fixed rate
is used. See ScheduledExecutorService in JDK for details. |
Fuse Mediation Router initializes the In body on the Exchange with a ROME SyndFeed
.
Depending on the value of the splitEntries
flag, Fuse Mediation Router returns either a
SyndFeed
with one SyndEntry
or a
java.util.List
of SyndEntrys
.
Option | Value | Behavior |
---|---|---|
splitEntries
|
true
|
A single entry from the current feed is set in the exchange. |
splitEntries
|
false
|
The entire list of entries from the current feed is set in the exchange. |
Header | Description |
---|---|
org.apache.camel.component.rss.feed
|
Fuse Mediation Router 1.x: The entire SyncFeed object. |
CamelRssFeed
|
Fuse Mediation Router 2.0: The entire SyncFeed object. |
The RSS component ships with an RSS dataformat that can be used to convert between String (as XML) and ROME RSS model objects.
marshal = from ROME
SyndFeed
to XMLString
unmarshal = from XML
String
to ROMESyndFeed
A route using this would look something like this:
from("rss:file:src/test/data/rss20.xml?splitEntries=false&consumer.delay=1000").marshal().rss().to("mock:marshal");
The purpose of this feature is to make it possible to use Fuse Mediation Router's lovely built-in expressions for manipulating RSS messages. As shown below, an XPath expression can be used to filter the RSS message:
// only entries with Fuse Mediation Router in the title will get through the filter from("rss:file:src/test/data/rss20.xml?splitEntries=true&consumer.delay=100") .marshal().rss().filter().xpath("//item/title[contains(.,'Camel')]").to("mock:result");
You can filter out entries quite easily using XPath, as shown in the data format section above. You can also exploit Fuse Mediation Router's Bean Integration to implement your own conditions. For instance, a filter equivalent to the XPath example above would be:
// only entries with Camel in the title will get through the filter from("rss:file:src/test/data/rss20.xml?splitEntries=true&consumer.delay=100"). filter().method("myFilterBean", "titleContainsCamel").to("mock:result");
The custom bean for this would be:
public static class FilterBean { public boolean titleContainsCamel(@Body SyndFeed feed) { SyndEntry firstEntry = (SyndEntry) feed.getEntries().get(0); return firstEntry.getTitle().contains("Camel"); } }