Buggy code:
public abstract class AbstractHeaderCache { protected HeaderList headerList ; protected File headerFile ; private boolean headerCacheLoaded ; protected String [ ] columnNames ; private static final int NULL = 0 ; private static final int STRING = 1 ; private static final int DATE = 2 ; private static final int BOOLEAN = 3 ; private static final int INTEGER = 4 ; FileOutputStream ostream ; ObjectOutputStream oos ; FileInputStream istream ; ObjectInputStream ois ; public AbstractHeaderCache ( File headerFile ) { } protected void loadColumnNames ( ) { } public HeaderInterface createHeaderInstance ( ) { } public boolean isHeaderCacheLoaded ( ) { } public boolean exists ( Object uid ) throws Exception { } public int count ( ) { } public void remove ( Object uid ) throws Exception { } public void add ( HeaderInterface header ) throws Exception { } public HeaderList getHeaderList ( ) throws Exception { } public abstract void load ( ) throws Exception { } public abstract void save ( ) throws Exception { } protected void loadAdditionalHeader ( ObjectInputStream p , HeaderInterface h ) throws Exception { } protected void saveAditionalHeader ( ObjectInputStream p , HeaderInterface h ) throws Exception { } protected void loadHeader ( ObjectInputStream p , HeaderInterface h ) throws Exception { int compressedFlags = p . readInt ( ) ; h . set ( "columba.flags.seen" , BooleanCompressor . decompress ( compressedFlags , 0 ) ) ; h . set ( "columba.flags.answered" , BooleanCompressor . decompress ( compressedFlags , 1 ) ) ; h . set ( "columba.flags.flagged" , BooleanCompressor . decompress ( compressedFlags , 2 ) ) ; h . set ( "columba.flags.expunged" , BooleanCompressor . decompress ( compressedFlags , 3 ) ) ; h . set ( "columba.flags.draft" , BooleanCompressor . decompress ( compressedFlags , 4 ) ) ; h . set ( "columba.flags.recent" , BooleanCompressor . decompress ( compressedFlags , 5 ) ) ; h . set ( "columba.attachment" , BooleanCompressor . decompress ( compressedFlags , 6 ) ) ; h . set ( "columba.date" , new Date ( p . readLong ( ) ) ) ; h . set ( "columba.size" , new Integer ( p . readInt ( ) ) ) ; h . set ( "columba.from" , p . readObject ( ) ) ; h . set ( "columba.priority" , new Integer ( p . readInt ( ) ) ) ; h . set ( "columba.host" , p . readUTF ( ) ) ; h . set ( "columba.subject" , p . readUTF ( ) ) ; loadColumnNames ( ) ; int classCode ; for ( int j = 0 ; j < ( columnNames . length ) ; j ++ ) { classCode = p . readInt ( ) ; switch ( classCode ) { case AbstractHeaderCache . NULL : { break ; } case AbstractHeaderCache . STRING : { h . set ( columnNames [ j ] , p . readUTF ( ) ) ; break ; } case AbstractHeaderCache . INTEGER : { h . set ( columnNames [ j ] , new Integer ( p . readInt ( ) ) ) ; break ; } case AbstractHeaderCache . BOOLEAN : { <START_BUG> h . set ( columnNames [ j ] , new Boolean ( p . readBoolean ( ) ) ) ; <END_BUG> break ; } case AbstractHeaderCache . DATE : { h . set ( columnNames [ j ] , new Date ( p . readLong ( ) ) ) ; break ; } } } } protected void saveHeader ( ObjectOutputStream p , HeaderInterface h ) throws Exception { } public ObjectInputStream openInputStream ( ) throws Exception { } public ObjectOutputStream openOutputStream ( ) throws Exception { } public void closeInputStream ( ) throws Exception { } public void closeOutputStream ( ) throws Exception { } public void setHeaderCacheLoaded ( boolean b ) { } }

Fix:
h . set ( columnNames [ j ] , Boolean . valueOf ( p . readBoolean ( ) ) ) ;