Как читать RSS-канал с помощью xAgent? - PullRequest
0 голосов
/ 26 февраля 2012

Я пытаюсь прочитать внешний RSS-канал с помощью агента xAgent. Похоже, что я получаю ошибки xtml gettig, подобные приведенным ниже, я подозреваю, что это потому, что я прочитал xml построчно, используя bufferedReader

Я получаю такие ошибки

  • "ошибка в строке 1 в столбце 32: дополнительное содержимое в конце документа"
  • "ошибка в строке 1 в столбце 6561: несоответствие открывающего и завершающего тега: строка элемента 0 и канал"

вот что я пробовал

<?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>

1 Ответ

3 голосов
/ 26 февраля 2012

Вы используете XAgent в качестве прокси.Если вы действительно хотите сделать больше, я предлагаю использовать лучшие классы.Минимум - это HTTP-клиент (обрабатывает все ошибки подключения) или, если ваш источник - ATOM, классы Apache Abdera (которые под капотом используют HTTP-клиента).

Проблема, с которой вы столкнулись: поток содержиттакже информация заголовка, поэтому ваш XML не начинается с <.С помощью HTTP-клиента вы можете избежать этого. </p>

Немного так:

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/$File/HTTPReader.java

Возможно, вы захотите использовать что-токроме строки для обработчика ответа.

...