public static <T> T clone(T obj) throws Exception {

        ObjectOutputStream oos = null;

        ByteArrayOutputStream bos = null;

        ObjectInputStream ois = null;

        bos = new ByteArrayOutputStream();

        oos = new ObjectOutputStream(bos);

        oos.writeObject(obj);

        oos.flush();

        ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));

        return (T) ois.readObject();

    }