2016-03-21 4 views
1

Я пытаюсь использовать Рим и просто для тестирования, я пытаюсь получить простой RSS-канал и продолжать получать ошибку «Недопустимый XML». Я реализую решение, данное в this solution, но оно не работает для меня. Что я делаю не так?Rome HttpClientFeedFetcher дает исключение «Invalid XML»

Код:

private void fetchRSSDetails() { 
    HttpClientFeedFetcher feedFetcher = new HttpClientFeedFetcher(); 
    try { 
     SyndFeed feed = feedFetcher.retrieveFeed(new URL("http://feeds.bbci.co.uk/news/world/rss.xml")); 
     System.out.println(feed.getLink()); 
    } catch (IllegalArgumentException | IOException | FeedException | FetcherException e) { 
     e.printStackTrace(); 
    } 
} 

Исключение я получаю:

com.rometools.rome.io.ParsingFeedException: Invalid XML 
    at com.rometools.rome.io.WireFeedInput.build(WireFeedInput.java:241) 
    at com.rometools.rome.io.SyndFeedInput.build(SyndFeedInput.java:154) 
    at com.rometools.fetcher.impl.HttpClientFeedFetcher.retrieveFeed(HttpClientFeedFetcher.java:354) 
    at com.rometools.fetcher.impl.HttpClientFeedFetcher.getFeed(HttpClientFeedFetcher.java:261) 
    at com.rometools.fetcher.impl.HttpClientFeedFetcher.retrieveFeed(HttpClientFeedFetcher.java:246) 
    at com.rometools.fetcher.impl.HttpClientFeedFetcher.retrieveFeed(HttpClientFeedFetcher.java:157) 
    at com.my.feed.subscriptions.SearchTask.fetchRSSDetails(SearchTask.java:168) 
    at com.my.feed.subscriptions.SearchTask.doInBackground(SearchTask.java:93) 
    at com.my.feed.subscriptions.SearchTask.doInBackground(SearchTask.java:54) 
    at android.os.AsyncTask$2.call(AsyncTask.java:287) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
    at java.lang.Thread.run(Thread.java:856) 
Caused by: org.jdom2.JDOMException: http://apache.org/xml/features/disallow-doctype-decl feature not recognized for SAX driver org.apache.harmony.xml.ExpatReader 
    at org.jdom2.input.SAXBuilder.internalSetFeature(SAXBuilder.java:1025) 
    at org.jdom2.input.SAXBuilder.configureParser(SAXBuilder.java:976) 
    at org.jdom2.input.SAXBuilder.buildEngine(SAXBuilder.java:856) 
    at org.jdom2.input.SAXBuilder.getEngine(SAXBuilder.java:904) 
    at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1196) 
    at com.rometools.rome.io.WireFeedInput.build(WireFeedInput.java:234) 
    ... 15 more 

А вот как я добавить Рим в мой Android проекта.

compile ('com.rometools:rome:1.5.1'){ 
    exclude module: 'slf4j-api' 
} 
compile ('com.rometools:rome-fetcher:1.5.1'){ 
    exclude module: 'slf4j-api' 
} 

Должно быть, мне не хватает чего-то простого ... Если кто-нибудь может указать мне любую хорошую документацию для Рима, которая могла бы помочь. Кроме того, я не установлен в Риме, и любая другая библиотека RSS-анализа для java могла бы сделать, если вы хотите рекомендовать что-то более простое в использовании. Мне нужно только разобрать RSS-каналы.

ответ

0

Я не мог повторить свой вопрос, но вы можете попробовать добавить свою строку агента пользователя для подачи Сборщика (в случае, если они перенаправляют некоторые агент пользователя):

SyndFeed feed = feedFetcher.retrieveFeed("your-rss-reader-user-agent", new URL("http://feeds.bbci.co.uk/news/world/rss.xml")); 

См also this issue about deprecation of rome-fetcher. Пример использования фидов с использованием Apache HttpClient.

Смежные вопросы