문제

Servlets dopost ()의 httpservletrequest에서 XML 데이터를 읽고 Reade를 req.getReader ()에서 jaxb undarshaller로 전달합니다. 몇 가지 다른 입력 XML을 시도했지만 항상이 예외를 얻습니다.

SEVERE: Servlet.service() for servlet RESTPhotoAdmin threw exception
java.lang.ArrayIndexOutOfBoundsException: 8192
        at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.peekChar(XMLEntityScanner.java:491)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2672)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:195)
        at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:168)
        at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
        at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:194)
        at com.cantorva.gigcalendar.servlets.rest.RESTPhotoAdmin.doPost(RESTPhotoAdmin.java:41)

이것은 로컬 개발 시스템이 아닌 라이브 웹 서버에서만 발생합니다. 입력이 무엇이든간에 (약 90k 입력 만 시도했지만) 스택 추적의 메시지 부분은 항상 "8192"를 읽습니다. XMLENTITYSCANNER.JAVA LINE 491을 찾아 버퍼를 읽는 것을 볼 수 있으며 버퍼는 실제로 배열입니다. 제로 기반 색인 8192를 사용하여 8K 버퍼를 읽을 수 없으므로 버그가되어야합니다. 그러나 원인은 무엇이며 무엇을 할 수 있습니까?


나는 많은 탐정 작업을 통해 이미 답을 찾았다 고 요구합니다. Apache가 이미 고치기를 거부 한 이후 번거 로움을 저장하고 싶었습니다.

도움이 되었습니까?

해결책

모호한 버그를 찾았습니다 XercesJ-1275 그 자체는 복제입니다 xercesj-1015. 보고서는 내 스택 추적을 언급하지 않지만 ArrayIndexOutOfBoundsException. 실 xmlentityscanner는 0이 절대 발생할 수 없다고 가정하므로 오류가 발생합니다.

Michael Glavassevich는 문서를 다르게 해석하고 결함을 유효하지 않지만 주변의 작업은 단순히 Unmarshaller에 입력 스트림을 사용하는 것입니다. req.getInputStream() 구현의 모호한 부분이 다른 인터페이스 계약을보다 완벽하게 충족시키는 독자가 아니라 손가락을 넘어서는 대신.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top