[
https://issues.apache.org/jira/browse/WW-4738?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lukasz Lenart resolved WW-4738.
-------------------------------
Resolution: Fixed
Assignee: Lukasz Lenart
> AnnotationValidationInterceptor : NullPointerException when method is null
> --------------------------------------------------------------------------
>
> Key: WW-4738
> URL: https://issues.apache.org/jira/browse/WW-4738
> Project: Struts 2
> Issue Type: Bug
> Components: Core Interceptors
> Affects Versions: 2.3.24
> Reporter: Lorenzo Bernacchioni
> Assignee: Lukasz Lenart
> Priority: Minor
> Fix For: 2.5.10
>
>
> In {{AnnotationValidationInterceptor}} class {{method}} can be null and
> {{method.getName()}} throws a NullPointerException
> Why only in {{devMode}} a {{NoSuchMethodException}} is thrown ?
> {code}
> protected String doIntercept(ActionInvocation invocation) throws
> Exception {
> Object action = invocation.getAction();
> if (action != null) {
> Method method = getActionMethod(action.getClass(),
> invocation.getProxy().getMethod());
> Collection<Method> annotatedMethods =
> AnnotationUtils.getAnnotatedMethods(action.getClass(), SkipValidation.class);
> if (annotatedMethods.contains(method))
> return invocation.invoke();
> //check if method overwites an annotated method
> Class clazz = action.getClass().getSuperclass();
> while (clazz != null) {
> annotatedMethods = AnnotationUtils.getAnnotatedMethods(clazz,
> SkipValidation.class);
> if (annotatedMethods != null) {
> for (Method annotatedMethod : annotatedMethods) {
> if (annotatedMethod.getName().equals(method.getName())
> &&
> Arrays.equals(annotatedMethod.getParameterTypes(), method.getParameterTypes())
> &&
> Arrays.equals(annotatedMethod.getExceptionTypes(),
> method.getExceptionTypes()))
> return invocation.invoke();
> }
> }
> clazz = clazz.getSuperclass();
> }
> }
> return super.doIntercept(invocation);
> }
> protected Method getActionMethod(Class actionClass, String methodName)
> throws NoSuchMethodException {
> Method method = null;
> try {
> method = actionClass.getMethod(methodName, new Class[0]);
> } catch (NoSuchMethodException e) {
> // hmm -- OK, try doXxx instead
> try {
> String altMethodName = "do" + methodName.substring(0,
> 1).toUpperCase() + methodName.substring(1);
> method = actionClass.getMethod(altMethodName, new Class[0]);
> } catch (NoSuchMethodException e1) {
> // throw the original one
> if (devMode) {
> throw e;
> }
> }
> }
> return method;
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)