2016-03-21 7 views
1

Ich versuche, Rom zu verwenden und nur zum Testen versuche ich, einen einfachen RSS-Feed abzurufen und weiterhin "Ungültige XML" -Fehler zu erhalten. Ich implementiere die Lösung in this solution, aber es funktioniert nicht für mich. Was mache ich falsch?Rom HttpClientFeedFetcher gibt "Ungültige XML" Ausnahme

Code:

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(); 
    } 
} 

Die Ausnahme, die ich bekommen ist:

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 

Und hier ist, wie ich Rom meinem Android-Projekt hinzuzufügen.

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

Ich muss etwas einfach fehlt ... Wenn jemand mich auf jede gute Dokumentation für Rom zeigen könnte, die helfen könnten. Außerdem bin ich nicht auf Rom eingestellt und jede andere RSS-Parsing-Bibliothek für Java könnte das tun, wenn Sie etwas leichter zu bedienen empfehlen möchten. Ich muss nur RSS-Feeds parsen.

Antwort

0

Ich konnte nicht Ihr Problem replizieren, aber Sie könnten versuchen, Ihren eigenen User-Agent-String für Futtermittel Abholer hinzuzufügen (falls sie bestimmte Benutzeragenten umleiten):

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 See. Es gibt ein Beispiel zum Abrufen von Feeds mit Apache HttpClient.