2013-11-10 3 views
0

я следующий случай@Interceptor интерфейс с методами перечислений только возвращает значение по умолчанию

перехватчик Интерфейс

@Inherited 
@InterceptorBinding 
@Documented 
@Target({ ElementType.TYPE, ElementType.METHOD }) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface IErrorHandlerInterceptor { 
    Car tyre() default Car.FOUR; 
} 

Enum класс

public enum Car{ 
     FOUR,FIVE; 
    } 

EJB Stateless класса

@ErrorHandlerInterceptor(tyre= Car.FIVE) 
public List<?> getCarByName(String name) { 
    ---------- 
    return List<?>; 
} 

beans.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 
    <interceptors> 
     <class>de.festado.interceptor.impl.ErrorHandlerInterceptor</class> 
    </interceptors> 
</beans> 

Реализация перехватчик

@IErrorHandlerInterceptor 
    @Interceptor 
    public class ErrorHandlerInterceptor { 

@AroundInvoke 
public Object intercept(InvocationContext context) throws Exception { 
    IErrorHandlerInterceptor ei = getClass().getAnnotation(IErrorHandlerInterceptor.class); 
    String tyresNumber= ei.tyre().toString(); 
    try { 
     return context.proceed(); 

    } catch(Exception e) { 
     .... 
    } finally { 
     ..... 
    } 
    return null; 
} 

Теперь моя проблема:

всякий раз, когда я называю String tyresNumber= ei.tyre().toString(); он просто возвращает мне значение по умолчанию, которое я установил в объявлении интерфейса.

Что я здесь делаю неправильно? Я что-то забыл?

Спасибо за вашу помощь

ответ

0

Этот ответ здесь CDI interceptor does not work when annotation has parameter помогает мне много

IErrorHandlerInterceptor ei = getClass().getAnnotation(IErrorHandlerInterceptor.class); 

getClass().getAnnotation(...) неправильно. Правильный вызов должен исходить из контекста

IErrorHandlerInterceptorei = context.getMethod().getAnnotation(IErrorHandlerInterceptor.class); 
Смежные вопросы