@Override
 public boolean isMarshallable(Object o) throws Exception {
   Class clazz = o.getClass();
   Object isClassMarshallable = isMarshallableMap.get(clazz);
   if (isClassMarshallable != null) {
     return (Boolean) isClassMarshallable;
   } else {
     if (isMarshallableCandidate(o)) {
       boolean isMarshallable = true;
       try {
         objectToBuffer(o);
       } catch (Exception e) {
         isMarshallable = false;
         throw e;
       } finally {
         isMarshallableMap.putIfAbsent(clazz, isMarshallable);
       }
       return isMarshallable;
     }
     return false;
   }
 }