2012-02-26 127 views
0

我试图用xAgent读取外部RSS源,我似乎gettig XML错误,如一旦跌破,我怀疑这是因为我使用的BufferedReader如何使用xAgent读取RSS提要?

我得到这样的错误逐行读取XML行这些

  • “错误在第1行的列32:在文档的末尾附加内容”“:打开和结束标记不匹配:项目行0和通道在柱6561的错误在第1行”

在这里,我s我试过的东西

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false"> 
<xp:this.afterRenderResponse> 
<![CDATA[#{javascript: 

var u:java.net.URL = new java.net.URL("http://www.xpages.info/XPagesHome.nsf/NewsFeed.xsp?format=rss"); 
var br:BufferedReader= new java.io.BufferedReader(new java.io.InputStreamReader(u.openStream())); 
var tmp=""; 
while(br.readLine() != null){ 
    tmp+= br.readLine(); 
} 

var externalContext = facesContext.getExternalContext(); 
var writer = facesContext.getResponseWriter(); 
var response = externalContext.getResponse(); 
response.setContentType("text/xml"); 
response.setHeader("Cache-Control", "no-cache"); 
writer.write(tmp); 
writer.endDocument(); 
}]]> 

</xp:this.afterRenderResponse> 
</xp:view> 

回答

3

您正在使用XAgent作为代理。如果你想实际做更多,我建议使用更好的类。最低限度将是HTTP客户端(处理所有连接干扰),或者如果您的源代码是ATOM,则Apache Abdera类(其内部使用HTTP客户端)。

你有问题:流还包含头信息,所以你的XML不能<启动。使用HTTP客户端可以避免这种情况。

有点像这样:

public String getURL(String url) { 

    System.out.println("Fetching " + url); 

    if (this.httpClient == null) { 
     this.initializeHTTPSession(); 
    } 

    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
    HttpGet get = new HttpGet(url); 

    String result = null; 

    try { 
     result = this.httpClient.execute(get, responseHandler); 
    } catch (HttpResponseException e) { 
     System.out.println(e.getMessage()); 
     return null; 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (UnknownHostException e) { 
     result = "The host is invalid: " + url; 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return result; 
} 

完整的源代码在这里:http://www.wissel.net/blog/downloads/SHWL-8BQPJD/ $文件/ HTTPReader.java

你可能想使用别的东西比为响应处理的字符串。