[weld-issues] [JBoss JIRA] (WELD-1125) StackOverflowError: It is not possible to define producers in an arquillian unit test

Marko Lukša (JIRA) jira-events at lists.jboss.org
Thu May 3 18:16:18 EDT 2012


    [ https://issues.jboss.org/browse/WELD-1125?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12690237#comment-12690237 ] 

Marko Lukša commented on WELD-1125:
-----------------------------------

Manuel, any special reason why the producer method isn't static?

Since the producer method isn't static, Weld must first create an instance of the {{WeldInjectionStackOverflow}} bean before invoking the producer method on the instance. And since the bean also contains the field {{@Inject Service service}}, Weld must inject an instance of {{Service}} into the field when creating the instance of the bean. Therefore Weld must call the producer method. But it can't do that until the bean instance containing the method is set up properly. 

But then again, Weld shouldn't fail with StackOverflowError...


                
> StackOverflowError: It is not possible to define producers in an arquillian unit test
> -------------------------------------------------------------------------------------
>
>                 Key: WELD-1125
>                 URL: https://issues.jboss.org/browse/WELD-1125
>             Project: Weld
>          Issue Type: Bug
>          Components: Bootstrap and Metamodel API
>    Affects Versions: 1.1.6.Final, 1.1.7.Final, 1.1.8.Final
>         Environment: windows7, junit, arquillian 1.0.0.Final
>            Reporter: Manuel Hartl
>            Assignee: Marko Lukša
>             Fix For: 1.1.5.Final
>
>
> When i try to run the following unit test, it gives me a stackOverflowError with weld 1.1.6 and 1.1.7 - but it worked with 1.1.5!
> the problem seems to be a recursive loop, while trying to initialize the unit test itself for using its producer.
> when you move the Producer to an static innerclass and add it to the shrinkwrap definition, this test works.
> package com.kobil.ssms.kernel.logic.licencing;
> import javax.enterprise.inject.Produces;
> import javax.inject.Inject;
> import org.jboss.arquillian.container.test.api.Deployment;
> import org.jboss.arquillian.junit.Arquillian;
> import org.jboss.shrinkwrap.api.ShrinkWrap;
> import org.jboss.shrinkwrap.api.asset.EmptyAsset;
> import org.jboss.shrinkwrap.api.spec.JavaArchive;
> import org.junit.Assert;
> import org.junit.Test;
> import org.junit.runner.RunWith;
> /**
>  * 
>  * @author Manuel Hartl / FlexSecure GmbH
>  *
>  */
> @RunWith(Arquillian.class)
> public class WeldInjectionStackOverflow {
> 	@Deployment
> 	public static JavaArchive createTestArchive() {
> 		return ShrinkWrap.create(JavaArchive.class, "test.jar").addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
> 	}
> 	public static interface Service {
> 		public int dummy();
> 	};
> 	@Produces
> 	Service getSevice() throws LicenceException {
> 		return new Service() {
> 			@Override
> 			public int dummy() {
> 				return 0;
> 			}
> 		};
> 	}
> 	@Inject
> 	private Service service;
> 	@Test
> 	public void checkInjection() throws Exception {
> 		Assert.assertEquals(0, service.dummy());
> 	}
> }

--
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

       



More information about the weld-issues mailing list