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