Xpages 使用abdera从连接解析atom提要时出错

Xpages 使用abdera从连接解析atom提要时出错,xpages,ibm-connections,apache-abdera,Xpages,Ibm Connections,Apache Abdera,我在尝试解析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) 位于testfeed

我在尝试解析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();
        }
    }
}
/*
*要更改此模板,请选择工具|模板
*然后在编辑器中打开模板。
*/
包装测试阅读器;
导入java.io.IOException;
导入java.net.URL;
导入java.util.List;
导入org.apache.abdera.abdera;
导入org.apache.abdera.model.Document;
导入org.apache.abdera.model.Entry;
导入org.apache.abdera.model.Feed;
导入org.apache.abdera.model.Category;
导入org.apache.abdera.model.Link;
导入org.apache.abdera.parser.ParseException;
导入org.apache.abdera.parser.parser;
/**
*
*@author srieger
*/
公共类TestFeedReader{
私有静态Abdera-Abdera=null;
/**
*
*@返回
*/
公共静态同步Abdera getInstance(){
if(abdera==null){
abdera=新abdera();
}
返回阿卜杜拉;
}
公共静态void main(字符串[]args){
解析器Parser=getInstance().getParser();
试一试{
URL=新URL(“http://connect.lmsnet.com/files/basic/anonymous/api/documents/feed");
Document doc=parser.parse(url.openStream(),url.toString());
Feed=doc.getRoot();
//获取提要标题
System.out.println(“提要标题:+Feed.getTitle());
//获取条目项。。。
for(条目:feed.getEntries()){
System.out.println(“Title:+entry.getTitle());
System.out.println(“唯一标识符:+entry.getId().toString());
System.out.println(“更新日期:+entry.getUpdated().toString());
System.out.println(“发布日期:+entry.getPublished());
System.out.println(“内容:+entry.getContent());
//获取链接
for(Link:(List)entry.getLinks()){
System.out.println(“Link:+Link.getHref());
}               
//获取类别
for(Category Category:(List)entry.getCategories()){
System.out.println(“Category:+Category.getTerm());
}
}
}catch(IOException | ParseException e)
{
e、 printStackTrace();
}
}
}

根据讨论,答案是:code将登录页面作为响应获取,因此发生解析错误

可能性:

  • SSO配置—学习SBT SDK文档并使用SSO进行身份验证

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


  • ApacheAbdera使用
    org.apache.axiom
    lib,所以在pom文件中使用它作为依赖项。您可以使用它将抛出的另一个catch块对其进行检查
    NoClassDefFoundError
    。此答案适用于正在查看此信息的帮助人员。

    您的源代码中哪一行是44?我猜:
    documentdoc=parser.parse(url.openStream(),url.toString())我认为atom提要的格式不正确…另一个想法是:您确定得到atom作为响应吗?我认为代码从url中获取错误页或登录页。如果我在浏览器中使用此url,它会提示我登录(基本身份验证),因此响应不是您的代码所期望的。是的,第44行是解析器。解析(…)行。奥利弗,这是一个多么新颖的想法。哈哈,我都没想过。该网站是安全的。。。。。一旦我通过浏览器登录并在浏览器中使用该url,我就会获得提要。当我在NetBeans中运行此命令时,它会显示错误。我想知道,一旦我通过浏览器登录,Netbeans是否会使用相同的标题,或者我是否必须在Netbeans中内置一些登录功能?事实上,答案是这样。);改为);;这两个链接都会弹出“身份验证”对话框。。。无论如何,匿名访问可能不会显示相关数据。然后我建议您使用-abdera.addCredentials(realm、null、null、new UsernamePasswordCredentials(username、password))传入凭据;我不建议在源代码中存储密码或向用户询问密码。。。SSO是一种解决问题的方法。调试这种方法非常令人沮丧。我希望使用netbeans来简化调试,但我怀疑这是一个授权问题。我通常让浏览器处理这个问题,因为我的xPages应用程序需要基本的身份验证,并处理将令牌传递给代码的其余部分。我必须回到Domino来尝试调试这个。谢谢大家的建议。