Buggy code:
public final class WicketObjectInputStream extends ObjectInputStream { private final IntHashMap < Object > handledObjects = new IntHashMap < Object > ( ) ; private short handleCounter = 0 ; private final DataInputStream in ; private ClassStreamHandler currentStreamHandler ; private HandleArrayListStack < Object > stack = new HandleArrayListStack < Object > ( ) ; private HandleArrayListStack < Object > defaultRead = new HandleArrayListStack < Object > ( ) ; public WicketObjectInputStream ( InputStream in ) throws IOException { } @ Override protected Object readObjectOverride ( ) throws IOException , ClassNotFoundException { } @ Override public void defaultReadObject ( ) throws IOException , ClassNotFoundException { } @ Override public void close ( ) throws IOException { } @ Override public boolean readBoolean ( ) throws IOException { } @ Override public byte readByte ( ) throws IOException { } @ Override public int readUnsignedByte ( ) throws IOException { } @ Override public char readChar ( ) throws IOException { } @ Override public short readShort ( ) throws IOException { } @ Override public int readUnsignedShort ( ) throws IOException { } @ Override public int readInt ( ) throws IOException { } @ Override public long readLong ( ) throws IOException { } @ Override public float readFloat ( ) throws IOException { } @ Override public double readDouble ( ) throws IOException { } @ Override public void readFully ( byte [ ] buf ) throws IOException { } @ Override public void readFully ( byte [ ] buf , int off , int len ) throws IOException { } @ Override public String readUTF ( ) throws IOException { } @ Override public int read ( ) throws IOException { } @ Override public int read ( byte [ ] b ) throws IOException { } @ Override public int read ( byte [ ] buf , int off , int len ) throws IOException { } @ Override public ObjectInputStream . GetField readFields ( ) throws IOException , ClassNotFoundException { } private class GetFieldImpl extends ObjectInputStream . GetField { private final HashMap < String , Object > values = Generics . newHashMap ( ) ; private void read ( ) throws IOException , ClassNotFoundException { } @ Override public boolean defaulted ( String name ) throws IOException { } @ Override public byte get ( String name , byte val ) throws IOException { } @ Override public char get ( String name , char val ) throws IOException { Object o = values . get ( name ) ; <START_BUG> if ( o instanceof Byte ) { <END_BUG> return ( ( Character ) ( o ) ) . charValue ( ) ; } return val ; } @ Override public double get ( String name , double val ) throws IOException { } @ Override public float get ( String name , float val ) throws IOException { } @ Override public int get ( String name , int val ) throws IOException { } @ Override public long get ( String name , long val ) throws IOException { } @ Override public short get ( String name , short val ) throws IOException { } @ Override public boolean get ( String name , boolean val ) throws IOException { } @ Override public Object get ( String name , Object val ) throws IOException { } @ Override public ObjectStreamClass getObjectStreamClass ( ) { } } }

Fix:
if ( o instanceof Character ) {