I tried following code copyCustom() to copy an object and create a new object with original object content.
Once I got new object. I modified some content (String content) using get/set methods, unforturnately the contents of original object also changed.
In other words, new object referring to original object. I just need an object with deep copying without any references to original object.
    @SuppressWarnings("unchecked")
private <T> T copyCustom(T entity) throws IllegalAccessException, InstantiationException {
    Class<?> clazz = entity.getClass();
    T newEntity = (T) entity.getClass().newInstance();
    while (clazz != null) {
        copyFields(entity, newEntity, clazz);
        clazz = clazz.getSuperclass();
    }
    return newEntity;
}
private <T> T copyFields(T entity, T newEntity, Class<?> clazz) throws IllegalAccessException {
    List<Field> fields = new ArrayList<Field>();
    for (Field field : clazz.getDeclaredFields()) {
        fields.add(field);
    }
    for (Field field : fields) {
        field.setAccessible(true);
        // next we change the modifier in the Field instance to
        // not be final anymore, thus tricking reflection into
        // letting us modify the static final field
        Field modifiersField;
        try {
            modifiersField = Field.class.getDeclaredField("modifiers");
             modifiersField.setAccessible(true);
                int modifiers = modifiersField.getInt(field);
                // blank out the final bit in the modifiers int
                modifiers &= ~Modifier.FINAL;
                modifiersField.setInt(field, modifiers);
                field.set(newEntity, field.get(entity));
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return newEntity;
}
public class Product extends ProductDataObject
{
    private static final long   serialVersionUID = -2574755579959571978L;
     private InvestmentProductKey                                   fInvestmentProductKey                   = null;
private ProductKey                                          fProductKey                             = null;
private LabelDouble                                             fTotalNetOfAssets                       = null;
private LabelString                                             fPrimaryBenchmark                       = null;
private LabelBoolean                                            fFundAgeLT3Mth                          = null;
private LabelBoolean                                            fFundAgeBTW3Mth12Mth                    = null;
private LabelBoolean                                            fFundAgeBTW12Mth36Mth                   = null;
private LabelBoolean                                            fFundAgeBTW36Mth60Mth                   = null;
private LabelBoolean                                            f
private LabelString[]                                           fGeography                              = null;
private LabelBoolean                                            fCapacityAvailableIndicator             = null;
private LabelString                                             fEquityCapitalization                   = null;
private LabelDate                                               fFiscalYearEndDate                      = null;
private LabelString                                             fFundStatus                             = null;
private LabelDate                                               fExpireDateContractExpenseLimits        = null;
private LabelDouble                                             fMaximumExpenseRatio                    = null;
private LabelString                                             fInvestments                            = null;
private YieldsAndDividends[]                                    fYieldsAndDividends                     = null;
}
