ObjectIODataCorruptedException, ObjectIOInvalidClassException,
ObjectIONotSerializableException,
ObjectIODataRecordNotFoundException,
ObjectIOClassNotFoundException,
ObjectIOTooBigForSerializationException {
final Bob1ForJoafipSerializer bob1 = new Bob1ForJoafipSerializer();
bob1.setVal(10);
final Bob2ForJoafipSerializer bob2 = new Bob2ForJoafipSerializer();
bob2.setVal(15);
bob2.setBob1(bob1);
bob1.setBob2(bob2);
final Bob3ForJoafipSerializer bob3 = new Bob3ForJoafipSerializer();
bob3.setVal(20);
bob2.setBob3(bob3);
bob3.setBob1(bob1);
bob3.setBob2(bob2);
bob1.setBob3(bob3);
final byte[] data = serializer.marshal(bob1);
final Object object = serializer.unmarshal(data);
assertNotNull("must unmarshal something", object);
assertEquals("must be Bob1 instance", Bob1ForJoafipSerializer.class,
object.getClass());
final Bob1ForJoafipSerializer uBob1 = (Bob1ForJoafipSerializer) object;
final Bob2ForJoafipSerializer uBob2 = uBob1.getBob2();
final Bob3ForJoafipSerializer uBob3 = uBob1.getBob3();
assertSame("bad uBob2.bob1", uBob1, uBob2.getBob1());
assertSame("bad uBob2.bob3", uBob3, uBob2.getBob3());
assertSame("bad uBob3.bob1", uBob1, uBob3.getBob1());
assertSame("bad uBob2.bob2", uBob2, uBob3.getBob2());
assertEquals("bad bob1 value", 10, uBob1.getVal());
assertEquals("bad bob2 value", 15, uBob2.getVal());
assertEquals("bad bob3 value", 20, uBob3.getVal());
}