2016-06-29 4 views
0

В пентахо-чайнике я настроил шаг ввода RSS с некоторыми URL-адресами. Когда я бегу преобразование, она работает идеально подходит в большинстве случаев, но иногда он показывает следующее сообщение об ошибке:Временная ошибка «Преждевременный конец файла» во время работы RSS Вход в чайник?

2016/06/29 13:10:48 - RSS Input.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : Unexpected Exception : it.sauronsoftware.feed4j.FeedXMLParseException: org.dom4j.DocumentException: Error on line -1 of document : Premature end of file. Nested exception: Premature end of file. 
2016/06/29 13:10:48 - RSS Input.0 - ERROR (version 6.0.1.0-386, build 1 from 2015-12-03 11.37.25 by buildguy) : it.sauronsoftware.feed4j.FeedXMLParseException: org.dom4j.DocumentException: Error on line -1 of document : Premature end of file. Nested exception: Premature end of file. 
2016/06/29 13:10:48 - RSS Input.0 -  at it.sauronsoftware.feed4j.FeedParser.parse(FeedParser.java:53) 
2016/06/29 13:10:48 - RSS Input.0 -  at org.pentaho.di.trans.steps.rssinput.RssInput.readNextUrl(RssInput.java:168) 
2016/06/29 13:10:48 - RSS Input.0 -  at org.pentaho.di.trans.steps.rssinput.RssInput.getOneRow(RssInput.java:198) 
2016/06/29 13:10:48 - RSS Input.0 -  at org.pentaho.di.trans.steps.rssinput.RssInput.processRow(RssInput.java:312) 
2016/06/29 13:10:48 - RSS Input.0 -  at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62) 
2016/06/29 13:10:48 - RSS Input.0 -  at java.lang.Thread.run(Thread.java:745) 
2016/06/29 13:10:48 - RSS Input.0 - Caused by: org.dom4j.DocumentException: Error on line -1 of document : Premature end of file. Nested exception: Premature end of file. 
2016/06/29 13:10:48 - RSS Input.0 -  at org.dom4j.io.SAXReader.read(SAXReader.java:482) 
2016/06/29 13:10:48 - RSS Input.0 -  at org.dom4j.io.SAXReader.read(SAXReader.java:291) 
2016/06/29 13:10:48 - RSS Input.0 -  at it.sauronsoftware.feed4j.FeedParser.parse(FeedParser.java:37) 
2016/06/29 13:10:48 - RSS Input.0 -  ... 5 more 

Я использовал по умолчанию RSS Входной шаг, который поставляется с чайником, а вот скриншот:

enter image description here

И ссылки, которые я написал в RSS фиде:

enter image description here

Как решить эту проблему? Даже когда я запускаю RSS-канал на одной из ссылок, он иногда показывает ту же ошибку. Есть ли проблемы с этим плагином?

+0

Более подробная информация об исключении находится здесь http://stackoverflow.com/questions/10022796/why-am-i-getting-this-error-premature-end-of-file – simar

+0

Похоже, что один из каналов u или недоступен иногда или сетевое соединение нестабильно или rss-сервер просто удаляет соединение. – simar

+1

U может попытаться использовать User Java Class для ручной загрузки и анализа содержимого rss-канала. U получит контроль над временем ожидания соединения, как справиться с такими ошибками и повторить попытку, если это произойдет в первый раз. – simar

ответ

1

Если действительно необходимо вручную отрегулировать исходный код.

Просто получите источник feed4j. Тихий старый, так что есть только одна версия.

Открыть файл в редакторе it.sauronsoftware.feed4j.FeedParser.java

Он имеет один метод parse

public static Feed parse(Url url){ 
    SAXReader saxReader = new SAXReader(); 
    Document document = saxReader.read(url); 
    ... 

Хороший персонал SAXReader имеет несколько перегруженный метод, один на них, что и нужно

saxParser.read(InputStream is) 

Вместо того, чтобы передавать URL-адрес методу, просто напишите код для чтения данных с URL-адреса, используя httpclient (хорошие новости в комплекте с kettle-pdi, но уточнить версию смотрите в $ ЧАЙНИК-HOME/Lib/достоянию-HttpClient-xxjar)

Затем обернуть полученные от сервера по HttpClient данных в ByteArrayInputSteam и передать его в SaxReader

библиотека сборки и замены feed4j- 1,0.jar with your

И все сделано.

код будет что-то вроде этого

public static Feed parse(Url url){ 
    SAXReader saxReader = new SAXReader(); 
    CloseableHttpClient client = HttpClients.createDefault(); 
    HttpGet get = new HttpGet(url); 
    CloseableHttpResponse response = client.execute(get); 
    HttpEntity entity = response.getEntity(); 
    byte[] b = new byte[(int)entity.getContentLength()]; 
    entity.getContent().read(b); 
    InputStream is = new ByteArrayInputStream(b); 

    Document document = saxReader.read(is); 
    ... 

Дополнительные детали

  • Может нужно добавить код, чтобы обернуть возможный IOException в FeedXMLParseException
  • Этот код предположим, что сервер после Content-Length заголовок в ответ
  • Использование соответствующих jdk-версий
1

Главная проблема заключается в www.ft.com

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

Мне кажется, что реализация rss-ответа здания имеет некоторую ошибку на веб-сайте.

Kettle использовать feed4j для разбора rss. Библиотека feed4j использует простой HttpConnection для открытия потока и получения данных.

Я сделал простой код для чтения для HttpConnection io stream, и то же самое происходит со мной. Webserver иногда отключает соединение.

Запросить тот же ресурс, используя Apache HttpClient, хорошо работает. Нет ошибок, все данные, полученные с сервера.

Мое предположение, запрос http://ft.com нуждается в правильном образовании http-запроса, скорее всего, некоторые хорошо сформированные заголовки.

+0

+1 для попытки, но Simar, я пробовал один и тот же RSS-модуль с первой ссылкой в ​​скриншоте URL (один из которых попадает на сайт www.reuters.com), и это также иногда вызывает ошибку. –

+0

запись www.ft.com имеет неправильную ссылку. Фактически это перенаправление на другой URL-адрес – simar