Example usage for java.lang.reflect Method isAccessible

List of usage examples for java.lang.reflect Method isAccessible

Introduction

In this page you can find the example usage for java.lang.reflect Method isAccessible.

Prototype

@Deprecated(since = "9")
public boolean isAccessible() 

Source Link

Document

Get the value of the accessible flag for this reflected object.

Usage

From source file:com.yanzhenjie.album.BasicWrapper.java

/**
 * Start the Album.// w w w .jav  a 2s .  c  o  m
 */
public final void start() {
    try {
        Method method = o.getClass().getMethod("startActivityForResult", Intent.class, int.class);
        if (!method.isAccessible())
            method.setAccessible(true);
        method.invoke(o, intent, intent.getIntExtra(KEY_INPUT_REQUEST_CODE, 0));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

From source file:de.xaniox.heavyspleef.core.event.EventListenerMethod.java

@SuppressWarnings("unchecked")
public EventListenerMethod(Object instance, Method method) {
    this.instance = instance;
    this.method = method;

    if (!method.isAccessible()) {
        method.setAccessible(true);// ww w  . j  av  a  2s.  com
    }

    subscribe = method.getAnnotation(Subscribe.class);

    Class<?>[] parameters = method.getParameterTypes();
    Validate.isTrue(parameters.length == 1,
            "method must have only one parameter which must be a subtype of Event");

    Class<?> eventClass = parameters[0];
    Validate.isTrue(Event.class.isAssignableFrom(eventClass),
            "First parameter of method must be a subtype of Event");

    this.eventClass = (Class<? extends Event>) eventClass;
}

From source file:org.openspaces.pu.container.ProcessingUnitContainerContextBeanPostProcessor.java

private static Metric getMetricFromMethod(final Method method, final Object bean) {
    if (method.getParameterTypes().length != 0) {
        if (logger.isWarnEnabled())
            logger.warn("Metric registration of method " + method.getName() + " in " + bean.getClass().getName()
                    + " is skipped - metric method cannot have parameters");
        return null;
    }//w w w.j  ava  2  s  .  co m
    if (method.getReturnType().equals(Void.TYPE)) {
        if (logger.isWarnEnabled())
            logger.warn("Metric registration of method " + method.getName() + " in " + bean.getClass().getName()
                    + " is skipped - metric method cannot return void");
        return null;
    }

    if (Modifier.isStatic(method.getModifiers())) {
        if (logger.isWarnEnabled())
            logger.warn("Metric registration of method " + method.getName() + " in " + bean.getClass().getName()
                    + " is skipped - metric method cannot be static");
        return null;
    }

    if (!method.isAccessible())
        method.setAccessible(true);

    if (Metric.class.isAssignableFrom(method.getReturnType())) {
        try {
            return (Metric) method.invoke(bean);
        } catch (IllegalAccessException e) {
            if (logger.isWarnEnabled())
                logger.warn("Metric registration of method " + method.getName() + " in "
                        + bean.getClass().getName() + " is skipped - failed to get metric - " + e.getMessage());
            return null;
        } catch (InvocationTargetException e) {
            if (logger.isWarnEnabled())
                logger.warn("Metric registration of method " + method.getName() + " in "
                        + bean.getClass().getName() + " is skipped - failed to get metric - " + e.getMessage());
            return null;
        }
    }

    return new Gauge<Object>() {
        @Override
        public Object getValue() throws Exception {
            return method.invoke(bean);
        }
    };
}

From source file:org.vulpe.commons.util.VulpeReflectUtil.java

/**
 * Returns field value from object.//from w w w. j a va 2s .  co m
 *
 * @param <T>
 * @param object
 * @param fieldName
 * @return
 */
public static <T> T getFieldValue(final Object object, final String fieldName) {
    try {
        final String name = VulpeStringUtil.upperCaseFirst(fieldName);
        final Method method = getMethod(object.getClass(), "get".concat(name));
        if (method != null) {
            synchronized (method) {
                boolean setted = false;
                if (!method.isAccessible()) {
                    method.setAccessible(true);
                    setted = true;
                }
                try {
                    return (T) method.invoke(object);
                } catch (Exception e) {
                    LOG.error(e.getMessage());
                } finally {
                    if (setted) {
                        method.setAccessible(false);
                    }
                }
            }
        }
        final Field field = getField(object.getClass(), fieldName);
        if (field != null) {
            synchronized (field) {
                boolean setted = false;
                if (!field.isAccessible()) {
                    field.setAccessible(true);
                    setted = true;
                }
                try {
                    return (T) field.get(object);
                } finally {
                    if (setted) {
                        field.setAccessible(false);
                    }
                }
            }
        }
        return null;
    } catch (Exception e) {
        throw new VulpeSystemException(e);
    }
}

From source file:org.gerzog.spock.injectmock.internal.accessors.MethodAccessor.java

@Override
protected void internalSet(final Object target, final String name, final Object value) {
    final String methodName = toMethodName(name);
    final Method method = getDeclaredMethod(target.getClass(), value.getClass(), methodName);

    if (method != null) {
        final boolean original = method.isAccessible();
        try {//ww w.j  ava2 s  .co  m
            method.setAccessible(true);
            method.invoke(target, value);
        } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            throw new InvalidSpecException("Cannot write injectable value to method <"
                    + target.getClass().getSimpleName() + "." + methodName + ">", e);
        } finally {
            method.setAccessible(original);
        }
    }
}

From source file:iqq.app.core.service.impl.TaskServiceImpl.java

@Override
public void submit(final Object target, final String method, final Object... args) {
    threads.submit(new Runnable() {
        public void run() {
            for (Method m : target.getClass().getDeclaredMethods()) {
                if (m.getName().equals(method)) {
                    try {
                        if (!m.isAccessible()) {
                            m.setAccessible(true);
                        }/* www.j  a  v  a2  s. c  om*/
                        m.invoke(target, args);
                        return;
                    } catch (Throwable e) {
                        LOG.warn("invoke method error!!", e);
                    }
                }
            }
        }
    });
}

From source file:la.xiong.mylibrary.EasyPermissions.java

/**
 * Find all methods annotated with {@link } on a given object with the
 * correc requestCode argument./*  w w w.  j a  va 2 s  .com*/
 * @param object the object with annotated methods.
 * @param requestCode the requestCode passed to the annotation.
 */
private static void runAnnotatedMethods(@NonNull Object object, int requestCode) {
    Class clazz = object.getClass();
    if (isUsingAndroidAnnotations(object)) {
        clazz = clazz.getSuperclass();
    }

    while (clazz != null) {
        for (Method method : clazz.getDeclaredMethods()) {
            if (method.isAnnotationPresent(AfterPermissionGranted.class)) {
                // Check for annotated methods with matching request code.
                AfterPermissionGranted ann = method.getAnnotation(AfterPermissionGranted.class);
                if (ann.value() == requestCode) {
                    // Method must be void so that we can invoke it
                    if (method.getParameterTypes().length > 0) {
                        throw new RuntimeException("Cannot execute method " + method.getName()
                                + " because it is non-void method and/or has input parameters.");
                    }

                    try {
                        // Make method accessible if private
                        if (!method.isAccessible()) {
                            method.setAccessible(true);
                        }
                        method.invoke(object);
                    } catch (IllegalAccessException e) {
                        Log.e(TAG, "runDefaultMethod:IllegalAccessException", e);
                    } catch (InvocationTargetException e) {
                        Log.e(TAG, "runDefaultMethod:InvocationTargetException", e);
                    }
                }
            }
        }

        clazz = clazz.getSuperclass();
    }
}

From source file:com.fxc.lib.pmsion.EasyPermissions.java

private static void runAnnotatedMethods(@NonNull Object object, int requestCode) {
    Class clazz = object.getClass();
    if (isUsingAndroidAnnotations(object)) {
        clazz = clazz.getSuperclass();//w  w  w  . j  av  a  2  s . c  om
    }
    for (Method method : clazz.getDeclaredMethods()) {
        if (method.isAnnotationPresent(AfterPermissionGranted.class)) {
            // Check for annotated methods with matching request code.
            AfterPermissionGranted ann = method.getAnnotation(AfterPermissionGranted.class);
            if (ann.value() == requestCode) {
                // Method must be void so that we can invoke it
                if (method.getParameterTypes().length > 0) {
                    throw new RuntimeException("Cannot execute method " + method.getName()
                            + " because it is non-void method and/or has input parameters.");
                }

                try {
                    // Make method accessible if private
                    if (!method.isAccessible()) {
                        method.setAccessible(true);
                    }
                    method.invoke(object);
                } catch (IllegalAccessException e) {
                    Log.e(TAG, "runDefaultMethod:IllegalAccessException", e);
                } catch (InvocationTargetException e) {
                    Log.e(TAG, "runDefaultMethod:InvocationTargetException", e);
                }
            }
        }
    }
}

From source file:com.LFPermission.lib.LFPermissions.java

private static void runAnnotatedMethods(@NonNull Object object, int requestCode) {
    Class clazz = object.getClass();
    if (isUsingAndroidAnnotations(object)) {
        clazz = clazz.getSuperclass();/*from  ww  w. ja  va  2 s.com*/
    }

    for (Method method : clazz.getDeclaredMethods()) {
        if (method.isAnnotationPresent(AfterPermissionGranted.class)) {
            // Check for annotated methods with matching request code.
            AfterPermissionGranted ann = method.getAnnotation(AfterPermissionGranted.class);
            if (ann.value() == requestCode) {
                // Method must be void so that we can invoke it
                if (method.getParameterTypes().length > 0) {
                    throw new RuntimeException("Cannot execute method " + method.getName()
                            + " because it is non-void method and/or " + "has input parameters.");
                }

                try {
                    // Make method accessible if private
                    if (!method.isAccessible()) {
                        method.setAccessible(true);
                    }
                    method.invoke(object);
                } catch (IllegalAccessException e) {
                    Log.e(TAG, "runDefaultMethod:IllegalAccessException", e);
                } catch (InvocationTargetException e) {
                    Log.e(TAG, "runDefaultMethod:InvocationTargetException", e);
                }
            }
        }
    }
}

From source file:org.jaffa.soa.dataaccess.DataTransformer.java

/**
 * Mould data from domain object and its related objects into a new JavaBean based
 * domain object graph, based on the defined mapping rules.
 *
 * @param source           Source object to mould data from, typically extends Persistent
 * @param target           Target object to mould data to, typically extends GraphDataObject
 * @param graph            The mapping class with the rules of how to map this source object
 * @param filter           Filter object that it is used to control what fields are populated or the target objects
 * @param objectPath       The path of this object being processed. This identifies possible parent
 *                         and/or indexed entries where this object is contained.
 * @param includeKeys      true if key fields should be included in results regardless of the filters
 * @param originalCriteria the original graph criteria.
 * @param handler          Possible bean handler to be used when processing this source object graph
 * @throws ApplicationExceptions Thrown if one or more application logic errors are generated during moulding
 * @throws FrameworkException    Thrown if any runtime moulding error has occured.
 *//*w w w  . j av a2s .  c  o m*/
public static void buildGraphFromDomain(Object source, Object target, GraphMapping graph, MappingFilter filter,
        String objectPath, boolean includeKeys, GraphCriteria originalCriteria, ITransformationHandler handler)
        throws ApplicationExceptions, FrameworkException {

    if (graph == null)
        graph = MappingFactory.getInstance(target);

    boolean useQueryDomain = graph.getQueryDomainClass() != null
            && source.getClass().isAssignableFrom(graph.getQueryDomainClass());

    //throw new InstantiationException("A GraphMapping must be supplied");
    if (filter == null)
        filter = MappingFilter.getInstance(graph);

    try {
        // get list of target fileds to populate
        String[] tFields = graph.getDataFieldNames();
        if (tFields != null && tFields.length != 0)
            for (int i = 0; i < tFields.length; i++) {
                // Try to map a source to a target
                String tName = tFields[i];
                String fullName = tName;
                if (objectPath != null)
                    fullName = objectPath + "." + fullName;

                if (filter == null || filter.isFieldIncluded(fullName)
                        || (includeKeys && graph.isKeyField(tName))) {
                    String sName = graph.getDomainFieldName(tName);
                    AccessibleObject tAccessibleObject = graph.getDataMutator(tName);
                    PropertyDescriptor tDesc = graph.getDataFieldDescriptor(tName);
                    PropertyDescriptor sDesc = useQueryDomain ? graph.getQueryDomainFieldDescriptor(tName)
                            : graph.getDomainFieldDescriptor(tName);

                    if (useQueryDomain && sDesc == null)
                        continue;

                    // Based on validation in GraphMapping, that there is a
                    // GraphObject descriptor with a setter, and a DO descriptor with a getter
                    if (sDesc == null)
                        log.error("No Getter for " + tName + " in path " + fullName);

                    // incase getter is not public, make it available
                    Method sm = sDesc.getReadMethod();
                    if (!sm.isAccessible())
                        sm.setAccessible(true);

                    // Set the value if the source and target are the same datatype
                    Class tClass = tDesc.getPropertyType();
                    Class sClass = sDesc.getPropertyType();
                    if (tClass.isAssignableFrom(sClass)) {
                        // Get the value being copied
                        Object sValue = sm.invoke(source, (Object[]) null);
                        setValue(tAccessibleObject, target, sValue);
                        if (log.isDebugEnabled())
                            log.debug("Set " + tName + " = " + sValue);

                        // See if there is a datatype mapper for these classes
                    } else if (DataTypeMapper.instance().isMappable(sClass, tClass)) {
                        // Get the value being copied
                        Object sValue = sm.invoke(source, (Object[]) null);
                        if (sValue != null) {
                            sValue = DataTypeMapper.instance().map(sValue, tClass);
                            if (log.isDebugEnabled())
                                log.debug("Set " + tName + " = " + sValue);
                        }
                        setValue(tAccessibleObject, target, sValue);

                        // See if target is a GraphObject, this could be a foreign object or one-to-one relationship...
                    } else if (GraphDataObject.class.isAssignableFrom(tClass)
                            && IPersistent.class.isAssignableFrom(sClass)) {
                        // Get the mapper for the related GraphObject, if it has keys, it must be a foriegn object
                        if (graph.isForeignField(tName)) {
                            // look at foreign key fields, and make sure they are not null
                            List foreignKeys = graph.getForeignKeys(tName);
                            List foreignKeyValues = new ArrayList();
                            boolean nullKey = false;
                            for (Iterator k = foreignKeys.iterator(); k.hasNext();) {
                                String doProp = (String) k.next();
                                Object value = null;
                                PropertyDescriptor doPd = graph.getRealDomainFieldDescriptor(doProp);
                                if (doPd != null && doPd.getReadMethod() != null) {
                                    Method m = doPd.getReadMethod();
                                    if (!m.isAccessible())
                                        m.setAccessible(true);
                                    value = m.invoke(source, new Object[] {});
                                    if (value == null)
                                        nullKey = true;
                                    foreignKeyValues.add(value);
                                } else {
                                    throw new TransformException(TransformException.INVALID_FK_MAPPING,
                                            objectPath, doProp, graph.getDomainClassShortName());
                                }
                            }
                            if (nullKey) {
                                if (log.isDebugEnabled())
                                    log.debug("Did not create skeleton object '" + tClass.getName()
                                            + "': one or more foreign key values missing.");
                            } else {
                                // Create the foreign object
                                if (log.isDebugEnabled())
                                    log.debug("Creating foreign object - " + tClass.getName());
                                Object newGDO = newGraphDataObject(tClass);
                                boolean createSkeleton = true;
                                // Only retrieve related domain object and introspect if need
                                if (filter.areSubFieldsIncluded(fullName)) {
                                    // read object and introspect all
                                    if (log.isDebugEnabled())
                                        log.debug("Read foreign object '" + fullName + "' and mold");
                                    try {
                                        Object sValue = sm.invoke(source, (Object[]) null);
                                        if (sValue != null) {
                                            DataTransformer.buildGraphFromDomain(sValue, newGDO, null, filter,
                                                    fullName, true, originalCriteria, handler);
                                            createSkeleton = false;
                                        }
                                    } catch (InvocationTargetException e) {
                                        // If the foreign object is not found, create the skeleton
                                        if (e.getCause() != null
                                                && e.getCause() instanceof InvalidForeignKeyException) {
                                            if (log.isDebugEnabled())
                                                log.debug(
                                                        "All foreign keys present, but foreign object does not exist",
                                                        e);
                                        } else
                                            throw e;
                                    }
                                }
                                if (createSkeleton) {
                                    // just set foreign keys from current object
                                    if (log.isDebugEnabled())
                                        log.debug("Set keys on skeleton foreign object only");
                                    GraphMapping graph2 = MappingFactory.getInstance(newGDO);
                                    Set keys = graph2.getKeyFields();
                                    if (keys == null || keys.size() != foreignKeyValues.size()) {
                                        throw new TransformException(TransformException.MISMATCH_FK_MAPPING,
                                                objectPath, target.getClass().getName(),
                                                newGDO.getClass().getName());
                                    }
                                    int k2 = 0;
                                    // Look through all the foreign keys on the skeleton object
                                    for (Iterator k = keys.iterator(); k.hasNext(); k2++) {
                                        String keyField = (String) k.next();
                                        Object keyValue = foreignKeyValues.get(k2);
                                        AccessibleObject accessibleObject = graph2.getDataMutator(keyField);
                                        if (accessibleObject != null) {
                                            setValue(accessibleObject, newGDO, keyValue);
                                        } else {
                                            throw new TransformException(TransformException.CANT_SET_KEY_FIELD,
                                                    objectPath, keyField, newGDO.getClass().getName());
                                        }
                                    }
                                }
                                setValue(tAccessibleObject, target, newGDO);
                                if (log.isDebugEnabled())
                                    log.debug("Set " + tName + " = " + newGDO);
                            }
                        } else {
                            // This is not a foreign object, must be a related object
                            if (filter.areSubFieldsIncluded(fullName)) {
                                // Create the related object
                                if (log.isDebugEnabled())
                                    log.debug("Creating One-To-One object - " + tClass.getName());
                                Object newGDO = newGraphDataObject(tClass);
                                // read object and introspect all
                                if (log.isDebugEnabled())
                                    log.debug("Read related object '" + fullName + "' and mold");
                                Object sValue = sm.invoke(source, (Object[]) null);
                                if (sValue != null) {
                                    DataTransformer.buildGraphFromDomain(sValue, newGDO, null, filter, fullName,
                                            false, originalCriteria, handler);
                                    setValue(tAccessibleObject, target, newGDO);
                                    if (log.isDebugEnabled())
                                        log.debug("Set " + tName + " = " + newGDO);
                                } else {
                                    if (log.isDebugEnabled())
                                        log.debug("Related object '" + fullName + "' not found. Ignore it!");
                                }
                            } else {
                                if (log.isDebugEnabled())
                                    log.debug("No subfields for object " + fullName
                                            + " included. Object not retrieved");
                            }
                        } //END-related object

                        // See if Target may be an array of GraphObject's
                    } else if (tClass.isArray()
                            && GraphDataObject.class.isAssignableFrom(tClass.getComponentType())
                            && filter.areSubFieldsIncluded(fullName)) {
                        if (log.isDebugEnabled())
                            log.debug("Target is an array of GraphObject's");
                        if (sClass.isArray() && IPersistent.class.isAssignableFrom(sClass.getComponentType())) {
                            if (log.isDebugEnabled()) {
                                log.debug("Source is an array of Persistent Objects");
                                log.debug("Read related objects '" + fullName + "' and mold");
                            }
                            Object[] sArray = findRelatedObjects(source, sClass, sm, handler, originalCriteria,
                                    fullName);
                            if (sArray != null && sArray.length > 0) {
                                Object[] tArray = (Object[]) Array.newInstance(tClass.getComponentType(),
                                        sArray.length);
                                if (log.isDebugEnabled())
                                    log.debug("Translate Array of Size " + sArray.length);
                                for (int j = 0; j < sArray.length; j++) {
                                    Object newGDO = newGraphDataObject(tClass.getComponentType());
                                    DataTransformer.buildGraphFromDomain(sArray[j], newGDO, null, filter,
                                            fullName, false, originalCriteria, handler);
                                    tArray[j] = newGDO;
                                    if (log.isDebugEnabled())
                                        log.debug("Add to array [" + j + "] : " + newGDO);
                                }
                                setValue(tAccessibleObject, target, tArray);
                                if (log.isDebugEnabled())
                                    log.debug("Set Array " + tName);
                            } else {
                                if (log.isDebugEnabled())
                                    log.debug("Source Array is empty! Do Nothing");
                            }
                        } // source is DO array

                        // Error... No way to map property
                    } else {
                        String err = "Can't Mold Property " + fullName + " from " + sClass.getName() + " to "
                                + tClass.getName();
                        log.error(err);
                        throw new RuntimeException(err);
                    }
                } // is included in filtered fields
            }

        // Load flex fields
        // By default all the domain-mapped flex fields will be loaded; unless excluded by a rule
        if (source instanceof IFlexFields && target instanceof IFlexFields) {
            String fullName = (objectPath != null ? objectPath + '.' : "") + "flexBean";
            if (filter == null || filter.isFieldIncluded(fullName)) {
                if (log.isDebugEnabled())
                    log.debug("Loading FlexBean " + fullName);
                FlexBean sFlexBean = ((IFlexFields) source).getFlexBean();
                FlexBean tFlexBean = ((IFlexFields) target).getFlexBean();
                if (sFlexBean != null && tFlexBean != null) {
                    for (DynaProperty flexProperty : sFlexBean.getDynaClass().getDynaProperties()) {
                        String name = flexProperty.getName();
                        Boolean include = filter.includeField(fullName + '.' + name);
                        if (include != null ? include
                                : ((FlexProperty) flexProperty).getFlexInfo()
                                        .getProperty("domain-mapping") != null) {
                            Object value = sFlexBean.get(name);
                            if (value != null) {
                                if (log.isDebugEnabled())
                                    log.debug("Loaded flex field '" + name + '=' + value + '\'');
                                tFlexBean.set(name, value);
                            }
                        }
                    }
                }
            }
        }

        // Clear changed fields on updated GraphObject
        if (target != null && target instanceof GraphDataObject)
            ((GraphDataObject) target).clearChanges();

        // Invoke the handler
        if (handler != null) {
            if (log.isDebugEnabled()) {
                log.debug("Invoking the endBeanLoad on the handler");
            }
            for (ITransformationHandler transformationHandler : handler.getTransformationHandlers()) {
                transformationHandler.endBeanLoad(objectPath, source, target, filter, originalCriteria);
            }
        }

    } catch (ApplicationException e) {
        throw new ApplicationExceptions(e);
    } catch (IllegalAccessException e) {
        TransformException me = new TransformException(TransformException.ACCESS_ERROR, objectPath,
                e.getMessage());
        log.error(me.getLocalizedMessage(), e);
        throw me;
    } catch (InvocationTargetException e) {
        ApplicationExceptions appExps = ExceptionHelper.extractApplicationExceptions(e);
        if (appExps != null)
            throw appExps;
        FrameworkException fe = ExceptionHelper.extractFrameworkException(e);
        if (fe != null)
            throw fe;
        TransformException me = new TransformException(TransformException.INVOCATION_ERROR, objectPath, e);
        log.error(me.getLocalizedMessage(), me.getCause());
        throw me;
    } catch (InstantiationException e) {
        TransformException me = new TransformException(TransformException.INSTANTICATION_ERROR, objectPath,
                e.getMessage());
        log.error(me.getLocalizedMessage(), e);
        throw me;
    }
}