2016-06-22 8 views
1

私は春の統合を使用してRSSフィードリーダーを持っています。私はRSSアイテムのソースを学びたい。Spring Integrationのrss feedChannel SyndEntryメッセージの入手方法?

例項目:

  • タイトル: "トップ一般:リビアに必要なその他の地上部隊"
  • リンク: "cnn.com/blabla"
  • pubDateの:「2016年6月22日10 :10:10"

私はINIT()関数でそれを設定しているため、RSSのリンクが私にこのアイテムを送信するかを知りたいです。

結果:http://rss.cnn.com/rss/edition.rss

はここに私の供給チャネルの設定です。

@Bean 
public MessageChannel feedChannel() { 
return new QueueChannel(500); 
} 

これは動的フィードチャネルクリエーターです。私はDBからrssリンクを読み、チャンネルを作成します。

@PostConstruct 
public void init() throws Exception{ 

List<RssLink> rssLinks = rssLinkService.findAll(); 

if(rssLinks != null && rssLinks.size() > 0) 
{ 
    for(RssLink rss : rssLinks) { 
    QueueChannel channel = (QueueChannel) context.getBean("feedChannel"); 
    SourcePollingChannelAdapter adapter = new SourcePollingChannelAdapter(); 
    adapter.setApplicationContext(context); 
    adapter.setBeanName("adapter." + rss.getSource().getName()); 

    FeedEntryMessageSource source = new FeedEntryMessageSource(new URL(rss.getLink()), rss.getSource().getName()); 
    source.setApplicationContext(context); 
    source.setBeanName(rss.getSource().getDomain()); 
    source.setBeanFactory(beanFactory); 
    source.afterPropertiesSet(); 

    adapter.setSource(source); 
    adapter.setOutputChannel(channel); 
    PeriodicTrigger trigger = new PeriodicTrigger(300000); 
    adapter.setTrigger(trigger); 

    adapter.setMaxMessagesPerPoll(100); 
    adapter.setBeanFactory(beanFactory); 
    adapter.afterPropertiesSet(); 
    adapter.start(); 
    } 
} 
} 

これはチャンネル内の項目の読者です。

@ServiceActivator(inputChannel = "feedChannel") 
public void feedChannel(Message<SyndEntry> message) { 
    SyndEntry payload = message.getPayload(); 
    MessageHeaders header = message.getHeaders(); 
    Feed feed = new Feed(); 
    feed.setLink(payload.getLink()); 
    feed.setTitle(payload.getTitle()); 
    //feed.setSource(I don't know which rss link send me this item); 
} 

だから私は、アイテムがどのRSSリンクの属する知るためにServiceActivatorにおけるペイロードのFeedEntryMessageSourceを取りに行くしたいです。私は、この行でそれは。rss.getSource()のgetName() 'を設定:

FeedEntryMessageSource source = new FeedEntryMessageSource(new URL(rss.getLink()), rss.getSource().getName()); 

答えて

0

私はあなたがrss.getLink()rss.getSource().getName()間の直接リンクを持っている参照してください。だから、あなたの@ServiceActivatorの道を行くと、payload.getSource().getUri()のようになり、あなたのrssLinkServiceから希望のnameを取得してください。

+0

回答ありがとうございますが、payload.getSource()はすべてのフィードでnullです。私はsthを逃していますか? – Richard

関連する問題