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 <[email protected]> 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