【问题标题】:Getting an error trying to parse an atom feed from connections using abdera尝试使用 abdera 解析来自连接的原子提要时出错
【发布时间】:2015-02-23 23:15:07
【问题描述】:

我在尝试解析 atom 提要时收到以下错误。 org.apache.abdera.parser.ParseException:java.lang.ArrayIndexOutOfBoundsException 在 org.apache.abdera.parser.stax.FOMParser.parse(FOMParser.java:128) 在 org.apache.abdera.util.AbstractParser.parse(AbstractParser.java:73) 在 testfeedreader.TestFeedReader.main(TestFeedReader.java:44) 引起:java.lang.ArrayIndexOutOfBoundsException ....

这是我给读者的代码。我硬编码了用于测试的 url:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package testfeedreader;

import java.io.IOException;
import java.net.URL;
import java.util.List;

import org.apache.abdera.Abdera;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
import org.apache.abdera.model.Category;
import org.apache.abdera.model.Link;
import org.apache.abdera.parser.ParseException;
import org.apache.abdera.parser.Parser;

/**
 *
 * @author srieger
 */
public class TestFeedReader {

    private static Abdera abdera = null;

    /**
     *
     * @return
     */
    public static synchronized Abdera getInstance() {
        if (abdera == null) {
            abdera = new Abdera();
        }
        return abdera;
    }

    public static void main(String[] args) {
        Parser parser = getInstance().getParser();

        try {
            URL url = new URL("http://connect.lmsnet.com/files/basic/anonymous/api/documents/feed");
            Document<Feed> doc = parser.parse(url.openStream(), url.toString());
            Feed feed = doc.getRoot();
            // Get the feed title
            System.out.println("Feed Title: " + feed.getTitle());

            // Get the entry items...
            for (Entry entry : feed.getEntries()) {
                System.out.println("Title: " + entry.getTitle());
                System.out.println("Unique Identifier: " + entry.getId().toString());
                System.out.println("Updated Date: " + entry.getUpdated().toString());
                System.out.println("Published Date: " + entry.getPublished());
                System.out.println("Content: " + entry.getContent());

                // Get the links
                for (Link link : (List<Link>) entry.getLinks()) {
                    System.out.println("Link: " + link.getHref());
                }               

                // Get the categories
                for (Category category : (List<Category>) entry.getCategories()) {
                    System.out.println("Category: " + category.getTerm());
                }
            }
        } catch( IOException | ParseException e )
        {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

  • 源代码中的哪一行是 44?我猜:Document&lt;Feed&gt; doc = parser.parse(url.openStream(), url.toString()); 我认为 atom 提要格式不正确...
  • 另一个想法:你确定你得到 atom 作为响应吗?我认为代码从 url 获取错误页面或登录页面。
  • 如果我在浏览器中使用此 URL,它会提示我登录(基本身份验证),因此响应不是您的代码所期望的。
  • 是第 44 行是 parser.parse(...) 行。
  • 奥利弗,多么新颖的想法。大声笑我什至没有考虑过。该网站是安全的.....一旦我通过浏览器登录并在浏览器中使用该网址,我确实得到了提要。当我在 NetBeans 中运行它时,它会出错。我想知道一旦我通过浏览器登录,Netbeans 是否会使用我相同的标头,还是我必须在 NetBeans 中构建一些登录功能?

标签: xpages ibm-connections apache-abdera


【解决方案1】:

根据讨论,答案是:代码获取日志页面作为响应,因此出现解析错误。

可能性:

  1. SSO 配置 - 研究 SBT SDK 文档并使用 SSO 进行身份验证。

  2. 将您的代码移动到客户端 - 因此,在后台使用 SSJS/Java 处理它,使用一些小部件和 JS 解析向用户显示所需的信息。这样,调用将通过浏览器中的用户身份进行身份验证。

【讨论】:

  • 两个链接都会向我弹出身份验证对话框...无论如何,匿名访问可能不会显示相关数据
  • 那么我建议你使用 -abdera.addCredentials(realm, null, null, new UsernamePasswordCredentials(username, password));
  • 我不建议将密码存储在来源中或向用户询问... SSO 是要走的路
  • 调试起来真是令人沮丧。我希望使用 netbeans 来简化调试,但我怀疑这是一个授权问题。我通常让浏览器处理它,因为我的 xPages 应用程序需要基本身份验证并处理将令牌传递给我的其余代码。我将不得不回到 Domino 来尝试调试它。谢谢大家的建议。
【解决方案2】:

apache abdera 使用org.apache.axiom lib,所以在 pom 文件中使用它作为依赖项。您可以使用另一个 catch 块检查它,它会抛出 NoClassDefFoundError。这个答案是为了帮助正在看这个的人。

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2017-09-12
    • 1970-01-01
    • 2014-04-19
    • 2013-05-31
    相关资源
    最近更新 更多