use ObjectUtils#clone for cloning functionality
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/proxy/trunk@1582524 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/commons/proxy2/provider/CloningProvider.java b/core/src/main/java/org/apache/commons/proxy2/provider/CloningProvider.java
index 710901c..fdcf7cd 100644
--- a/core/src/main/java/org/apache/commons/proxy2/provider/CloningProvider.java
+++ b/core/src/main/java/org/apache/commons/proxy2/provider/CloningProvider.java
@@ -18,9 +18,10 @@
package org.apache.commons.proxy2.provider;
import java.io.Serializable;
-import java.lang.reflect.InvocationTargetException;
+import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.Validate;
+import org.apache.commons.lang3.exception.CloneFailedException;
import org.apache.commons.lang3.reflect.MethodUtils;
import org.apache.commons.proxy2.ObjectProvider;
import org.apache.commons.proxy2.exception.ObjectProviderException;
@@ -69,28 +70,14 @@
* {@inheritDoc}
*/
@Override
- @SuppressWarnings("unchecked")
public T getObject()
{
try
{
- return (T) MethodUtils.invokeExactMethod(cloneable, "clone");
+ return ObjectUtils.clone(cloneable);
}
- catch (IllegalAccessException e)
- {
- throw new ObjectProviderException("Class " + cloneable.getClass().getName()
- + " does not have a public clone() method.", e);
- }
- catch (InvocationTargetException e)
- {
- throw new ObjectProviderException("Attempt to clone object of type " + cloneable.getClass().getName()
- + " threw an exception.", e);
- }
- catch (NoSuchMethodException e)
- {
- throw new ObjectProviderException(String.format(
- "Class %s does not have a clone() method (should never happen).", cloneable.getClass().getName()),
- e);
+ catch (CloneFailedException e) {
+ throw new ObjectProviderException(e.getMessage(), e.getCause());
}
}