2016-06-22 2 views
1

У меня есть программа чтения rss, использующая интеграцию с пружиной. Я хочу узнать источник rss-объекта.Как получить источник сообщения rss feedChannel SyndEntry в Spring Integration?

Пример пункт:

  • название: "Топ общее: Больше Сухопутных войск, необходимых в Ливии"
  • ссылка: "cnn.com/blabla"
  • PubDate: «2016-06-22 10 : 10: 10 "

Я хочу знать, в какой ссылке rss пришлите мне этот элемент, потому что я установил его в функции init().

Результат: http://rss.cnn.com/rss/edition.rss

Вот мой канал канал конфигурации.

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

Это динамический механизм подачи каналов. Я читаю 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); 
} 

Так что я хочу пойти получить FeedEntryMessageSource полезной нагрузки в ServiceActivator для того, чтобы знать, к которым принадлежит какой ссылке RSS. Я поставил его 'rss.getSource() GetName().' В этой строке:

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

ответ

0

Я вижу, у вас есть прямая связь между rss.getLink() и rss.getSource().getName(). Итак, как насчет того, чтобы идти в вашем @ServiceActivator, например payload.getSource().getUri(), и получить желаемый name с вашего rssLinkService.

+0

Спасибо за ответ, но payload.getSource() имеет значение null для всех каналов. я пропал без вести? – Richard