@Override
public Object cloneValue(Object originalValue, boolean isCloneable, Class<?> clzz, String uid, String entryClassName) {
if (isCloneable && clzz != null) {
try {
return clzz.getMethod("clone", new Class[0]).invoke(originalValue, new Object[0]);
} catch (Exception ex) {
}
}
try {
if (_mis == null) {
_os = new GSByteArrayOutputStream(INITIAL_SIZE);
_is = new GSByteArrayInputStream(_os.getBuffer());
_mos = new MarshalOutputStream(_os);
_mis = new MarshalInputStream(_is);
}
_mos.writeUnshared(originalValue);
_is.setBuffer(_os.getBuffer(), _os.getCount());
Object res = _mis.readUnshared();
return res;
} catch (Exception ex) {
if (clzz == null)
clzz = originalValue.getClass();
throw new FieldValueCloningErrorException(uid, entryClassName, clzz.getName(), originalValue, ex);
} finally {
reset();
}
}