> 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]

Reply via email to