Java源码示例:org.glassfish.jersey.internal.util.ReflectionHelper

示例1
/**
 * <p>getClassForName.</p>
 *
 * @param className a {@link java.lang.String} object.
 * @return a {@link java.lang.Class} object.
 */
public Class getClassForName(final String className) {
    try {
        final OsgiRegistry osgiRegistry = ReflectionHelper.getOsgiRegistryInstance();

        if (osgiRegistry != null) {
            return osgiRegistry.classForNameWithException(className);
        } else {
            return AccessController.doPrivileged(ReflectionHelper.classForNameWithExceptionPEA(className));
        }
    } catch (final ClassNotFoundException ex) {
        throw new RuntimeException(LocalizationMessages.ERROR_SCANNING_CLASS_NOT_FOUND(className), ex);
    } catch (final PrivilegedActionException pae) {
        final Throwable cause = pae.getCause();
        if (cause instanceof ClassNotFoundException) {
            throw new RuntimeException(LocalizationMessages.ERROR_SCANNING_CLASS_NOT_FOUND(className), cause);
        } else if (cause instanceof RuntimeException) {
            throw (RuntimeException) cause;
        } else {
            throw new RuntimeException(cause);
        }
    }
}
 
示例2
@Override
protected Factory<?> createValueFactory(Parameter parameter) {
    if (parameter.isAnnotationPresent(Pac4JProfileManager.class)) {
        if (ProfileManager.class.isAssignableFrom(parameter.getRawType())) {
            return manager.get();
        }

        throw new IllegalStateException("Cannot inject a Pac4J profile manager into a parameter of type "
                + parameter.getRawType().getName());
    }

    if (parameter.isAnnotationPresent(Pac4JProfile.class)) {
        if (CommonProfile.class.isAssignableFrom(parameter.getRawType())) {
            return profile.get();
        }

        if (Optional.class.isAssignableFrom(parameter.getRawType())) {
            List<ClassTypePair> ctps = ReflectionHelper.getTypeArgumentAndClass(parameter.getRawType());
            ClassTypePair ctp = (ctps.size() == 1) ? ctps.get(0) : null;
            if (ctp == null || CommonProfile.class.isAssignableFrom(ctp.rawClass())) {
                return optProfile.get();
            }
        }

        throw new IllegalStateException(
                "Cannot inject a Pac4J profile into a parameter of type " + parameter.getRawType().getName());
    }

    return null;
}
 
示例3
@Override
protected Function<ContainerRequest, ?> createValueProvider(Parameter parameter) {
    if (parameter.isAnnotationPresent(Pac4JProfileManager.class)) {
        if (ProfileManager.class.isAssignableFrom(parameter.getRawType())) {
            return manager.get();
        }

        throw new IllegalStateException("Cannot inject a Pac4J profile manager into a parameter of type "
            + parameter.getRawType().getName());
    }

    if (parameter.isAnnotationPresent(Pac4JProfile.class)) {
        if (CommonProfile.class.isAssignableFrom(parameter.getRawType())) {
            return profile.get();
        }

        if (Optional.class.isAssignableFrom(parameter.getRawType())) {
            List<ClassTypePair> ctps = ReflectionHelper.getTypeArgumentAndClass(parameter.getRawType());
            ClassTypePair ctp = (ctps.size() == 1) ? ctps.get(0) : null;
            if (ctp == null || CommonProfile.class.isAssignableFrom(ctp.rawClass())) {
                return optProfile.get();
            }
        }

        throw new IllegalStateException(
            "Cannot inject a Pac4J profile into a parameter of type " + parameter.getRawType().getName());
    }

    return null;
}
 
示例4
@Override
protected Function<ContainerRequest, ?> createValueProvider(Parameter parameter) {
    if (parameter.isAnnotationPresent(Pac4JProfileManager.class)) {
        if (ProfileManager.class.isAssignableFrom(parameter.getRawType())) {
            return manager.get();
        }

        throw new IllegalStateException("Cannot inject a Pac4J profile manager into a parameter of type "
            + parameter.getRawType().getName());
    }

    if (parameter.isAnnotationPresent(Pac4JProfile.class)) {
        if (CommonProfile.class.isAssignableFrom(parameter.getRawType())) {
            return profile.get();
        }

        if (Optional.class.isAssignableFrom(parameter.getRawType())) {
            List<ClassTypePair> ctps = ReflectionHelper.getTypeArgumentAndClass(parameter.getRawType());
            ClassTypePair ctp = (ctps.size() == 1) ? ctps.get(0) : null;
            if (ctp == null || CommonProfile.class.isAssignableFrom(ctp.rawClass())) {
                return optProfile.get();
            }
        }

        throw new IllegalStateException(
            "Cannot inject a Pac4J profile into a parameter of type " + parameter.getRawType().getName());
    }

    return null;
}
 
示例5
/**
 * <p>configFilterIntrospector.</p>
 *
 * @param mapper a {@link com.fasterxml.jackson.databind.ObjectMapper} object.
 * @return a {@link com.fasterxml.jackson.databind.ObjectMapper} object.
 */
public static ObjectMapper configFilterIntrospector(final ObjectMapper mapper) {
    final AnnotationIntrospector customIntrospector = mapper.getSerializationConfig().getAnnotationIntrospector();
    // Set the custom (user) introspector to be the primary one.
    return mapper.setAnnotationIntrospector(AnnotationIntrospector.pair(customIntrospector,
            new JacksonAnnotationIntrospector() {
                @Override
                public Object findFilterId(final Annotated a) {
                    final Object filterId = super.findFilterId(a);

                    if (filterId != null) {
                        return filterId;
                    }

                    if (a instanceof AnnotatedMethod) {
                        final Method method = ((AnnotatedMethod) a).getAnnotated();

                        // Interested only in getters - trying to obtain "field" name from them.
                        if (ReflectionHelper.isGetter(method)) {
                            return ReflectionHelper.getPropertyName(method);
                        }
                    }
                    if (a instanceof AnnotatedField || a instanceof AnnotatedClass) {
                        return a.getName();
                    }

                    return null;
                }
            }));

}
 
示例6
/**
 * <p>getTemplateObjectFactory.</p>
 *
 * @param serviceLocator a {@link org.glassfish.hk2.api.ServiceLocator} object.
 * @param type           a {@link java.lang.Class} object.
 * @param defaultValue   a {@link org.glassfish.jersey.internal.util.collection.Value} object.
 * @param <F>            a F object.
 * @return a F object.
 */
@SuppressWarnings("unchecked")
protected <F> F getTemplateObjectFactory(ServiceLocator serviceLocator, Class<F> type, Value<F> defaultValue) {
    Object objectFactoryProperty = this.config.getProperty(MvcFeature.TEMPLATE_OBJECT_FACTORY + this.suffix);
    if (objectFactoryProperty != null) {
        if (type.isAssignableFrom(objectFactoryProperty.getClass())) {
            return type.cast(objectFactoryProperty);
        }

        Class<F> factoryClass = null;
        if (objectFactoryProperty instanceof String) {
            factoryClass = ReflectionHelper.<F>classForNamePA((String) objectFactoryProperty).run();
        } else if (objectFactoryProperty instanceof Class) {
            factoryClass = (Class<F>) objectFactoryProperty;
        }

        if (factoryClass != null) {
            if (type.isAssignableFrom(factoryClass)) {
                return serviceLocator.create(factoryClass);
            }

            logger.warn(LocalizationMessages.WRONG_TEMPLATE_OBJECT_FACTORY(factoryClass, type));
        }
    }

    return defaultValue.get();
}
 
示例7
/**
 * Returns a list of enhancing methods for a given {@link org.glassfish.jersey.server.model.RuntimeResource runtime resource}.
 *
 * @param runtimeResource runtime resource to create enhancing methods for.
 * @return list of enhancing methods.
 */
private List<ModelProcessorUtil.Method> getEnhancingMethods(final RuntimeResource runtimeResource) {
    final List<ModelProcessorUtil.Method> newMethods = Lists.newArrayList();

    for (final Resource resource : runtimeResource.getResources()) {
        // Handler classes.
        for (final Class<?> handlerClass : resource.getHandlerClasses()) {
            createEnhancingMethods(handlerClass, null, newMethods);
        }

        // Names - if there are no handler classes / instances.
        if (resource.getHandlerClasses().isEmpty() && resource.getHandlerInstances().isEmpty()) {
            for (String resourceName : resource.getNames()) {
                final Class<Object> resourceClass = AccessController
                        .doPrivileged(ReflectionHelper.classForNamePA(resourceName));
                if (resourceClass != null) {
                    createEnhancingMethods(resourceClass, null, newMethods);
                }
            }
        }

        // Handler instances.
        Errors.process((Producer<Void>) () -> {
            for (final Object handlerInstance : resource.getHandlerInstances()) {
                final Class<?> handlerInstanceClass = handlerInstance.getClass();

                if (!resource.getHandlerClasses().contains(handlerInstanceClass)) {
                    createEnhancingMethods(handlerInstanceClass, handlerInstance, newMethods);
                } else {
                    Errors.warning(resource,
                            LocalizationMessages.TEMPLATE_HANDLER_ALREADY_ENHANCED(handlerInstanceClass));
                }
            }

            return null;
        });
    }

    return newMethods;
}
 
示例8
/**
 * Creates a new client-side representation of a resource described by
 * the interface passed in the first argument.
 *
 * @param <C>                Type of the resource to be created.
 * @param resourceInterface  Interface describing the resource to be created.
 * @param target             WebTarget pointing to the resource or the parent of the resource.
 * @param ignoreResourcePath If set to true, ignores path annotation on the resource interface (this is used when creating
 *                           sub-resources)
 * @param headers            Header params collected from parent resources (used when creating a sub-resource)
 * @param cookies            Cookie params collected from parent resources (used when creating a sub-resource)
 * @param form               Form params collected from parent resources (used when creating a sub-resource)
 * @return Instance of a class implementing the resource interface that can
 * be used for making requests to the server.
 */
@SuppressWarnings("unchecked")
public static <C> C newResource(final Class<C> resourceInterface,
                                final WebTarget target,
                                final boolean ignoreResourcePath,
                                final MultivaluedMap<String, Object> headers,
                                final List<Cookie> cookies,
                                final Form form,
                                final ClientMethodInvoker invoker) {

    return (C) Proxy.newProxyInstance(AccessController.doPrivileged(ReflectionHelper.getClassLoaderPA(resourceInterface)),
            new Class[]{resourceInterface},
            new WebResourceFactory(ignoreResourcePath ? target : addPathFromAnnotation(resourceInterface, target),
                    headers, cookies, form, invoker));
}