簡體   English   中英

羅馬HttpClientFeedFetcher給出“無效的XML”異常

[英]Rome HttpClientFeedFetcher gives “Invalid XML” exception

我試圖使用羅馬只是為了測試,我試圖獲取一個簡單的RSS提要並不斷收到“無效的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'
}

我一定想念一些簡單的東西...如果有人可以指出我對羅馬有用的任何有用文檔。 另外,如果你想推薦一些更容易使用的東西,我不會設置在羅馬和任何其他java的RSS解析庫。 我只需要解析RSS提要。

我無法復制您的問題,但您可以嘗試為Feed fetcher添加自己的用戶代理字符串(以防他們重定向某些用戶代理):

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

另請參閱有關rome-fetcher棄用的問題 有一個有關如何使用Apache HttpClient獲取提要的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM