Jaap,
RestImpl
- I do not use @JSONRequired
- I would not expect this component to be activated if personService is not
resolved. You can add and @Activate method to to confirm the resolution of
personService
MyApplicationImpl
- I do not override getClasses() or getSingletons().
- My REST application relies on the following installed features:
<feature>cxf-jaxrs</feature>
<feature>jackson-jaxrs</feature>
<feature>pax-web-http-whiteboard</feature>
<feature>pax-web-karaf</feature>
<feature>aries-jax-rs-whiteboard</feature>
<feature>aries-jax-rs-whiteboard-jackson</feature>
Also I have learned that resetting the Karaf environment with “karaf clean” and
reinstalling bundles and features will clear up behavior that does not make
senses. This is especially true when there are changes to calculated the
MANIFEST.MF file.
Additional resources:
- Example REST Whiteboard
https://github.com/apache/karaf/tree/karaf-4.4.3/examples/karaf-rest-example/karaf-rest-example-whiteboard
- Issue related to feature.xml for the REST Example
https://issues.apache.org/jira/browse/KARAF-7639
Paul Spencer
> On Jan 26, 2023, at 5:02 AM, Jaap Gordijn <[email protected]> wrote:
>
> Hi Paul,
>
> I have put the Rest service in a separate bundle but that does not help.
>
> I created a simplified case:
>
> Component(service = RestImpl.class)
> @JaxrsResource
> @JaxrsApplicationSelect("(" + JaxrsWhiteboardConstants.JAX_RS_NAME +
> "=MyApplication)")
> @JSONRequired
> @Produces(MediaType.APPLICATION_JSON)
> public class RestImpl {
>
> @Reference
> private PersonService personService;
>
> @GET
> @Path("/test")
> public String test() {
> System.out.println("personService == null " + (personService ==
> null));
> return "test";
> }
> }
>
> @Component(service = Application.class, property =
> {"servlet.init.hide-service-list-page=false"} )
> @JaxrsApplicationBase("example")
> @JaxrsName("MyApplication")
> public class MyApplicationImpl extends Application {
>
> @Override
> public Set<Class<?>> getClasses() {
> HashSet<Class<?>> set = new HashSet<Class<?>>();
> set.add(JacksonJsonProvider.class);
> set.add(RestImpl.class);
> return set;
> }
>
> public Set<Object> getSingletons() {
> return Collections.<Object>singleton(RestImpl.class);
> }
> }
>
> - Execution of endpoint /example/test results in personService == null, so no
> DI
> - Disabling @JSONRequired results in personService != null, so DI work here
> - Disabling @JaxrsApplicationSelect results in personService != null, so DI
> work here
>
> This drives me into the direction that there is no problem with dependencies.
> It seems that if @JaxrsApplicationSelect and @JSONRequired are used at the
> same time, no DI happens.
>
> Best,
>
> -- Jaap
>
>> -----Original Message-----
>> From: Paul Spencer <[email protected]>
>> Sent: donderdag 26 januari 2023 00:32
>> To: [email protected]
>> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect works not
>> with DS
>>
>> Jaap,
>> I suggest placing the PersonService in a separate bundle.
>>
>> Paul Spencer
>>
>>
>>> On Jan 25, 2023, at 3:57 PM, Jaap Gordijn <[email protected]> wrote:
>>>
>>> Paul,
>>>
>>> The Rest class and the PersonService are in the same bundle.
>>>
>>> Do you know if there are any examples out there that show
>> @JaxrsApplicationSelect in combination with DS?
>>> It seems now that Application/@JaxrsApplicationBase ignores DS.
>>>
>>> -- Jaap
>>>
>>>> -----Original Message-----
>>>> From: Paul Spencer <[email protected]>
>>>> Sent: dinsdag 24 januari 2023 01:41
>>>> To: [email protected]
>>>> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect
>>>> works not with DS
>>>>
>>>> - Does bundle:headers for the REST bundle have a required capability
>>>> to the Person Service, foo.bar.PersonService in the example below.
>>>>
>>>> karaf@root> bundle:headers <REST_bundle_id> ...
>>>> Require-Capability =
>>>>
>>>> osgi.service;effective:=active;filter:=(objectClass=foo.bar.PersonSer
>>>> vice),
>>>> ...
>>>>
>>>> karaf@root>
>>>>
>>>>
>>>> My assumption is the requirement is missing, meaning the requirement
>>>> in the REST bundle is not defined correctly.
>>>>
>>>> Paul Spencer
>>>>
>>>>
>>>>> On Jan 23, 2023, at 5:44 PM, Jaap Gordijn <[email protected]> wrote:
>>>>>
>>>>> Paul,
>>>>>
>>>>> - scr is installed and started
>>>>> - the person bundle started
>>>>> - diag does not produce any output
>>>>>
>>>>> Best,
>>>>>
>>>>> -- Jaap
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Paul Spencer <[email protected]>
>>>>>> Sent: maandag 23 januari 2023 23:12
>>>>>> To: [email protected]
>>>>>> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect
>>>>>> works not with DS
>>>>>>
>>>>>> Jaap,
>>>>>> 1) What bundle provides PersonService and what is its state, as
>>>>>> reported by bundle:list?
>>>>>> 2) What is the state, as reported by bundle:list, of your REST bundle.
>>>>>>
>>>>>> If any of the bundles are in a state of waiting, what does
>>>>>> bundle:diag <bundle_id> of the waiting bundle report?
>>>>>>
>>>>>> Is the feature scr installed, if not install it.
>>>>>>
>>>>>> Paul Spencer
>>>>>>
>>>>>>
>>>>>>> On Jan 23, 2023, at 3:38 PM, Jaap Gordijn <[email protected]> wrote:
>>>>>>>
>>>>>>> Paul,
>>>>>>>
>>>>>>> I have now minimized the code that I call via REST:
>>>>>>>
>>>>>>> @Reference(scope=ReferenceScope.PROTOTYPE_REQUIRED)
>>>>>>> private PersonService personService;
>>>>>>>
>>>>>>> @GET
>>>>>>> @Path("/test")
>>>>>>> public String test() {
>>>>>>> System.out.println("personService null" +
>>>>>>> (personService ==
>>>>>> null));
>>>>>>> return "test";
>>>>>>> }
>>>>>>>
>>>>>>> The personService remains null, so no DI.
>>>>>>>
>>>>>>> I enabled DEBUG in the log.
>>>>>>>
>>>>>>> I only see DEBUG messages for " org.eclipse.jetty.util".
>>>>>>> Not for anything else.
>>>>>>>
>>>>>>> Nevertheless, feature:list | grep jax Results in:
>>>>>>>
>>>>>>> aries-jax-rs-whiteboard │ 2.0.2 │ │
>>>>>>> Started │ aries-
>>>> jax-
>>>>>> rs-2.0.2 │
>>>>>>> aries-jax-rs-whiteboard-jackson │ 2.0.2 │ │
>>>>>>> Started │
>>>> aries-
>>>>>> jax-rs-2.0.2 │
>>>>>>> aries-jax-rs-whiteboard-jettison │ 2.0.2 │ │
>>>>>>> Uninstalled │
>>>>>> aries-jax-rs-2.0.2 │
>>>>>>> aries-jax-rs-whiteboard-openapi │ 2.0.2 │ │
>>>>>>> Uninstalled
>> │
>>>>>> aries-jax-rs-2.0.2 │
>>>>>>> aries-jax-rs-whiteboard-rest-management │ 2.0.2 │ │
>>>> Uninstalled
>>>>>> │ aries-jax-rs-2.0.2 │
>>>>>>> aries-jax-rs-whiteboard-shiro │ 2.0.2 │ │
>>>>>>> Uninstalled │
>>>> aries-
>>>>>> jax-rs-2.0.2 │
>>>>>>> jaxb │ 2.3.2.3 │ │
>>>>>>> Uninstalled │ specs-4.4.3
>>>>>> │
>>>>>>> jaxrs │ 2.1.0 │ │
>>>>>>> Uninstalled │ specs-4.4.3
>>>>>> │
>>>>>>> jaxws │ 2.3.0 │ │
>>>>>>> Uninstalled │ specs-4.4.3
>>>>>> │
>>>>>>> jackson-jaxrs │ 2.14.1 │ │
>>>>>>> Uninstalled │ specs-
>> 4.4.3
>>>>>> │
>>>>>>> cxf-jaxb │ 3.5.5 │ │
>>>>>>> Uninstalled │ cxf-3.5.5
>>>>>> │
>>>>>>> cxf-jaxws │ 3.5.5 │ │
>>>>>>> Uninstalled │ cxf-3.5.5
>>>>>> │
>>>>>>> cxf-jaxrs │ 3.5.5 │ │
>>>>>>> Started │ cxf-3.5.5
>>>>>> │
>>>>>>> cxf-databinding-jaxb │ 3.5.5 │ │
>>>>>>> Uninstalled │ cxf-
>>>> 3.5.5
>>>>>> │
>>>>>>> cxf-jaxrs-cdi │ 3.5.5 │ │
>>>>>>> Uninstalled │ cxf-3.5.5
>>>>>> │
>>>>>>> karaf@root()>
>>>>>>>
>>>>>>> This gives me the impression that the whitenboard stuff is working.
>>>>>>>
>>>>>>> -- Jaap
>>>>>>>
>>>>>>>> -----Original Message-----
>>>>>>>
>>>>>>>
>>>>>>>> From: Paul Spencer <[email protected]>
>>>>>>>> Sent: maandag 23 januari 2023 21:19
>>>>>>>> To: [email protected]
>>>>>>>> Subject: Re: aries-jax-rs-whiteboard with @JaxrsApplicationSelect
>>>>>>>> works not with DS
>>>>>>>>
>>>>>>>> Jaap,
>>>>>>>> Something is missing. The @Referenece should prevent the
>>>> component
>>>>>>>> from becoming Active when a PeopleService does not exist.
>>>>>>>> Look in Karaf.log for clues.
>>>>>>>>
>>>>>>>> Paul Spencer
>>>>>>>>
>>>>>>>>> On Jan 23, 2023, at 3:14 PM, Jaap Gordijn <[email protected]>
>> wrote:
>>>>>>>>>
>>>>>>>>> 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 <[email protected]>
>>>>>>>>>> Sent: maandag 23 januari 2023 21:09
>>>>>>>>>> To: [email protected]
>>>>>>>>>> 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 <[email protected]>
>>>> 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 <[email protected]>
>>>>>>>>>>>> Sent: maandag 23 januari 2023 18:59
>>>>>>>>>>>> To: [email protected]
>>>>>>>>>>>> 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 <[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
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>>
>
>