springrssrome

Can not receive Data from RSS Feed in Java Spring


I want to receive Data from a RSS Feed in Java Spring with this code:

package org.springframework.integration.samples.feed;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.messaging.Message;
import org.springframework.messaging.PollableChannel;
import com.rometools.rome.feed.synd.SyndEntry;

public class Feed {

    public static void main(String[] args) {
        ConfigurableApplicationContext ac =
                new ClassPathXmlApplicationContext("META-INF/spring/integration/FeedInboundChannelAdapterSample-context.xml");
            PollableChannel feedChannel = ac.getBean("feedChannel", PollableChannel.class);
        for (int i = 0; i < 10; i++) {
            Message<SyndEntry> message = (Message<SyndEntry>) feedChannel.receive(1000);
            if (message != null){
                SyndEntry entry = message.getPayload();
                System.out.println(entry.getTitle());
            }
            else {
                break;
            }
        }
        ac.close();
 }
}

FeedInboundChannelAdapterSample-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-feed="http://www.springframework.org/schema/integration/feed"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/integration/feed http://www.springframework.org/schema/integration/feed/spring-integration-feed.xsd">

<int-feed:inbound-channel-adapter id="feedAdapter" 
                    channel="feedChannel" 
                    auto-startup="true"
                    url="http://pharmacie.lu/flux_rss.xml">
    <int:poller fixed-rate="10000" max-messages-per-poll="100" />
</int-feed:inbound-channel-adapter>

<int:channel id="feedChannel">
    <int:queue/>
</int:channel>

The URL with the feed: http://pharmacie.lu/flux_rss.xml

The Problem is that I get a null message back and I dont know why:

    14:32:13.614 INFO  [main][org.springframework.integration.config.IntegrationRegistrar] No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
    14:32:13.621 DEBUG [main][org.springframework.integration.config.IntegrationRegistrar] The '#jsonPath' SpEL function cannot be registered: there is no jayway json-path.jar on the classpath.
    14:32:13.621 DEBUG [main][org.springframework.integration.config.IntegrationRegistrar] SpEL function '#xpath' isn't registered: there is no spring-integration-xml.jar on the classpath.
    14:32:13.739 INFO  [main][org.springframework.integration.config.DefaultConfiguringBeanFactoryPostProcessor] No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
    14:32:13.743 INFO  [main][org.springframework.integration.config.DefaultConfiguringBeanFactoryPostProcessor] No bean named 'taskScheduler' has been explicitly defined. Therefore, a default ThreadPoolTaskScheduler will be created.
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    14:32:14.075 DEBUG [main][org.springframework.integration.config.GlobalChannelInterceptorProcessor] No global channel interceptors.
    14:32:14.078 INFO  [main][org.springframework.integration.endpoint.EventDrivenConsumer] Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
    14:32:14.078 INFO  [main][org.springframework.integration.channel.PublishSubscribeChannel] Channel 'org.springframework.context.support.ClassPathXmlApplicationContext@3b764bce.errorChannel' has 1 subscriber(s).
    14:32:14.078 INFO  [main][org.springframework.integration.endpoint.EventDrivenConsumer] started _org.springframework.integration.errorLogger
    14:32:14.080 INFO  [main][org.springframework.integration.endpoint.SourcePollingChannelAdapter] started feedAdapter
    14:32:14.085 TRACE [main][org.springframework.integration.channel.QueueChannel] preReceive on channel 'feedChannel'
    14:32:14.125 DEBUG [task-scheduler-1][org.springframework.integration.feed.inbound.FeedEntryMessageSource]  EVENT: Feed Polled. URL = http://pharmacie.lu/flux_rss.xml
    14:32:14.242 DEBUG [task-scheduler-1][org.springframework.integration.feed.inbound.FeedEntryMessageSource] retrieved feed at url 'http://pharmacie.lu/flux_rss.xml'
    14:32:14.243 DEBUG [task-scheduler-1][org.springframework.integration.endpoint.SourcePollingChannelAdapter] Received no Message during the poll, returning 'false'
    14:32:15.086 TRACE [main][org.springframework.integration.channel.QueueChannel] postReceive on channel 'feedChannel', message is null
    14:32:15.091 INFO  [main][org.springframework.integration.endpoint.SourcePollingChannelAdapter] stopped feedAdapter
    14:32:15.091 INFO  [main][org.springframework.integration.endpoint.EventDrivenConsumer] Removing {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
    14:32:15.091 INFO  [main][org.springframework.integration.channel.PublishSubscribeChannel] Channel 'org.springframework.context.support.ClassPathXmlApplicationContext@3b764bce.errorChannel' has 0 subscriber(s).
    14:32:15.092 INFO  [main][org.springframework.integration.endpoint.EventDrivenConsumer] stopped _org.springframework.integration.errorLogger

When I use the url rss.cnn.com/rss/cnn_topstories.rss instead, the code works.

(The code is from an example of the Spring Integration RSS Feed Module at github: https://github.com/spring-projects/spring-integration-samples/tree/master/basic/feed)

My question is why the code above works with the url in the example but not with the url pharmacie.lu/flux_rss.xml?


Solution

  • Currently, FeedEntryMessageSource in spring-integration expects feed's entries to have some last modified dates, but in pharmacie.lu's feed there are none, so all entries ignored and no content will be returned.