Uploaded image for project: 'Arquillian'
  1. Arquillian
  2. ARQ-1598

Warp on WildFly: CDI fails to inject into inspection that is inner static class

XMLWordPrintable

      When class is inner static class:

      public class MyTest {
      
         @Test
         public void test1() {
            Warp....inspect(new MyInspection());
            Warp....inspect(new MyInspection()); // fails
         }
      
         @Test
         public void test2() {
             Warp....inspect(new MyInspection()); // fails
         }
      
         public static class MyInspection() {
         }
      }
      

      the first inspection pass, but all subsequent inspections fails in the scope of one deployment.


      I think that is because the class is already loaded in classloader and its scanning might be cached by Weld.


      A issue was originally reproduced and reported here:

      https://issues.jboss.org/browse/RF-13417


      Exception and cause:

      java.lang.RuntimeException: Could not inject members
      	at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectClass(CDIInjectionEnricher.java:135)
      	at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.enrich(CDIInjectionEnricher.java:78)
      	at org.jboss.arquillian.test.impl.TestInstanceEnricher.enrich(TestInstanceEnricher.java:52)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:606)
      	at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
      	at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
      	at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
      	at org.jboss.arquillian.warp.impl.server.test.LifecycleTestEnrichmentWatcher.rememberFieldValue
      
      Caused by: java.lang.IllegalArgumentException: Can not set org.richfaces.ui.region.RegionBean field org.richfaces.ui.region.AbstractRegionTest$SetupExecute.region to org.richfaces.ui.region.AbstractRegionTest$SetupExecute
      	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
      	at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
      	at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55)
      	at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:75)
      	at java.lang.reflect.Field.set(Field.java:741)
      	at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:94)
      	at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:358)
      	at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:369)
      	at org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:72)
      	at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:60)
      	at org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:66)
      	at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
      	at org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:64)
      	at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:90)
      	at org.jboss.arquillian.testenricher.cdi.CDIInjectionEnricher.injectNonContextualInstance(CDIInjectionEnricher.java:145)
      

            lfryc Lukáš Fryč (Inactive)
            lfryc Lukáš Fryč (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: