Olá Pessoal, tudo bom?
Hoje iremos falar sobre o erro WELD-001448 ou Method intercept defined on class [NOME_CLASSE] is not defined according to the specification. Veja na continuação
Descrição do Erro
Quando estamos declarando um interceptor, existe um método que devemos implementar com algumas características particulares como a criação de apenas um parâmetro do tipo javax.interceptor.InvocationContext. Vamos supor o código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package br.com.mauda.seminario.cientificos.interceptor; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; @Interceptor @Cronometro public class CronometroInterceptor { @AroundInvoke public Object intercept() throws Exception { return new Object(); //Apenas a titulo de exemplo retorna-se isso } } |
Como a declaração do método do interceptor está errada, sem o parâmetro correto, ocorrerá a exception com a seguinte stack trace:
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-001448: Method intercept defined on class br.com.mauda.seminario.cientificos.interceptor.CronometroInterceptor is not defined according to the specification. It is annotated with @javax.interceptor.AroundInvoke but it does not have exactly one parameter
at br.com.mauda.seminario.cientificos.interceptor.CronometroInterceptor.intercept(CronometroInterceptor.java:14)
StackTrace
at org.jboss.weld.interceptor.reader.InterceptorMetadataUtils.isValidBusinessMethodInterceptorMethod(InterceptorMetadataUtils.java:117)
at org.jboss.weld.interceptor.reader.InterceptorMetadataUtils.isInterceptorMethod(InterceptorMetadataUtils.java:37)
at org.jboss.weld.util.BeanMethods$3.processMethod(BeanMethods.java:338)
at org.jboss.weld.util.BeanMethods.getMethods(BeanMethods.java:125)
at org.jboss.weld.util.BeanMethods.getInterceptorMethods(BeanMethods.java:322)
at org.jboss.weld.interceptor.reader.InterceptorMetadataUtils.buildMethodMap(InterceptorMetadataUtils.java:130)
at org.jboss.weld.bean.InterceptorImpl.initInterceptorMetadata(InterceptorImpl.java:81)
at org.jboss.weld.bean.InterceptorImpl.<init>(InterceptorImpl.java:69)
at org.jboss.weld.bean.InterceptorImpl.of(InterceptorImpl.java:64)
at org.jboss.weld.bootstrap.AbstractBeanDeployer.createInterceptor(AbstractBeanDeployer.java:293)
at org.jboss.weld.bootstrap.BeanDeployer.createClassBean(BeanDeployer.java:223)
at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:74)
at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:71)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:62)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:55)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Solução
A solução para esse problema é inserir o parâmetro corretamente e o import correspondente, conforme as linhas marcadas no código abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package br.com.mauda.seminario.cientificos.interceptor; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext; @Interceptor @Cronometro public class CronometroInterceptor { @AroundInvoke public Object intercept(InvocationContext ctx) throws Exception { return ctx.proceed(); } } |
finally{
Caso você achou mais alguma solução para essa exception, por favor deixe nos comentários abaixo!
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply