/** * Checks whether a given annotation is a multi value constraint and returns the contained * constraints if so. * * @param annotation the annotation to check. * @return A list of constraint annotations or the empty list if <code>annotation</code> is not a * multi constraint annotation. */ public <A extends Annotation> List<Annotation> getMultiValueConstraints(A annotation) { List<Annotation> annotationList = new ArrayList<Annotation>(); try { final GetMethod getMethod = GetMethod.action(annotation.getClass(), "value"); final Method method; if (System.getSecurityManager() != null) { method = AccessController.doPrivileged(getMethod); } else { method = getMethod.run(); } if (method != null) { Class returnType = method.getReturnType(); if (returnType.isArray() && returnType.getComponentType().isAnnotation()) { Annotation[] annotations = (Annotation[]) method.invoke(annotation); for (Annotation a : annotations) { if (isConstraintAnnotation(a) || isBuiltinConstraint(a.annotationType())) { annotationList.add(a); } } } } } catch (IllegalAccessException iae) { // ignore } catch (InvocationTargetException ite) { // ignore } return annotationList; }
private void assertGroupsParameterExists(Annotation annotation) { try { final GetMethod getMethod = GetMethod.action(annotation.annotationType(), "groups"); final Method method; if (System.getSecurityManager() != null) { method = AccessController.doPrivileged(getMethod); } else { method = getMethod.run(); } if (method == null) { String msg = annotation.annotationType().getName() + " contains Constraint annotation, but does " + "not contain a groups parameter."; throw new ConstraintDefinitionException(msg); } Class<?>[] defaultGroups = (Class<?>[]) method.getDefaultValue(); if (defaultGroups.length != 0) { String msg = annotation.annotationType().getName() + " contains Constraint annotation, but the groups " + "paramter default value is not the empty array."; throw new ConstraintDefinitionException(msg); } } catch (ClassCastException e) { String msg = annotation.annotationType().getName() + " contains Constraint annotation, but the " + "groups parameter is of wrong type."; throw new ConstraintDefinitionException(msg); } }
/** * Checks whether a given annotation is a multi value constraint or not. * * @param annotation the annotation to check. * @return <code>true</code> if the specified annotation is a multi value constraints, <code>false * </code> otherwise. */ public boolean isMultiValueConstraint(Annotation annotation) { boolean isMultiValueConstraint = false; try { final GetMethod getMethod = GetMethod.action(annotation.getClass(), "value"); final Method method; if (System.getSecurityManager() != null) { method = AccessController.doPrivileged(getMethod); } else { method = getMethod.run(); } if (method != null) { Class returnType = method.getReturnType(); if (returnType.isArray() && returnType.getComponentType().isAnnotation()) { Annotation[] annotations = (Annotation[]) method.invoke(annotation); for (Annotation a : annotations) { if (isConstraintAnnotation(a) || isBuiltinConstraint(a.annotationType())) { isMultiValueConstraint = true; } else { isMultiValueConstraint = false; break; } } } } } catch (IllegalAccessException iae) { // ignore } catch (InvocationTargetException ite) { // ignore } return isMultiValueConstraint; }