Paul, I tried also the @Reference annotation. This doesn't work, the variable remains null. No injection is happening.
-- Jaap > -----Original Message----- > From: Paul Spencer <paulspen...@mindspring.com> > Sent: maandag 23 januari 2023 21:09 > To: user@karaf.apache.org > Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect works not > with DS > > Jaap, > In the code I posted, there was not constructor. I moved the injection of > personService to an @Reference annotated field. The @Activator > annotation is for a method, which you may not need based on your example. > > Paul Spencer > > > > On Jan 23, 2023, at 2:30 PM, Jaap Gordijn <f...@gordijn.org> wrote: > > > > Hi Paul, > > > > That constructor is called, but only if I disable @@JaxrsApplicationSelect. > > > > If I enable it, only the default constructor is called (Rest() in my case. > > And no DS. > > > > -- Jaap > > > >> -----Original Message----- > >> From: Paul Spencer <paulspen...@mindspring.com> > >> Sent: maandag 23 januari 2023 18:59 > >> To: user@karaf.apache.org > >> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect > >> works not with DS > >> > >> Jaap, > >> Your @Activate annotation is incorrect. > >> Try the following. > >> > >> > >> … > >> public class Rest() { > >> > >> @Reference > >> private PersonService personService; > >> > >> @Activate > >> public void activate(Map <String,?> properties) { > >> ... > >> } > >> > >> } > >> > >> Paul Spencer > >> > >> > >>> On Jan 23, 2023, at 12:40 PM, Jaap Gordijn <f...@gordijn.org> wrote: > >>> > >>> Hi, > >>> > >>> I use an Application object (with @JaxrsApplicationSelect), > >>> injection via DS does not work: > >>> > >>> @Component(service = Rest.class, scope = ServiceScope.PROTOTYPE) > >>> @JaxrsResource @JaxrsApplicationSelect("(" + > >>> JaxrsWhiteboardConstants.JAX_RS_NAME + > >>> "=MyApplication)") > >>> @JSONRequired > >>> @Produces(MediaType.APPLICATION_JSON) > >>> public class Rest { > >>> > >>> private PersonService personService; > >>> > >>> /* > >>> public Rest() { > >>> System.out.println("Constructing REST"); > >>> this.personService = new PersonServiceImpl(); > >>> } > >>> */ > >>> > >>> @Activate > >>> public Rest(final @Reference PersonService personService) { > >>> System.out.println("Constructing REST"); > >>> this.personService = personService; > >>> } > >>> > >>> @GET > >>> @Path("/person") > >>> public List<PersonDto> listPersons() { > >>> return personService.select(); > >>> } > >>> > >>> @GET > >>> @Path("/test") > >>> public String test() { > >>> return "test"; > >>> } > >>> } > >>> > >>> The @Activate constructor is not called. If I enable the Rest() > >>> constructor that one is called. > >>> if I disable @JaxrsApplicationSelect, the personService is injected. > >>> > >>> It seems that once an Application class is used (see below), DS is > >>> not working. > >>> This leads to the question what I have to set up for the Application > object: > >>> > >>> @Component(service=Application.class, property = > >>> {"servlet.init.hide-service-list-page=true"} ) > >>> @JaxrsApplicationBase("example") > >>> @JaxrsName("MyApplication") > >>> public class MyApplication extends Application { > >>> > >>> public Set<Class<?>> getClasses() { > >>> HashSet<Class<?>> set = new HashSet<Class<?>>(); > >>> set.add(Rest.class); > >>> return set; > >>> } > >>> > >>> } > >>> > >>> Jax-rs-whiteboard 2.02 > >>> Karaf 4.4.3 > >>> > >>> Thanks, > >>> > >>> -- Jaap > >>> > >>> > > > >