@SuppressWarnings("unchecked")
protected <T> T cycleObject(final Class<T> clazz, final T object) {
s_logger.info("object {}", object);
final FudgeSerializer fudgeSerializationContext = new FudgeSerializer(getFudgeContext());
final FudgeDeserializer fudgeDeserializationContext = new FudgeDeserializer(getFudgeContext());
FudgeMsg message = fudgeSerializationContext.objectToFudgeMsg(WriteReplaceHelper.writeReplace(object));
assertNotNull(message);
s_logger.info("message {}", message);
message = cycleMessage(message);
s_logger.info("message {}", message);
final Object newObject = fudgeDeserializationContext.fudgeMsgToObject(message);
assertNotNull(newObject);
s_logger.info("object {}", newObject);
assertTrue(clazz.isAssignableFrom(newObject.getClass()));
assertEquals(object.getClass(), newObject.getClass());
return (T) newObject;