package org.jboss.resteasy.util;

import javax.ws.rs.HttpMethod;
import javax.ws.rs.Path;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

Author:Bill Burke
Version:$Revision: 1 $
/** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */
public class GetRestful {
Given a class, search itself and implemented interfaces for jax-rs annotations.
Params:
  • clazz – class
Returns:list of class and intertfaces that have jax-rs annotations
/** * Given a class, search itself and implemented interfaces for jax-rs annotations. * * @param clazz class * @return list of class and intertfaces that have jax-rs annotations */
public static Class<?> getRootResourceClass(Class<?> clazz) { return AnnotationResolver.getClassWithAnnotation(clazz, Path.class); }
Given a class, search itself and implemented interfaces for jax-rs annotations.
Params:
  • clazz – class
Returns:list of class and interfaces that have jax-rs annotations
/** * Given a class, search itself and implemented interfaces for jax-rs annotations. * * @param clazz class * @return list of class and interfaces that have jax-rs annotations */
public static boolean isSubResourceClass(Class<?> clazz) { // check class & superclasses for JAX-RS annotations for (Class<?> actualClass = clazz; isTopObject(actualClass); actualClass = actualClass.getSuperclass()) { if (hasJAXRSAnnotations(actualClass)) return true; // ok, no @Path or @HttpMethods so look in interfaces. for (Class<?> intf : actualClass.getInterfaces()) { if (hasJAXRSAnnotations(intf)) return true; } } return false; }
Given a class, search itself and implemented interfaces for jax-rs annotations.
Params:
  • clazz – class
Returns:list of class and interfaces that have jax-rs annotations
/** * Given a class, search itself and implemented interfaces for jax-rs annotations. * * @param clazz class * @return list of class and interfaces that have jax-rs annotations */
public static Class<?> getSubResourceClass(Class<?> clazz) { // check class & superclasses for JAX-RS annotations for (Class<?> actualClass = clazz; isTopObject(actualClass); actualClass = actualClass.getSuperclass()) { if (hasJAXRSAnnotations(actualClass)) return actualClass; } // ok, no @Path or @HttpMethods so look in interfaces. for (Class<?> intf : clazz.getInterfaces()) { if (hasJAXRSAnnotations(intf)) return intf; } return null; }
Given a class, search itself and implemented interfaces for jax-rs annotations.
Params:
  • clazz – class
Returns:list of class and interfaces that have jax-rs annotations
/** * Given a class, search itself and implemented interfaces for jax-rs annotations. * * @param clazz class * @return list of class and interfaces that have jax-rs annotations */
public static Class<?>[] getSubResourceClasses(Class<?> clazz) { List<Class<?>> classes = new ArrayList<Class<?>>(); // check class & superclasses for JAX-RS annotations for (Class<?> actualClass = clazz; isTopObject(actualClass); actualClass = actualClass.getSuperclass()) { if (hasJAXRSAnnotations(actualClass)) return new Class<?>[]{actualClass}; } // ok, no @Path or @HttpMethods so look in interfaces. for (Class<?> intf : clazz.getInterfaces()) { if (hasJAXRSAnnotations(intf)) classes.add(intf); } return classes.toArray(new Class<?>[classes.size()]); } private static boolean isTopObject(Class<?> actualClass) { return actualClass != null && actualClass != Object.class; } private static boolean hasJAXRSAnnotations(Class<?> c) { if (c.isAnnotationPresent(Path.class)) { return true; } for (Method method : c.isInterface() ? c.getMethods() : c.getDeclaredMethods()) { if (method.isAnnotationPresent(Path.class)) { return true; } for (Annotation ann : method.getAnnotations()) { if (ann.annotationType().isAnnotationPresent(HttpMethod.class)) { return true; } } } return false; } public static boolean isRootResource(Class<?> clazz) { return getRootResourceClass(clazz) != null; } }