try {
Class<T> objectClass = (Class<T>) o.getClass();
JaxbHelper jaxbHelper = JaxbHelper.get(objectClass);
String xml = JaxbHelper.toXml(o, false);
return jaxbHelper.deserialize(new StringReader(xml), objectClass);
} catch (UnmarshalException e) {
throw new IllegalStateException("Error while cloning object", e);
} catch (JAXBException e) {
throw new IllegalStateException("Error while cloning object", e);
}