1 /*
2  * $HeadURL:$
3  * $Revision:$
4  * $Date:$
5  *
6  * ====================================================================
7  *
8  *  Licensed to the Apache Software Foundation (ASF) under one or more
9  *  contributor license agreements.  See the NOTICE file distributed with
10  *  this work for additional information regarding copyright ownership.
11  *  The ASF licenses this file to You under the Apache License, Version 2.0
12  *  (the "License"); you may not use this file except in compliance with
13  *  the License.  You may obtain a copy of the License at
14  *
15  *      http://www.apache.org/licenses/LICENSE-2.0
16  *
17  *  Unless required by applicable law or agreed to in writing, software
18  *  distributed under the License is distributed on an "AS IS" BASIS,
19  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  *  See the License for the specific language governing permissions and
21  *  limitations under the License.
22  * ====================================================================
23  *
24  * This software consists of voluntary contributions made by many
25  * individuals on behalf of the Apache Software Foundation.  For more
26  * information on the Apache Software Foundation, please see
27  * <http://www.apache.org/>.
28  *
29  */
30 package org.apache.http.client.utils;
31 
32 import java.lang.reflect.InvocationTargetException;
33 import java.lang.reflect.Method;
34 
35 /**
36  * A collection of utilities to workaround limitations of Java clone framework.
37  *
38  * @deprecated Please use {@link java.net.URL#openConnection} instead.
39  *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
40  *     for further details.
41  */
42 @Deprecated
43 public class CloneUtils {
44 
45     public static Object clone(final Object obj) throws CloneNotSupportedException {
46         if (obj == null) {
47             return null;
48         }
49         if (obj instanceof Cloneable) {
50             Class<?> clazz = obj.getClass ();
51             Method m;
52             try {
53                 m = clazz.getMethod("clone", (Class[]) null);
54             } catch (NoSuchMethodException ex) {
55                 throw new NoSuchMethodError(ex.getMessage());
56             }
57             try {
58                 return m.invoke(obj, (Object []) null);
59             } catch (InvocationTargetException ex) {
60                 Throwable cause = ex.getCause();
61                 if (cause instanceof CloneNotSupportedException) {
62                     throw ((CloneNotSupportedException) cause);
63                 } else {
64                     throw new Error("Unexpected exception", cause);
65                 }
66             } catch (IllegalAccessException ex) {
67                 throw new IllegalAccessError(ex.getMessage());
68             }
69         } else {
70             throw new CloneNotSupportedException();
71         }
72     }
73 
74     /**
75      * This class should not be instantiated.
76      */
77     private CloneUtils() {
78     }
79 
80 }
81