[
https://issues.jboss.org/browse/WELD-1082?page=com.atlassian.jira.plugin....
]
Manuel Hartl commented on WELD-1082:
------------------------------------
i will try a pull request the next time, for now i will paste the three classes in here:
------------------------------------------------------------
package org.jboss.weld.tests.unit.bootstrap;
/**
*
* @author Manuel Hartl / FlexSecure GmbH
*
*/
public class SomeBean {
@TestBinding
public boolean businessMethod() {
return true;
}
}
------------------------------------------------------------
package org.jboss.weld.tests.unit.bootstrap;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;
/**
*
* @author Manuel Hartl / FlexSecure GmbH
*
*/
@Interceptor
@TestBinding
public class TestInterceptor {
@AroundInvoke
public Object process(InvocationContext invocationContext) throws Exception {
throw new RuntimeException("should not be thrown");
}
}
------------------------------------------------------------
package org.jboss.weld.tests.unit.bootstrap;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static org.junit.Assert.assertTrue;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.inject.Inject;
import javax.interceptor.InterceptorBinding;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.ByteArrayAsset;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
@Retention(RUNTIME)
@Target({ METHOD, TYPE })
@Documented
@InterceptorBinding
@interface TestBinding {
}
/**
*
* @author Manuel Hartl / FlexSecure GmbH
*
*/
@RunWith(Arquillian.class)
public class InterceptorTest {
@Deployment
public static WebArchive createWebappWithTwoJars() {
// first bean archive: has interceptor and a beans.xml that enables it.
JavaArchive bda1 = ShrinkWrap
.create(JavaArchive.class, "bda1.jar")
.addClasses(TestInterceptor.class)
.addAsManifestResource(
new ByteArrayAsset(
("<beans><interceptors><class>" +
TestInterceptor.class.getName() +
"</class></interceptors></beans>")
.getBytes()), ArchivePaths.create("beans.xml"));
// second bean archive: has a bean with the interceptor binding on a method, but no
enabled interceptor!
JavaArchive bda2 = ShrinkWrap.create(JavaArchive.class, "bda2.jar")
.addClasses(SomeBean.class)
.addAsManifestResource(EmptyAsset.INSTANCE,
ArchivePaths.create("beans.xml"));
return ShrinkWrap.create(WebArchive.class,
"test.war").addAsLibraries(bda1).addAsLibraries(bda2);
}
@Inject
SomeBean someBean;
@Test
public void testGlobalInterceptors() {
assertTrue(someBean.businessMethod());
}
}
Interceptor resolution works across bean archive boundaries
-----------------------------------------------------------
Key: WELD-1082
URL:
https://issues.jboss.org/browse/WELD-1082
Project: Weld
Issue Type: Bug
Components: Interceptors and Decorators
Affects Versions: 1.1.5.Final
Environment: tomcat 7.0.25, windows 7, weld 1.1.5,
Reporter: Manuel Hartl
Enabling Interceptors in beans.xml in a bean archive will enable the interceptor for ALL
bean archives in the class path.
according to CDI spec 1.0 (9.5. Interceptor resolution) this is wrong:
"An interceptor is bound to a method if: [....] The interceptor is enabled in the
bean archive containing the bean."
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira