Неустранимая ошибка: 1: 1: преждевременный конец файла - в Url.openStream () / новый новый XmlReader в инструментах Рима - PullRequest
0 голосов
/ 12 октября 2018

Небольшой фрагмент программы, бросающей мне вызов за один день,

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-ответ из URL,но не в состоянии сделать.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Я полагаю, это потому, что сервер пытается перенаправить вас на использование https вместо http, в то время как HttpURLConnection не поддерживает это автоматически .

Изменение вашегоURL для использования https решит проблему.

0 голосов
/ 12 октября 2018

Отправка запроса GET на этот URL-адрес из кода Java говорит:

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

Таким образом, XML не присутствует в ответе, поскольку запрос не выполняется.Пожалуйста, проверьте API и посмотрите, нужно ли включать какие-либо дополнительные параметры в HTTP-запрос.

Я использовал следующий код для подключения к URL:

  public static String getUrlResponse(String url) throws IOException {
             URL obj = new URL(url);
             HttpURLConnection con = (HttpURLConnection) obj.openConnection();
             // optional default is GET
             con.setRequestMethod("GET");
             //add request header
             int responseCode = con.getResponseCode();
             System.out.println("\nSending 'GET' request to URL : " + url);
             System.out.println("Response Code : " + responseCode);
             BufferedReader in = new BufferedReader(
                     new InputStreamReader(con.getInputStream()));
             String inputLine;
             StringBuffer response = new StringBuffer();
             while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
             }
             in.close();
             //print in String
             return response.toString();
  }
...