[weld-dev] Is an interceptor with @Target(METHOD, CONSTRUCTOR, TYPE) a problem?

Marcin Zajączkowski mszpak at wp.pl
Sun Jul 18 11:00:44 EDT 2010


Thanks Mariusz for your answer.

On 2010-07-18 15:04, Pete Muir wrote:
> Whatever, this is a poor error message!
> 
> Marcin, could you file an issue in WELD please?

Sure, I filled one:
https://jira.jboss.org/browse/WELD-561


Regards
Marcin


> On 18 Jul 2010, at 03:03, Marius Bogoevici wrote:
> 
>> Hi Marcin,
>>
>> Only annotations with @Target({ElementType.METHOD, ElementType.TYPE}) or @Target({ElementType.TYPE}) can be interceptor bindings (chapter 1 of the spec).
>>
>> CDI interceptors cannot be defined for constructors per se (so there's no around-constructor semantics), but you can have a @PostConstruct method on a @Target({ElementType.TYPE}) interceptor, which effectively executes after the instance has been created and CDI-injected.
>>
>> Hope this helps,
>> Marius
>>
>> On 2010-07-17, at 5:36 PM, Marcin Zajączkowski wrote:
>>
>>> Hi,
>>>
>>>
>>> I'm trying to write mocked unit tests for my interceptor using
>>> mechanisms given by AbstractWeldTest and jboss-test-harness package.
>>>
>>> My test class extends AbstractWeldTest, had Artifact and WebBeans
>>> (pointing to beans.xml with my interceptor defined) annotations.
>>>
>>> My interceptor seems normal for me:
>>> @Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.TYPE})
>>> @Retention(RetentionPolicy.RUNTIME)
>>> @InterceptorBinding
>>> public @interface Perf4jProfiled {
>>> }
>>>
>>> When I run a very simple test, I've got:
>>> 23:06:53.505 [main] DEBUG org.jboss.weld.Reflection - WELD-000602
>>> interface net.sf.perf4cdi.api.Perf4jProfiled is not declared
>>> @Target(TYPE, METHOD) or @Target(TYPE)
>>> org.jboss.weld.exceptions.DeploymentException: WELD-000069 An
>>> interceptor must have at least one binding, but
>>> net.sf.perf4cdi.Perf4jProfiledInterceptor has none
>>> 	at org.jboss.weld.bean.InterceptorImpl.<init>(InterceptorImpl.java:71)
>>> 	at org.jboss.weld.bean.InterceptorImpl.of(InterceptorImpl.java:55)
>>> 	at
>>> org.jboss.weld.bootstrap.AbstractBeanDeployer.createInterceptor(AbstractBeanDeployer.java:255)
>>> 	at org.jboss.weld.bootstrap.BeanDeployer.createBeans(BeanDeployer.java:106)
>>> 	at
>>> org.jboss.weld.bootstrap.BeanDeployment.deployBeans(BeanDeployment.java:151)
>>> 	at
>>> org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:377)
>>> 	at
>>> org.jboss.weld.mock.MockServletLifecycle.beginApplication(MockServletLifecycle.java:121)
>>> 	at org.jboss.weld.mock.TestContainer.startContainer(TestContainer.java:85)
>>> 	at
>>> org.jboss.weld.test.harness.AbstractStandaloneContainersImpl.deploy(AbstractStandaloneContainersImpl.java:40)
>>> 	at org.jboss.testharness.AbstractTest.deployArtifact(AbstractTest.java:103)
>>> 	at org.jboss.testharness.AbstractTest.beforeClass(AbstractTest.java:206)
>>> 	at
>>> org.jboss.weld.test.AbstractWeldTest.beforeClass(AbstractWeldTest.java:57)
>>>
>>>
>>> When I remove CONSTRUCTOR it works better (there is another problem, but
>>> not related I have to debug it).
>>>
>>> I would like to ask if this is a limitation of CDI that an interceptor
>>> cannot be put on constructor?
>>>
>>>
>>> Regards
>>> Marcin
>>>
>>> _______________________________________________
>>> weld-dev mailing list
>>> weld-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/weld-dev
>>
>> _______________________________________________
>> weld-dev mailing list
>> weld-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/weld-dev
> 
> 
> _______________________________________________
> weld-dev mailing list
> weld-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/weld-dev



More information about the weld-dev mailing list