0

我想使用 RSSUtil 来读取 RSS 提要,但我遇到了类加载器的问题......

抛出的异常是:

com.sun.syndication.feed.synd.SyndFeedImpl cannot be cast to com.sun.syndication.feed.synd.SyndFeedImpl

我的代码是:

        SyndFeedImpl feed = null;
        final String _CLASS_NAME = "com.liferay.portlet.rss.util.RSSUtil";
        MethodKey _CONSTRUCTOR = new MethodKey(_CLASS_NAME, "getFeed", String.class);

        ObjectValuePair ovp = (ObjectValuePair) PortalClassInvoker.invoke(true, _CONSTRUCTOR, url);
        Class<SyndFeed> clazz = (Class<SyndFeed>) PortalClassLoaderUtil.getClassLoader().loadClass(
                "com.sun.syndication.feed.synd.SyndFeedImpl");

         feed = (SyndFeedImpl) ovp.getValue();

该问题也在https://www.liferay.com/fr/community/forums/-/message_boards/message/15812507中进行了解释。我试图做同样的事情,但它不起作用......

在此先感谢您的帮助...

更新:如果我使用下面的代码(没有 RSSUtil 的其他解决方案):

        URL feedUrl = new URL(url);
        HttpURLConnection httpcon = (HttpURLConnection) feedUrl.openConnection();

        SyndFeedInput input = new SyndFeedInput();
        XmlReader reader = new XmlReader(httpcon);
        SyndFeed feed = input.build(reader);

抛出的异常是:

java.lang.ClassCastException: com.sun.syndication.feed.synd.impl.ConverterForAtom10 cannot be cast to com.sun.syndication.feed.synd.Converter
4

1 回答 1

0

我遇到了同样的问题。我最终将两个罐子(dom4j.jar 和 rome.jar)从 liferayroot/tomcatxxx/webapps/ROOT/WEB-INF/lib 复制到 liferayroot/tomcatxxx/lib/ext

您得到的第一个错误是因为该类是由不同的类加载器(门户类加载器和您的 portlet 类加载器)加载的。

尝试复制罐子,应该可以

于 2015-03-17T16:28:59.963 回答