-
Bug
-
Resolution: Done
-
Minor
-
3.0.5.Final
-
None
-
-
Workaround Exists
-
I report a strange behavior on WildFly 13 when configuring interceptors within stateless. Below I describe the scenario:
Here a simple interceptor:
package it.vige.injection.interceptors; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext; @Interceptor public class OKInterceptor { @AroundInvoke public Object aroundInvoke(InvocationContext ic) throws Exception { return ic.proceed(); } }
Here an annotation used as interceptor binding:
package it.vige.injection.interceptors; import static java.lang.annotation.ElementType.CONSTRUCTOR; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.interceptor.InterceptorBinding; @Retention(RUNTIME) @Target({ METHOD, TYPE, CONSTRUCTOR }) @InterceptorBinding public @interface NotOK { }
Here an interceptor annotated with the interceptor binding:
package it.vige.injection.interceptors; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext; @Interceptor @NotOK public class NotOKInterceptor { @AroundInvoke public Object aroundInvoke(InvocationContext ic) throws Exception { return ic.proceed(); } }
Here the stateless service configured with both the interceptors:
package it.vige.injection.interceptors; import javax.ejb.Stateless; import javax.interceptor.Interceptors; @Stateless public class SimpleService { @Interceptors({ OKInterceptor.class }) public void ok() { } @NotOK public void notOk() { } }
This service must have two methods, one attached to the simple interceptor and the other attached to the interceptor binding.
Here the beans.xml configuration:
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd" version="2.0" bean-discovery-mode="all"> <interceptors> <class>it.vige.injection.interceptors.OKInterceptor</class> <class>it.vige.injection.interceptors.NotOKInterceptor</class> </interceptors> </beans>
And in the end the client who call the service:
.... @Inject private SimpleService simpleService; ... // this call works: simpleService.ok(); // this call starts a NullPointerException: simpleService.notOk(); ...
when I try to call the notOk method I get this exception:
javax.ejb.EJBException: java.lang.NullPointerException at deployment.test.war//it.vige.injection.test.InterceptorsTestCase.testNotOk(InterceptorsTestCase.java:52) Caused by: java.lang.NullPointerException at deployment.test.war//it.vige.injection.test.InterceptorsTestCase.testNotOk(InterceptorsTestCase.java:52)
The same thing was tested on WildFly 11.0.0.Final and it was ok.
If on WildFfly 13.0.0.Final I remove the @Stateless annotation from the service it works