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


Reply via email to