2009-07-02 5 views
1

가끔 프로세스에서 제목에 오류가 발생하여 많은 XML 파일을 구문 분석합니다.SAXException : 예기치 않은 파일 끝 null

파일 자체는 정상적으로 보이며 오류를 생성 한 동일한 파일에서 프로세스를 다시 실행하면 정상적으로 작동합니다.

예외는이 파서 (나는 piccolo 사용)에서 버그가 수 수 XMLReader.parse(InputStream is)

의 호출에 발생? 아니면 내가 파일 스트림을 어떻게 열 었는가?

멀티 스레딩이 필요하지 않습니다.

피콜로는 당시로서는 좋은 생각 인 것 같았지만 사용법에 대한 좋은 설명이 없습니다. 기본 SAX 파서로 전환하여 도움이되는지 확인하겠습니다.

업데이트 : 그것은 도움이되지 않았고 피콜로는 일부 작업 부하에서 상당히 빠르다는 것을 알았습니다. 그래서 돌아 왔습니다.

+0

@itsadok : 해결 되었습니까? 여전히 답이없는 질문 목록에 있습니다. – Pops

+0

@LordTorgamus : 아직 해결되지 않았지만, 때때로 예외가 발생합니다. 그래도 적극적으로 조사하지는 않습니다. – itsadok

답변

2

아마도이 이야기의 끝 부분을 말해야합니다. 어리석은 실수였습니다. XML 파일을 생성하는 프로세스와 XML 파일을 읽는 프로세스가 두 가지 프로세스가 있습니다. 독자는 단지 디렉토리를 스캔하고 새로운 파일을 모두 처리하려고 시도합니다.

가끔씩은 제작자가 쓰기 작업을 완료하기 전에 독자가 파일을 검색하므로 "예기치 않은 파일 끝"예외가 발생합니다. 여기서 작은 파일에 대해 이야기하고 있기 때문에이 이벤트는 매우 드뭅니다. 내가 확인하러 올 때쯤에, 제작자는 이미 파일을 완성 할 것이므로, 파서가 아무 것도 불평하지 않는 것처럼 보였다.

"멀티 스레드가 필요 없습니다"라고 썼습니다. 분명히 이것은 매우 잘못된 것입니다.

한 가지 해결 방법은 파일을 다른 위치에 작성하고 완료된 후에 만 ​​모니터링되는 폴더로 이동하는 것입니다. 더 나은 해결책은 적절한 메시지 대기열을 사용하는 것입니다.

0

다중 스레드 시나리오입니까? 나는. 당신은 동시에 하나 이상의 문장을 파싱합니까?

JRE에서 기본 XML 구문 분석기를 사용하지 않는 특별한 이유가 있습니까?

1

저는 XMLBeans에서 Picolo와 비슷한 것을 경험하고 있습니다. 빠른 구글 후, 나는 다음 포스트를 건너 왔어요 :

XMLBEANS-226 - Exception "Unexpected end of file after null"

(V1.4 년 이후)이 예외를 해결할 수 있습니다 클래스 org.apache.commons.io.input.AutoCloseInputStream 아파치 공동 사용 포스트 상태 (그것을 자신을 시도하지, 사과) .

+0

누구나 AutoCloseInputStream이이 문제를 해결하는지 확인할 수 있습니까? –

관련 문제