5 Replies Latest reply on Feb 15, 2012 5:40 AM by ahhughes

    Programmatic Lookup with AnnotationLiteral, @Produces and InjectionPoint, how?

    ahhughes

      Hi Guys,

       

      I need to pass a runtime value into a qualified producer, but can't get this working. It seems like select() and InjectionPoint can't be used together, or can they?

       

      Code to explain (hopefully)...

       

      The @Qualifier & AnnotationLiteral

       

      @Qualifier

      @Retention(RUNTIME)

      @Target({ TYPE, METHOD, FIELD, PARAMETER })

      public @interface ServiceId {

            @Nonbinding String value() default "";

      }

       

      public class ServiceIdLiteral extends AnnotationLiteral<ServiceId > implements ServiceId {

          public String value;

           public ServiceIdLiteral(String value){

              this.value = value;

           }

          @Override

          String value() { return value; }

      }

       



      The @Inject'n and Programmatic Lookup

       

      @Inject

      @Any

      Instance<Service> serviceSource;

       

      ...

       

      Service service = serviceSource.select(new ServiceIdLiteral(theRuntimeServiceId)).get(); //FAILS IN THE @Produces

       

      The @Produces, which seems to never get the injection point when programmatic lookup above exec's....

       

      @Produces

      @ServiceId

      Service getServiceByServiceId(InjectionPoint ip) {

          ServiceId serviceId = ip.getAnnotated().getAnnotation(ServiceId.class).value(); //ALWAYS THROWS NPE!

          ......

      }

       

       

      Since I can't see this documented and there are no examples, can someone confirm if what I am to achieve is even possible?

       

       

      Pete's comment (09-Mar-2010) on this post https://community.jboss.org/message/658227#658227 seems to indicate that this should work...

       

       

      CHEERS

       

      p.s. yes... this question had a massive edit/rewrite.