> On 17 Jul 2015, at 10:17, Tilman Hausherr <[email protected]> wrote: > > Because of the structure of the Iterator interface, it is not possible to > throw an IOException in the iterator methods. A google search about this > finds rants that the design of java checked exceptions has made a lot of > people very angry, and has been widely regarded as a bad move. > > Solutions? > > 1. use exception tunelling > 2. use parseNextToken() without the iterator interface > 3. create a new Iterator interface that supports exceptions > 4. use getTokens() instead. Uh, no. See PDFBOX-695, this will cost more > memory. > > I'm for (2), although I would use (3) if I find out it gets too complex.
I agree, (2) looks like the best option. — John > Tilman > > Examples of such exceptions: > > 317669.pdf > > java.lang.RuntimeException: java.io.IOException: object reference 3 0 R at > offset 1173 in content stream > at > org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:142) > at > org.apache.pdfbox.pdfparser.PDFStreamParser$1.hasNext(PDFStreamParser.java:150) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:475) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:456) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:167) > at > org.apache.pdfbox.preflight.content.PreflightContentStream.validatePageContentStream(PreflightContentStream.java:76) > at > org.apache.pdfbox.preflight.process.reflect.SinglePageValidationProcess.validateContent(SinglePageValidationProcess.java:184) > at > org.apache.pdfbox.preflight.process.reflect.SinglePageValidationProcess.validate(SinglePageValidationProcess.java:89) > at > org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:84) > at > org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:57) > at > org.apache.pdfbox.preflight.process.PageTreeValidationProcess.validatePage(PageTreeValidationProcess.java:59) > at > org.apache.pdfbox.preflight.process.PageTreeValidationProcess.validate(PageTreeValidationProcess.java:47) > at > org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:84) > at > org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:122) > at > org.apache.pdfbox.preflight.PreflightDocument.validate(PreflightDocument.java:163) > at > com.mycompany.preflightmasstest.PreflightChecker.run(PreflightChecker.java:52) > at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) > at java.lang.Thread.run(Unknown Source) > Caused by: java.io.IOException: object reference 3 0 R at offset 1173 in > content stream > at > org.apache.pdfbox.pdfparser.BaseParser.getObjectFromPool(BaseParser.java:204) > at > org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryValue(BaseParser.java:197) > at > org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryNameValuePair(BaseParser.java:301) > at > org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionary(BaseParser.java:234) > at > org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:210) > at > org.apache.pdfbox.pdfparser.PDFStreamParser.access$000(PDFStreamParser.java:46) > at > org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:137) > ... 18 more > > > 475121.pdf > > java.lang.RuntimeException: java.io.IOException: Value is not an integer: > -2366213136885537460660416106463232 > at > org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:142) > at > org.apache.pdfbox.pdfparser.PDFStreamParser$1.hasNext(PDFStreamParser.java:150) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:475) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:456) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:167) > at > org.apache.pdfbox.preflight.content.PreflightContentStream.validatePageContentStream(PreflightContentStream.java:76) > at > org.apache.pdfbox.preflight.process.reflect.SinglePageValidationProcess.validateContent(SinglePageValidationProcess.java:184) > at > org.apache.pdfbox.preflight.process.reflect.SinglePageValidationProcess.validate(SinglePageValidationProcess.java:89) > at > org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:84) > at > org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:57) > at > org.apache.pdfbox.preflight.process.PageTreeValidationProcess.validatePage(PageTreeValidationProcess.java:59) > at > org.apache.pdfbox.preflight.process.PageTreeValidationProcess.validate(PageTreeValidationProcess.java:47) > at > org.apache.pdfbox.preflight.utils.ContextHelper.callValidation(ContextHelper.java:84) > at > org.apache.pdfbox.preflight.utils.ContextHelper.validateElement(ContextHelper.java:122) > at > org.apache.pdfbox.preflight.PreflightDocument.validate(PreflightDocument.java:163) > at > com.mycompany.preflightmasstest.PreflightChecker.run(PreflightChecker.java:52) > at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) > at java.lang.Thread.run(Unknown Source) > Caused by: java.io.IOException: Value is not an integer: > -2366213136885537460660416106463232 > at org.apache.pdfbox.cos.COSNumber.get(COSNumber.java:109) > at > org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:309) > at > org.apache.pdfbox.pdfparser.PDFStreamParser.access$000(PDFStreamParser.java:46) > at > org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:137) > ... 18 more > Caused by: java.lang.NumberFormatException: For input string: > "-2366213136885537460660416106463232" > at java.lang.NumberFormatException.forInputString(Unknown Source) > at java.lang.Long.parseLong(Unknown Source) > at java.lang.Long.parseLong(Unknown Source) > at org.apache.pdfbox.cos.COSNumber.get(COSNumber.java:105) > ... 21 more > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
