Как читать RSS из Google App Engine? При получении JDOM не удалось создать синтаксический анализатор SAX

Я пытаюсь написать простой веб-сайт Google App Engine, который читает внешний RSS-канал. Я использую ROME с JDOM, однако у меня сложилось впечатление, что ROME несовместим с Google App Engine и с тем, как вы можете получать данные.

ROME использует метод build класса SyndFeedInput, но я не могу найти способ связать его с Google App Engine и URL Fetch.

Мой пример кода:

URL url = new URL(rss_url);
Reader r = new InputStreamReader(url.openStream());
SyndFeed feed = new SyndFeedInput().build(r);

Но в третьем ряду я получаю

java.lang.IllegalStateException: JDOM could not create a SAX parser

Он работает, если я запускаю код в собственном автономном приложении, но когда я запускаю код через Google App Engine локально, я получаю исключение.

Что я делаю не так и какие альтернативы я могу попробовать прочитать внешний RSS?


person corgrath    schedule 20.02.2010    source источник


Ответы (3)


Похоже, ROME не поддерживается в GAE:

http://old.nabble.com/ROME-and-AppEngine-td23290454.html

http://code.google.com/p/googleappengine/issues/detail?id=1367

Кажется, что обходной путь состоит в том, чтобы включить копию Xerces JAR в ваше приложение, чтобы JDOM не пытался загрузить его из самого GAE.

person skaffman    schedule 20.02.2010

Работал для меня с: GAE 1.4.0 rome 1.0 jdom 1.1.1 xercesImpl-2.11.0.jar xml-apis.jar

person Raf    schedule 05.01.2011

Есть способ обойти эту проблему с помощью JDOM, который затем решает проблему для ROME.

Поместите xercesImpl-x.x.x.jar в war / WEB-INF / lib

См. http://code.google.com/p/googleappengine/issues/detail?id=1367 Многие люди копируют больше, чем xercesImpl, или библиотеки, содержащие xerces (например, некоторые дистрибутивы xalan), однако xercesImpl - это все, что вам нужно.

Это все еще работа, поскольку кажется, что JDOM неправильно использует JAXP для загрузки парсера SAX GAE.

У меня работал с: GAE 1.3.7 rome 1.0 jdom 1.1.1 xercesImpl-2.6.1.jar

person byeo    schedule 18.09.2010