2009-12-17 4 views
0

문제가있는 곳을 모르겠습니다 ... 도움 및 감사합니다!xerces 구문 분석시 ArrayIndexOutOfBoundsException이 발생했습니다.

com.sun.org.apache.xerces.internal.impl에서 com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read (UTF8Reader.java:543) 에서
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8192 

. XMLEntityScanner.load (XMLEntityScanner.java:1742) com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity (XMLEntityScanner.java:1619) impl.XMLEntityScanner.skipString (XMLEntityScanner.java:1657) com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement (XMLDocumentFragmentScannerImpl.java:1740) (com.sun.org.apache.xerces) internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next (XMLDocumentFrag com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next (XMLDocumentScannerImpl.java:648) com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl에서 scanDocument (XMLDocumentFragmentScannerImpl.java:510) com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:807) (com.sun.org.apache.xerces.internal.parsers) XMLSupport.parse (XML11Configuration.java:737) (AbstractSAXParser.java:1205) com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse (SAXParserImpl.java:522) at myPackage.MainClass.main에서 javax.xml.parsers.SAXParser.parse (SAXParser.java:277) 에서 javax.xml.parsers.SAXParser.parse (SAXParser.java:395) (MainClass.java:39)

아래와 같이 mainclass, 코드 프레임 워크에서

:

SAXParserFactory sf = SAXParserFactory.newInstance(); 
SAXParser sax = sf.newSAXParser(); 
sax.parse("english.xml", new DefaultElementHandler("page"){ 
public void processElement(Element element) { 
// process the element 
} 
}); 

XML 파일은 거대한 4G이며, 텍스트의 전체, 나는 파일을 구문 분석 할 필요가 텍스트를 처리합니다.

현재 프로세스 부분을 수행하지 않았으며 콘솔에서 출력하려고했습니다. 그런 다음 OOB ...

+1

MainClass의 내용을 게시하여 수행하려는 작업을 볼 수 있습니까? – Shaun

+0

또한 구문 분석하려는 일부 XML을 게시하십시오. 응용 프로그램을 추적 – Asaph

+0

스택에서 콘텐츠 텍스트 ... ... –

답변

0

해당 스택 추적과 함께 나타나는 오류 메시지를 인쇄 해보십시오. System.err.println(e.getMessage())에 전화를 추가하여 수행 할 수 있습니다. 여기서 e은 예외입니다. 메시지는 액세스하려는 색인을 제공해야합니다.

인덱스가 음수이면 정수가 넘칠 가능성이 큽니다. 그런 경우, Xerces로 버그 보고서를 제출해야합니다. Xerces가 큰 파일을 처리하도록 설계되지 않았을 가능성이 있습니다.

+0

어디에서 예외를 잡을 수 있습니까? 예 : System.err.println (e.getMessage())를 추가 하시겠습니까? public static void main (String [] args)은 현재 예외 {}를 발생시킵니다. –

+0

stacktrace에서 무효 인덱스가 8192 인 것으로 보입니다. Xerces 버그라고 생각됩니다. Xerces 파일에서 UTF-8이 유효하지 않더라도 이렇게 던져서는 안됩니다. – ZoogieZork

+0

그래, 나는 또한 여기 스레드를 보았다, http://marc.info/?l=xerces-j-user&m=120452263925040&w=2. 동일한 문제 (버전 2.7x 사용)가 보이고 단서가 없습니다. –

관련 문제