2016-06-29 6 views
0

pentaho kettle에서 일부 URL로 RSS 입력 단계를 구성했습니다. 나는 변환을 실행하면 시간의 대부분을 완벽하게 실행 그러나 때때로, 그것은 다음과 같은 오류 표시 : 나는 주전자와 함께 제공되는 기본 RSS 입력 단계를 사용했다가라지에서 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 

, 그리고 여기에 스크린 샷은 다음과 같습니다

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 소스를 가져옵니다. 조용한 구식이므로 단일 버전 만 있습니다.

은 편집기에서

파일 열기 parse

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

좋은 직원 SAXReader는, 그 하나는 유

을 여러 오버로드 된 메서드 필요한 것을

그것은 하나의 방법이있다을 it.sauronsoftware.feed4j.FeedParser.java

saxParser.read(InputStream is) 

URL을 메소드 읽기에 전달하는 대신 httpclient를 사용하여 url에서 데이터를 읽는 코드를 작성하십시오 (좋은 소식은 kettle-pdi와 함께 번들로 제공되지만 버전 $ 주전자-HOME/lib 디렉토리/조사 명확히하기 평민 - HttpClient를-xxjar)

그런 다음 데이터 ByteArrayInputSteam에 HttpClient를가 서버로부터 수신 SaxReader

로 전달 둘러싸 기

빌드 라이브러리와 feed4j- 교체 1.0.당신과 함께 항아리

그리고 끝났어.

코드는이

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); 
    ... 

추가 세부 사항과 같은

  • 이 코드는 응답 해당 서버 포스트 콘텐츠 길이 헤더를 가정 FeedXMLParseException 할 수 IOException가 래핑하는 코드를 추가해야합니다
  • 일치하는 jdk 버전 사용
1

큰 문제가 www.ft.com 시간이 웹 사이트 서버 후 어떤 이유

가 중간에 연결을 끊이고, 한편 파이썬 구현 할 수 HTTP 스트림에서 모든 데이터를 읽고 성공적으로 데이터를 분석합니다.

저에게 rss 응답 작성에 웹 사이트에 버그가 있다고 보입니다.

주전자는 feed4j를 사용하여 rss를 구문 분석합니다. 라이브러리 feed4j는 간단한 HttpConnection을 사용하여 스트림을 열고 데이터를 가져옵니다.

나는 HttpConnection 스트림을 읽을 때 간단한 코드를 작성 했으므로 나에게도 마찬가지입니다. 웹 서버가 때때로 연결을 끊습니다.

Apache HttpClient를 사용하여 동일한 리소스에 대한 요청이 올바르게 작동합니다. 오류가없고 모든 데이터가 서버에서 수신됩니다.

내 생각에 http://ft.com에 대한 요청은 올바르게 형성된 http 요청을 필요로하며 대부분 잘 구성된 헤더를 필요로합니다.

+0

+1 시도했지만 Simar, 난 URL을 스크린 샷 (하나는 www.reuters.com 조회수)의 첫 번째 링크와 동일한 RSS 플러그인을 시도하고 이것은 또한 때때로 오류를 throw합니다. –

+0

레코드 www.ft.com에 잘못된 링크가 있습니다. 실제로 다른 URL로 리디렉션됩니다. – simar