严重错误:1:1:文件过早结束-Url.openStream()/ Rome工具中的新XmlReader

时间:2018-10-12 02:32:31

标签: java xml saxparser rome

程序的小片段从一天开始挑战我,

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import com.rometools.rome.io.FeedException;

public class Test {

public static void main(String[] args) throws IllegalArgumentException, FeedException, IOException {
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputStream openStream = new URL("http://www.livemint.com/rss/money").openStream();
        Document doc = db.parse(openStream);
        System.out.println(doc.getDocumentURI());
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
}

所有这些实验都是从rome工具解析器代码开始的,这在不同的方法中也给了我相同的错误。

SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader(url));
feed.getEntries();

在创建新的xml Reader时引发了异常,因此我以不同的方式编写了一个测试程序。现在两者都抛出相同的错误,

  

[致命错误]:1:1:文件过早结束。

我必须从网址获取xml响应,但无法执行。

2 个答案:

答案 0 :(得分:0)

从Java代码向此URL发送GET请求时说:

def index
    @articles = Article.all
    if params[:search]
        @articles = Article.search(params[:search]).order("created_at DESC")
    else
        @articles = Article.all.order("created_at DESC")
    end
end

由于请求失败,因此响应中不存在XML。请检查API,看看是否需要在HTTP请求中包含任何其他参数。

我使用以下代码连接到URL:

Sending 'GET' request to URL : http://www.livemint.com/rss/money
Response Code : 301

答案 1 :(得分:0)

我相信这是因为服务器试图将您重定向为使用https this而不是http,而使用HttpURLConnection

更改您的URL以使用https将解决此问题。