Bug when using PDF Box in a threaded environment.
-------------------------------------------------

                 Key: PDFBOX-402
                 URL: https://issues.apache.org/jira/browse/PDFBOX-402
             Project: PDFBox
          Issue Type: Bug
          Components: Utilities
         Environment: Multi Thread usage, like in an Application Server using 
PDFBox to parse documents.
            Reporter: peter_lena...@ibi.com


I will be using PDFBox in a thread environment

I ran the Findbugs tool (http://findbugs.sourceforge.net/) 

against the package and an issue occurred in : 
org.apache.pdfbox.util.DateConverter;

It shows this problem in two places.

[H M STCAL] Call to static DateFormat
[STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE]

As the JavaDoc states, DateFormats are inherently unsafe for multithreaded use. 
The detector has found a call to an instance of DateFormat that has been 
obtained via a static field. This looks suspicious.

For more information on this see Sun Bug #6231579 
<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579>  and Sun Bug 
#6178997 <http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6178997> . 

There was only one call to the toString*(date) method
I changed the following lines to resolve the issue.

public DateConverter() {}  // allows the class to be created.
     // next I removed the static from the method.
    public  String toString( Calendar date )
    {
        String retval = null;
        if( date != null )
        {
            StringBuffer buffer = new StringBuffer();
            TimeZone zone = date.getTimeZone();
            long offsetInMinutes = zone.getOffset(
date.getTimeInMillis() )/1000/60;
            long hours = Math.abs( offsetInMinutes/60 );
            long minutes = Math.abs( offsetInMinutes%60 );
            buffer.append( "D:" );
            // this had to be create here, it couldn't be static 
// because of the bug description
            SimpleDateFormat PDF_DATE_FORMAT = new SimpleDateFormat( 
"yyyyMMddHHmmss" );
            buffer.append( PDF_DATE_FORMAT.format( date.getTime() )
Lastly, I change the call to the method in COSDictionary.
    public void setDate( COSName key, Calendar date )
    {
        setString( key, new DateConverter().toString( date ) );
    }


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to