public static <T extends Annotation> T getAnnotation(Class<T> annotation, Class<?> ownerClass, Method method) {
		if ( method == null ) {
			return null;
		}

		if ( method.isAnnotationPresent(annotation) ) {
			return method.getAnnotation(annotation);
		}
		else {
		    
		    /* Check all the interface Classes to determine if the annotation
		     * exists
		     */
			for(Class<?> aInterface : ownerClass.getInterfaces()) {
				Method inheritedMethod = getInheritedMethodByName(aInterface, method.getName(), method.getParameterTypes());
				if ( inheritedMethod != null ) {
					T result = getAnnotation(annotation, aInterface, inheritedMethod);
					if ( result != null ) {
						return result;
					}
				}
			}

			/* Query the parent class for the annotation */
			Class<?> superClass = method.getDeclaringClass().getSuperclass();
			Method inheritedMethod = getInheritedMethodByName(superClass, method.getName(), method.getParameterTypes());

			return getAnnotation(annotation, superClass, inheritedMethod);
		}
	}