You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@aries.apache.org by Nhut Thai Le <nt...@benchmarkconsulting.com> on 2018/08/28 17:10:48 UTC

aries-jax-rs-whiteboard filter not triggered

 Hello,

I'm using aries-jax-rs-whiteboard to host by REST service and I want to use
a ContainerRequestFilter to check for authentication token. However,
although the filter is registered as an OSGI service, it is not triggered
or even instantiated. Here is my REST api and filter code:

=====the application====
@Component(
immediate = true,
service = Application.class,
property= {
"osgi.jaxrs.name=RestApp",
JAX_RS_APPLICATION_BASE + "=/rest",
"authentication.with=keycloak"
}
)
public class RestApiApp extends Application{

@Override
  public Set<Object> getSingletons() {
      return Collections.singleton(this);
  }
}

=====the API==========
@Component(
immediate=true,
service = Api.class,
property = {
"osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)",
"osgi.jaxrs.resource=true"
}
)
@Path("/common")
public final class Api {
public static final Response EMPTY_RESPONSE = Response.noContent().type(
MediaType.TEXT_HTML_TYPE).build();

@GET
@Path("/getObject")
@Produces(MediaType.APPLICATION_JSON)
public String getObject() {
return "Rest call 2"; //$NON-NLS-1$
}
}

======the filter==========
@Component(
immediate=true,
property= {
"osgi.jaxrs.extension=true",
"osgi.jaxrs.extension.select=(authentication.with=keycloak)"
}
)
@PreMatching
@Priority(Priorities.AUTHENTICATION)
public final class JaxrsAuthenticationFilter extends
OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
{
public static final int count = 1; //BREAKPOINT NEVER HIT
@Override
public void filter(ContainerRequestContext arg0) throws IOException {
super.filter(arg0);    //BREAKPOINT NEVER HIT
}
}

Could anyone give a hint what I may miss?

Re: aries-jax-rs-whiteboard filter not triggered

Posted by Nhut Thai Le <nt...@benchmarkconsulting.com>.
 Hello guys,

I have just upload the code to https://github.com/lnthai2002/com.castortech.
iris.ba.web.home
eclipse launch config is also there.

Let me know if you need anything else for debug.

Thank you


On Wed, Aug 29, 2018 at 9:49 AM, Raymond Auge <ra...@liferay.com>
wrote:

> Nhut, could you provide a link to a sample repo that we could use to debug?
>
> - Ray
>
> On Wed, Aug 29, 2018 at 9:44 AM, Nhut Thai Le <nt...@castortech.com> wrote:
>
>> Hi Carlos,
>>
>> As you can see from previous email, when listing the service provided by
>> the bundle, I can see my filter listed with component.id=0, I also add a
>> reference to the filter from my api and I see it not null when the rest
>> call is made:
>> @Component(
>> //immediate=true,
>> service = Api.class,
>> property = {
>> "osgi.jaxrs.name=RestApi",
>> "osgi.jaxrs.resource=true",
>> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)"
>> }
>> )
>> @Path("/common")
>> public final class Api {
>> public static final Response EMPTY_RESPONSE =
>> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>
>> @Reference
>> JaxrsServiceRuntime runtimeRef;
>> @Reference
>> ContainerRequestFilter filter;     //THIS IS NOT NULL SO I THINK THE
>> COMPONENT IS REGISTERED AND INSTANTIATED BY THE WHITEBOARD CORRECTLY
>>
>> @GET
>> @Path("/getObject")
>> @Produces(MediaType.APPLICATION_JSON)
>> public String getObject() {
>> RuntimeDTO runtimeDto = runtimeRef.getRuntimeDTO();
>> try {
>> filter.filter(null);     //I GOT AN INSTANCE OF THE FILTER HERE
>> }
>> catch(Exception e) {
>> int x =2;
>> }
>> return "Rest call 2"; //$NON-NLS-1$
>> }
>> }
>>
>> so I think the whiteboard does created the component and registered it,
>> but jaxrs does not use this component in the rest call processing nor
>> recognize it as a jaxrs extension. Do i need to include anything else but
>> the aries.component-dsl.component-dsl, aries.javax.jax.rs-api,
>> aries.jax.rs.whiteboard, aries.util and their dependenies in my run env?
>>
>>
>> Thai
>>
>>
>> On Tue, Aug 28, 2018 at 5:07 PM, Carlos Sierra Andrés <cs...@gmail.com>
>> wrote:
>>
>>> hi Thai,
>>>
>>> this is weird indeed. In your fisrt message, when you had the component
>>> with "immediate=true", you said the breakpoint was never hit. If I remember
>>> correctly, but maybe I am wrong, having "immediate=true" should make the
>>> SCR to immediately instantiate and activate your component. If that did not
>>> happen that would indicate a problem before the whiteboard gets to know
>>> about the extension.
>>>
>>> Carlos.
>>>
>>> El 28/8/18 a las 22:33, Nhut Thai Le escribió:
>>>
>>> Hi Carlos,
>>>
>>> Here is the result of getRuntimeDto:
>>> {
>>>   "serviceDTO": null,
>>>   "defaultApplication": {
>>>     "resourceMethods": [
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "text/css"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       },
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "text/html"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       },
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "image/gif"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       },
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "text/javascript"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       },
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "text/css"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       }
>>>     ],
>>>     "base": "/",
>>>     "resourceDTOs": [],
>>>     "extensionDTOs": [],
>>>     "name": ".default",
>>>     "serviceId": 92
>>>   },
>>>   "applicationDTOs": [
>>>     {
>>>       "resourceMethods": [],
>>>       "base": "/rest",
>>>       "resourceDTOs": [
>>>         {
>>>           "resourceMethods": [
>>>             {
>>>               "method": "GET",
>>>               "consumingMimeType": null,
>>>               "producingMimeType": [
>>>                 "application/json"
>>>               ],
>>>               "nameBindings": null,
>>>               "path": "\\\\common\\getObject\\"
>>>             }
>>>           ],
>>>           "name": ".generated.for.91",
>>>           "serviceId": 91
>>>         }
>>>       ],
>>>       "extensionDTOs": [],
>>>       "name": "RestApp",
>>>       "serviceId": 44
>>>     }
>>>   ],
>>>   "failedResourceDTOs": [],
>>>   "failedExtensionDTOs": [],
>>>   "failedApplicationDTOs": []
>>> }
>>>
>>> As it shown, my extension is not even loaded. Although it show up as an
>>> osgi service when I inspect the bundle:
>>>
>>> osgi>bundle 27
>>> com.castortech.iris.ba.web.home_1.0.0.qualifier [27]
>>>   Id=27, Status=ACTIVE      Data Root=C:\Users\ntle\eclipseWSos
>>> gi30\.metadata\.plugins\org.eclipse.pde.core\Pax\org.eclipse
>>> .osgi\27\data
>>>   "Registered Services"
>>>     {javax.ws.rs.container.ContainerRequestFilter}={service.id=43,
>>> osgi.jaxrs.extension=true, service.bundleid=27, service.scope=prototype,
>>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>>> =com.castortech.iris.ba.web.home.JaxrsAuthenticationFilter, component.id
>>> =0}
>>>     {javax.ws.rs.core.Application}={osgi.jaxrs.application.base=/rest,
>>> service.id=44, service.bundleid=27, service.scope=bundle,
>>> authentication.with=keycloak, osgi.jaxrs.name=RestApp, component.name
>>> =com.castortech.iris.ba.web.home.RestApiApp, component.id=1}
>>>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
>>> service.id=91, service.bundleid=27, service.scope=bundle,
>>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>>> =com.castortech.iris.ba.web.home.Api, component.id=2}
>>>   Services in use:
>>>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
>>> service.id=91, service.bundleid=27, service.scope=bundle,
>>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>>> =com.castortech.iris.ba.web.home.Api, component.id=2}
>>>     {org.osgi.service.jaxrs.runtime.JaxrsServiceRuntime}={service.id=90,
>>> osgi.jaxrs.endpoint=[0.0.0.0:8080], service.bundleid=96,
>>> service.scope=singleton, service.ranking=-2147483648,
>>> service.changecount=3, service.pid=org.apache.aries.j
>>> ax.rs.whiteboard.default}
>>>     {org.osgi.service.log.LogService, org.eclipse.equinox.log.Extend
>>> edLogService}={service.id=2, service.bundleid=0, service.scope=bundle}
>>>   Exported packages
>>>     com.castortech.iris.ba.web.home; version="0.0.0"[exported]
>>>     org.keycloak.jaxrs; version="0.0.0"[exported]
>>>   Imported packages
>>> ...
>>>
>>> I can even get a reference to that filter from the API but for some
>>> reason, jaxrs whiteboard does not register this filter
>>>
>>> Thai
>>>
>>> On Tue, Aug 28, 2018 at 3:05 PM, Carlos Sierra Andrés <csierra@gmail.com
>>> > wrote:
>>>
>>>> Hi again Thai,
>>>>
>>>> you can try to get a reference to JaxrsServiceRuntime and call
>>>> getRuntimeDTO on it. It should give you a snapshot of the state of the
>>>> runtime as well as the reason why the extension is not being activated by
>>>> the runtime.
>>>>
>>>> Also enabling debug might help you diagnose what's going on.
>>>>
>>>> Carlos.
>>>>
>>>> El 28/8/18 a las 20:47, Nhut Thai Le escribió:
>>>>
>>>> Hi Carlos,
>>>>
>>>> Thank you for pointing out the order. I tried what you suggested but i
>>>> still not be able to hit the filter, not even its static field
>>>>
>>>> @Component(
>>>> scope=ServiceScope.PROTOTYPE,
>>>> property= {
>>>> "osgi.jaxrs.extension=true",
>>>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>>> }
>>>> )
>>>> @PreMatching
>>>> @Priority(Priorities.AUTHENTICATION)
>>>> public final class JaxrsAuthenticationFilter implements
>>>> ContainerRequestFilter
>>>> {
>>>> public static final int count = 1;     //BREAKPOINT NEVER HIT
>>>> @Override
>>>> public void filter(ContainerRequestContext arg0) throws IOException {
>>>> int n = 10;   //BREAKPOINT NEVER HIT
>>>> }
>>>> }
>>>>
>>>> Thai
>>>>
>>>> On Tue, Aug 28, 2018 at 1:16 PM, Carlos Sierra Andrés <
>>>> csierra@gmail.com> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I would say that this:
>>>>>
>>>>> -----
>>>>> @Component(
>>>>> immediate=true,
>>>>> property= {
>>>>> "osgi.jaxrs.extension=true",
>>>>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>>>> }
>>>>> )
>>>>> -----
>>>>>
>>>>> should be:
>>>>>
>>>>> -----
>>>>> @Component(
>>>>> immediate=true,
>>>>> property= {
>>>>> "osgi.jaxrs.extension=true",
>>>>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>>>> }
>>>>> )
>>>>> -----
>>>>>
>>>>> note the "extension -> application", otherwise your filter is waiting
>>>>> for another extension that never arrives.
>>>>>
>>>>> I would also suggest that you make your component
>>>>> ServiceScope.PROTOTYPE so every application gets its own instance of the
>>>>> filter.
>>>>>
>>>>> Let me know if this helps.
>>>>>
>>>>> Carlos.
>>>>>
>>>>> El 28/8/18 a las 19:10, Nhut Thai Le escribió:
>>>>>
>>>>> Hello,
>>>>>
>>>>> I'm using aries-jax-rs-whiteboard to host by REST service and I want
>>>>> to use a ContainerRequestFilter to check for authentication token. However,
>>>>> although the filter is registered as an OSGI service, it is not triggered
>>>>> or even instantiated. Here is my REST api and filter code:
>>>>>
>>>>> =====the application====
>>>>> @Component(
>>>>> immediate = true,
>>>>> service = Application.class,
>>>>> property= {
>>>>> "osgi.jaxrs.name=RestApp",
>>>>> JAX_RS_APPLICATION_BASE + "=/rest",
>>>>> "authentication.with=keycloak"
>>>>> }
>>>>> )
>>>>> public class RestApiApp extends Application{
>>>>>
>>>>> @Override
>>>>>   public Set<Object> getSingletons() {
>>>>>       return Collections.singleton(this);
>>>>>   }
>>>>> }
>>>>>
>>>>> =====the API==========
>>>>> @Component(
>>>>> immediate=true,
>>>>> service = Api.class,
>>>>> property = {
>>>>> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)",
>>>>> "osgi.jaxrs.resource=true"
>>>>> }
>>>>> )
>>>>> @Path("/common")
>>>>> public final class Api {
>>>>> public static final Response EMPTY_RESPONSE =
>>>>> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>>>>
>>>>> @GET
>>>>> @Path("/getObject")
>>>>> @Produces(MediaType.APPLICATION_JSON)
>>>>> public String getObject() {
>>>>> return "Rest call 2"; //$NON-NLS-1$
>>>>> }
>>>>> }
>>>>>
>>>>> ======the filter==========
>>>>> @Component(
>>>>> immediate=true,
>>>>> property= {
>>>>> "osgi.jaxrs.extension=true",
>>>>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>>>> }
>>>>> )
>>>>> @PreMatching
>>>>> @Priority(Priorities.AUTHENTICATION)
>>>>> public final class JaxrsAuthenticationFilter extends
>>>>> OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
>>>>> {
>>>>> public static final int count = 1; //BREAKPOINT NEVER HIT
>>>>> @Override
>>>>> public void filter(ContainerRequestContext arg0) throws IOException {
>>>>> super.filter(arg0);    //BREAKPOINT NEVER HIT
>>>>> }
>>>>> }
>>>>>
>>>>> Could anyone give a hint what I may miss?
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Castor Technologies Inc
>>>> 460 rue St-Catherine St
>>>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>>>> Ouest, Suite 613
>>>> Montréal, Québec H3B-1A7
>>>> (514) 360-7208 o
>>>> (514) 798-2044 f
>>>> ntle@castortech.com
>>>> www.castortech.com
>>>>
>>>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>>>> confidential and may be proprietary information intended only for the use
>>>> of the individual or entity to whom it is addressed. If the reader of this
>>>> message is not the intended recipient, you are hereby notified that any
>>>> viewing, dissemination, distribution, disclosure, copy or use of the
>>>> information contained in this e-mail message is strictly prohibited. If you
>>>> have received and/or are viewing this e-mail in error, please immediately
>>>> notify the sender by reply e-mail, and delete it from your system without
>>>> reading, forwarding, copying or saving in any manner. Thank you.
>>>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>>>> confidentiel, peut être protégé par le secret professionnel et est réservé
>>>> à l'usage exclusif du destinataire. Toute autre personne est par les
>>>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>>>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>>>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Castor Technologies Inc
>>> 460 rue St-Catherine St
>>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>>> Ouest, Suite 613
>>> Montréal, Québec H3B-1A7
>>> (514) 360-7208 o
>>> (514) 798-2044 f
>>> ntle@castortech.com
>>> www.castortech.com
>>>
>>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>>> confidential and may be proprietary information intended only for the use
>>> of the individual or entity to whom it is addressed. If the reader of this
>>> message is not the intended recipient, you are hereby notified that any
>>> viewing, dissemination, distribution, disclosure, copy or use of the
>>> information contained in this e-mail message is strictly prohibited. If you
>>> have received and/or are viewing this e-mail in error, please immediately
>>> notify the sender by reply e-mail, and delete it from your system without
>>> reading, forwarding, copying or saving in any manner. Thank you.
>>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>>> confidentiel, peut être protégé par le secret professionnel et est réservé
>>> à l'usage exclusif du destinataire. Toute autre personne est par les
>>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>>
>>>
>>>
>>
>>
>> --
>> Castor Technologies Inc
>> 460 rue St-Catherine St
>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>> Ouest, Suite 613
>> Montréal, Québec H3B-1A7
>> (514) 360-7208 o
>> (514) 798-2044 f
>> ntle@castortech.com
>> www.castortech.com
>>
>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>> confidential and may be proprietary information intended only for the use
>> of the individual or entity to whom it is addressed. If the reader of this
>> message is not the intended recipient, you are hereby notified that any
>> viewing, dissemination, distribution, disclosure, copy or use of the
>> information contained in this e-mail message is strictly prohibited. If you
>> have received and/or are viewing this e-mail in error, please immediately
>> notify the sender by reply e-mail, and delete it from your system without
>> reading, forwarding, copying or saving in any manner. Thank you.
>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>> confidentiel, peut être protégé par le secret professionnel et est réservé
>> à l'usage exclusif du destinataire. Toute autre personne est par les
>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>
>
>
>
> --
> *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile>
>  (@rotty3000)
> Senior Software Architect *Liferay, Inc.* <http://www.liferay.com>
>  (@Liferay)
> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org>
> (@OSGiAlliance)
>

Re: aries-jax-rs-whiteboard filter not triggered

Posted by Nhut Thai Le <nt...@castortech.com>.
Hello guys,

I have just upload the code to
https://github.com/lnthai2002/com.castortech.iris.ba.web.home
eclipse launch config is also there.

Let me know if you need anything else for debug.

Thank you

Thai

On Wed, Aug 29, 2018 at 9:49 AM, Raymond Auge <ra...@liferay.com>
wrote:

> Nhut, could you provide a link to a sample repo that we could use to debug?
>
> - Ray
>
> On Wed, Aug 29, 2018 at 9:44 AM, Nhut Thai Le <nt...@castortech.com> wrote:
>
>> Hi Carlos,
>>
>> As you can see from previous email, when listing the service provided by
>> the bundle, I can see my filter listed with component.id=0, I also add a
>> reference to the filter from my api and I see it not null when the rest
>> call is made:
>> @Component(
>> //immediate=true,
>> service = Api.class,
>> property = {
>> "osgi.jaxrs.name=RestApi",
>> "osgi.jaxrs.resource=true",
>> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)"
>> }
>> )
>> @Path("/common")
>> public final class Api {
>> public static final Response EMPTY_RESPONSE =
>> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>
>> @Reference
>> JaxrsServiceRuntime runtimeRef;
>> @Reference
>> ContainerRequestFilter filter;     //THIS IS NOT NULL SO I THINK THE
>> COMPONENT IS REGISTERED AND INSTANTIATED BY THE WHITEBOARD CORRECTLY
>>
>> @GET
>> @Path("/getObject")
>> @Produces(MediaType.APPLICATION_JSON)
>> public String getObject() {
>> RuntimeDTO runtimeDto = runtimeRef.getRuntimeDTO();
>> try {
>> filter.filter(null);     //I GOT AN INSTANCE OF THE FILTER HERE
>> }
>> catch(Exception e) {
>> int x =2;
>> }
>> return "Rest call 2"; //$NON-NLS-1$
>> }
>> }
>>
>> so I think the whiteboard does created the component and registered it,
>> but jaxrs does not use this component in the rest call processing nor
>> recognize it as a jaxrs extension. Do i need to include anything else but
>> the aries.component-dsl.component-dsl, aries.javax.jax.rs-api,
>> aries.jax.rs.whiteboard, aries.util and their dependenies in my run env?
>>
>>
>> Thai
>>
>>
>> On Tue, Aug 28, 2018 at 5:07 PM, Carlos Sierra Andrés <cs...@gmail.com>
>> wrote:
>>
>>> hi Thai,
>>>
>>> this is weird indeed. In your fisrt message, when you had the component
>>> with "immediate=true", you said the breakpoint was never hit. If I remember
>>> correctly, but maybe I am wrong, having "immediate=true" should make the
>>> SCR to immediately instantiate and activate your component. If that did not
>>> happen that would indicate a problem before the whiteboard gets to know
>>> about the extension.
>>>
>>> Carlos.
>>>
>>> El 28/8/18 a las 22:33, Nhut Thai Le escribió:
>>>
>>> Hi Carlos,
>>>
>>> Here is the result of getRuntimeDto:
>>> {
>>>   "serviceDTO": null,
>>>   "defaultApplication": {
>>>     "resourceMethods": [
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "text/css"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       },
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "text/html"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       },
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "image/gif"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       },
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "text/javascript"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       },
>>>       {
>>>         "method": "GET",
>>>         "consumingMimeType": null,
>>>         "producingMimeType": [
>>>           "text/css"
>>>         ],
>>>         "nameBindings": null,
>>>         "path": "/"
>>>       }
>>>     ],
>>>     "base": "/",
>>>     "resourceDTOs": [],
>>>     "extensionDTOs": [],
>>>     "name": ".default",
>>>     "serviceId": 92
>>>   },
>>>   "applicationDTOs": [
>>>     {
>>>       "resourceMethods": [],
>>>       "base": "/rest",
>>>       "resourceDTOs": [
>>>         {
>>>           "resourceMethods": [
>>>             {
>>>               "method": "GET",
>>>               "consumingMimeType": null,
>>>               "producingMimeType": [
>>>                 "application/json"
>>>               ],
>>>               "nameBindings": null,
>>>               "path": "\\\\common\\getObject\\"
>>>             }
>>>           ],
>>>           "name": ".generated.for.91",
>>>           "serviceId": 91
>>>         }
>>>       ],
>>>       "extensionDTOs": [],
>>>       "name": "RestApp",
>>>       "serviceId": 44
>>>     }
>>>   ],
>>>   "failedResourceDTOs": [],
>>>   "failedExtensionDTOs": [],
>>>   "failedApplicationDTOs": []
>>> }
>>>
>>> As it shown, my extension is not even loaded. Although it show up as an
>>> osgi service when I inspect the bundle:
>>>
>>> osgi>bundle 27
>>> com.castortech.iris.ba.web.home_1.0.0.qualifier [27]
>>>   Id=27, Status=ACTIVE      Data Root=C:\Users\ntle\eclipseWSos
>>> gi30\.metadata\.plugins\org.eclipse.pde.core\Pax\org.eclipse
>>> .osgi\27\data
>>>   "Registered Services"
>>>     {javax.ws.rs.container.ContainerRequestFilter}={service.id=43,
>>> osgi.jaxrs.extension=true, service.bundleid=27, service.scope=prototype,
>>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>>> =com.castortech.iris.ba.web.home.JaxrsAuthenticationFilter, component.id
>>> =0}
>>>     {javax.ws.rs.core.Application}={osgi.jaxrs.application.base=/rest,
>>> service.id=44, service.bundleid=27, service.scope=bundle,
>>> authentication.with=keycloak, osgi.jaxrs.name=RestApp, component.name
>>> =com.castortech.iris.ba.web.home.RestApiApp, component.id=1}
>>>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
>>> service.id=91, service.bundleid=27, service.scope=bundle,
>>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>>> =com.castortech.iris.ba.web.home.Api, component.id=2}
>>>   Services in use:
>>>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
>>> service.id=91, service.bundleid=27, service.scope=bundle,
>>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>>> =com.castortech.iris.ba.web.home.Api, component.id=2}
>>>     {org.osgi.service.jaxrs.runtime.JaxrsServiceRuntime}={service.id=90,
>>> osgi.jaxrs.endpoint=[0.0.0.0:8080], service.bundleid=96,
>>> service.scope=singleton, service.ranking=-2147483648,
>>> service.changecount=3, service.pid=org.apache.aries.j
>>> ax.rs.whiteboard.default}
>>>     {org.osgi.service.log.LogService, org.eclipse.equinox.log.Extend
>>> edLogService}={service.id=2, service.bundleid=0, service.scope=bundle}
>>>   Exported packages
>>>     com.castortech.iris.ba.web.home; version="0.0.0"[exported]
>>>     org.keycloak.jaxrs; version="0.0.0"[exported]
>>>   Imported packages
>>> ...
>>>
>>> I can even get a reference to that filter from the API but for some
>>> reason, jaxrs whiteboard does not register this filter
>>>
>>> Thai
>>>
>>> On Tue, Aug 28, 2018 at 3:05 PM, Carlos Sierra Andrés <csierra@gmail.com
>>> > wrote:
>>>
>>>> Hi again Thai,
>>>>
>>>> you can try to get a reference to JaxrsServiceRuntime and call
>>>> getRuntimeDTO on it. It should give you a snapshot of the state of the
>>>> runtime as well as the reason why the extension is not being activated by
>>>> the runtime.
>>>>
>>>> Also enabling debug might help you diagnose what's going on.
>>>>
>>>> Carlos.
>>>>
>>>> El 28/8/18 a las 20:47, Nhut Thai Le escribió:
>>>>
>>>> Hi Carlos,
>>>>
>>>> Thank you for pointing out the order. I tried what you suggested but i
>>>> still not be able to hit the filter, not even its static field
>>>>
>>>> @Component(
>>>> scope=ServiceScope.PROTOTYPE,
>>>> property= {
>>>> "osgi.jaxrs.extension=true",
>>>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>>> }
>>>> )
>>>> @PreMatching
>>>> @Priority(Priorities.AUTHENTICATION)
>>>> public final class JaxrsAuthenticationFilter implements
>>>> ContainerRequestFilter
>>>> {
>>>> public static final int count = 1;     //BREAKPOINT NEVER HIT
>>>> @Override
>>>> public void filter(ContainerRequestContext arg0) throws IOException {
>>>> int n = 10;   //BREAKPOINT NEVER HIT
>>>> }
>>>> }
>>>>
>>>> Thai
>>>>
>>>> On Tue, Aug 28, 2018 at 1:16 PM, Carlos Sierra Andrés <
>>>> csierra@gmail.com> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I would say that this:
>>>>>
>>>>> -----
>>>>> @Component(
>>>>> immediate=true,
>>>>> property= {
>>>>> "osgi.jaxrs.extension=true",
>>>>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>>>> }
>>>>> )
>>>>> -----
>>>>>
>>>>> should be:
>>>>>
>>>>> -----
>>>>> @Component(
>>>>> immediate=true,
>>>>> property= {
>>>>> "osgi.jaxrs.extension=true",
>>>>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>>>> }
>>>>> )
>>>>> -----
>>>>>
>>>>> note the "extension -> application", otherwise your filter is waiting
>>>>> for another extension that never arrives.
>>>>>
>>>>> I would also suggest that you make your component
>>>>> ServiceScope.PROTOTYPE so every application gets its own instance of the
>>>>> filter.
>>>>>
>>>>> Let me know if this helps.
>>>>>
>>>>> Carlos.
>>>>>
>>>>> El 28/8/18 a las 19:10, Nhut Thai Le escribió:
>>>>>
>>>>> Hello,
>>>>>
>>>>> I'm using aries-jax-rs-whiteboard to host by REST service and I want
>>>>> to use a ContainerRequestFilter to check for authentication token. However,
>>>>> although the filter is registered as an OSGI service, it is not triggered
>>>>> or even instantiated. Here is my REST api and filter code:
>>>>>
>>>>> =====the application====
>>>>> @Component(
>>>>> immediate = true,
>>>>> service = Application.class,
>>>>> property= {
>>>>> "osgi.jaxrs.name=RestApp",
>>>>> JAX_RS_APPLICATION_BASE + "=/rest",
>>>>> "authentication.with=keycloak"
>>>>> }
>>>>> )
>>>>> public class RestApiApp extends Application{
>>>>>
>>>>> @Override
>>>>>   public Set<Object> getSingletons() {
>>>>>       return Collections.singleton(this);
>>>>>   }
>>>>> }
>>>>>
>>>>> =====the API==========
>>>>> @Component(
>>>>> immediate=true,
>>>>> service = Api.class,
>>>>> property = {
>>>>> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)",
>>>>> "osgi.jaxrs.resource=true"
>>>>> }
>>>>> )
>>>>> @Path("/common")
>>>>> public final class Api {
>>>>> public static final Response EMPTY_RESPONSE =
>>>>> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>>>>
>>>>> @GET
>>>>> @Path("/getObject")
>>>>> @Produces(MediaType.APPLICATION_JSON)
>>>>> public String getObject() {
>>>>> return "Rest call 2"; //$NON-NLS-1$
>>>>> }
>>>>> }
>>>>>
>>>>> ======the filter==========
>>>>> @Component(
>>>>> immediate=true,
>>>>> property= {
>>>>> "osgi.jaxrs.extension=true",
>>>>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>>>> }
>>>>> )
>>>>> @PreMatching
>>>>> @Priority(Priorities.AUTHENTICATION)
>>>>> public final class JaxrsAuthenticationFilter extends
>>>>> OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
>>>>> {
>>>>> public static final int count = 1; //BREAKPOINT NEVER HIT
>>>>> @Override
>>>>> public void filter(ContainerRequestContext arg0) throws IOException {
>>>>> super.filter(arg0);    //BREAKPOINT NEVER HIT
>>>>> }
>>>>> }
>>>>>
>>>>> Could anyone give a hint what I may miss?
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Castor Technologies Inc
>>>> 460 rue St-Catherine St
>>>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>>>> Ouest, Suite 613
>>>> Montréal, Québec H3B-1A7
>>>> (514) 360-7208 o
>>>> (514) 798-2044 f
>>>> ntle@castortech.com
>>>> www.castortech.com
>>>>
>>>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>>>> confidential and may be proprietary information intended only for the use
>>>> of the individual or entity to whom it is addressed. If the reader of this
>>>> message is not the intended recipient, you are hereby notified that any
>>>> viewing, dissemination, distribution, disclosure, copy or use of the
>>>> information contained in this e-mail message is strictly prohibited. If you
>>>> have received and/or are viewing this e-mail in error, please immediately
>>>> notify the sender by reply e-mail, and delete it from your system without
>>>> reading, forwarding, copying or saving in any manner. Thank you.
>>>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>>>> confidentiel, peut être protégé par le secret professionnel et est réservé
>>>> à l'usage exclusif du destinataire. Toute autre personne est par les
>>>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>>>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>>>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Castor Technologies Inc
>>> 460 rue St-Catherine St
>>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>>> Ouest, Suite 613
>>> Montréal, Québec H3B-1A7
>>> (514) 360-7208 o
>>> (514) 798-2044 f
>>> ntle@castortech.com
>>> www.castortech.com
>>>
>>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>>> confidential and may be proprietary information intended only for the use
>>> of the individual or entity to whom it is addressed. If the reader of this
>>> message is not the intended recipient, you are hereby notified that any
>>> viewing, dissemination, distribution, disclosure, copy or use of the
>>> information contained in this e-mail message is strictly prohibited. If you
>>> have received and/or are viewing this e-mail in error, please immediately
>>> notify the sender by reply e-mail, and delete it from your system without
>>> reading, forwarding, copying or saving in any manner. Thank you.
>>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>>> confidentiel, peut être protégé par le secret professionnel et est réservé
>>> à l'usage exclusif du destinataire. Toute autre personne est par les
>>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>>
>>>
>>>
>>
>>
>> --
>> Castor Technologies Inc
>> 460 rue St-Catherine St
>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>> Ouest, Suite 613
>> Montréal, Québec H3B-1A7
>> (514) 360-7208 o
>> (514) 798-2044 f
>> ntle@castortech.com
>> www.castortech.com
>>
>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>> confidential and may be proprietary information intended only for the use
>> of the individual or entity to whom it is addressed. If the reader of this
>> message is not the intended recipient, you are hereby notified that any
>> viewing, dissemination, distribution, disclosure, copy or use of the
>> information contained in this e-mail message is strictly prohibited. If you
>> have received and/or are viewing this e-mail in error, please immediately
>> notify the sender by reply e-mail, and delete it from your system without
>> reading, forwarding, copying or saving in any manner. Thank you.
>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>> confidentiel, peut être protégé par le secret professionnel et est réservé
>> à l'usage exclusif du destinataire. Toute autre personne est par les
>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>
>
>
>
> --
> *Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile>
>  (@rotty3000)
> Senior Software Architect *Liferay, Inc.* <http://www.liferay.com>
>  (@Liferay)
> Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org>
> (@OSGiAlliance)
>



-- 
Castor Technologies Inc
460 rue St-Catherine St Ouest, Suite 613
Montréal, Québec H3B-1A7
(514) 360-7208 o
(514) 798-2044 f
ntle@castortech.com
www.castortech.com

CONFIDENTIALITY NOTICE: The information contained in this e-mail is
confidential and may be proprietary information intended only for the use
of the individual or entity to whom it is addressed. If the reader of this
message is not the intended recipient, you are hereby notified that any
viewing, dissemination, distribution, disclosure, copy or use of the
information contained in this e-mail message is strictly prohibited. If you
have received and/or are viewing this e-mail in error, please immediately
notify the sender by reply e-mail, and delete it from your system without
reading, forwarding, copying or saving in any manner. Thank you.
AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
confidentiel, peut être protégé par le secret professionnel et est réservé
à l'usage exclusif du destinataire. Toute autre personne est par les
présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
ou reproduire ce message. Si vous avez reçu cette communication par erreur,
veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.

Re: aries-jax-rs-whiteboard filter not triggered

Posted by Raymond Auge <ra...@liferay.com>.
Nhut, could you provide a link to a sample repo that we could use to debug?

- Ray

On Wed, Aug 29, 2018 at 9:44 AM, Nhut Thai Le <nt...@castortech.com> wrote:

> Hi Carlos,
>
> As you can see from previous email, when listing the service provided by
> the bundle, I can see my filter listed with component.id=0, I also add a
> reference to the filter from my api and I see it not null when the rest
> call is made:
> @Component(
> //immediate=true,
> service = Api.class,
> property = {
> "osgi.jaxrs.name=RestApi",
> "osgi.jaxrs.resource=true",
> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)"
> }
> )
> @Path("/common")
> public final class Api {
> public static final Response EMPTY_RESPONSE = Response.noContent().type(
> MediaType.TEXT_HTML_TYPE).build();
>
> @Reference
> JaxrsServiceRuntime runtimeRef;
> @Reference
> ContainerRequestFilter filter;     //THIS IS NOT NULL SO I THINK THE
> COMPONENT IS REGISTERED AND INSTANTIATED BY THE WHITEBOARD CORRECTLY
>
> @GET
> @Path("/getObject")
> @Produces(MediaType.APPLICATION_JSON)
> public String getObject() {
> RuntimeDTO runtimeDto = runtimeRef.getRuntimeDTO();
> try {
> filter.filter(null);     //I GOT AN INSTANCE OF THE FILTER HERE
> }
> catch(Exception e) {
> int x =2;
> }
> return "Rest call 2"; //$NON-NLS-1$
> }
> }
>
> so I think the whiteboard does created the component and registered it,
> but jaxrs does not use this component in the rest call processing nor
> recognize it as a jaxrs extension. Do i need to include anything else but
> the aries.component-dsl.component-dsl, aries.javax.jax.rs-api,
> aries.jax.rs.whiteboard, aries.util and their dependenies in my run env?
>
>
> Thai
>
>
> On Tue, Aug 28, 2018 at 5:07 PM, Carlos Sierra Andrés <cs...@gmail.com>
> wrote:
>
>> hi Thai,
>>
>> this is weird indeed. In your fisrt message, when you had the component
>> with "immediate=true", you said the breakpoint was never hit. If I remember
>> correctly, but maybe I am wrong, having "immediate=true" should make the
>> SCR to immediately instantiate and activate your component. If that did not
>> happen that would indicate a problem before the whiteboard gets to know
>> about the extension.
>>
>> Carlos.
>>
>> El 28/8/18 a las 22:33, Nhut Thai Le escribió:
>>
>> Hi Carlos,
>>
>> Here is the result of getRuntimeDto:
>> {
>>   "serviceDTO": null,
>>   "defaultApplication": {
>>     "resourceMethods": [
>>       {
>>         "method": "GET",
>>         "consumingMimeType": null,
>>         "producingMimeType": [
>>           "text/css"
>>         ],
>>         "nameBindings": null,
>>         "path": "/"
>>       },
>>       {
>>         "method": "GET",
>>         "consumingMimeType": null,
>>         "producingMimeType": [
>>           "text/html"
>>         ],
>>         "nameBindings": null,
>>         "path": "/"
>>       },
>>       {
>>         "method": "GET",
>>         "consumingMimeType": null,
>>         "producingMimeType": [
>>           "image/gif"
>>         ],
>>         "nameBindings": null,
>>         "path": "/"
>>       },
>>       {
>>         "method": "GET",
>>         "consumingMimeType": null,
>>         "producingMimeType": [
>>           "text/javascript"
>>         ],
>>         "nameBindings": null,
>>         "path": "/"
>>       },
>>       {
>>         "method": "GET",
>>         "consumingMimeType": null,
>>         "producingMimeType": [
>>           "text/css"
>>         ],
>>         "nameBindings": null,
>>         "path": "/"
>>       }
>>     ],
>>     "base": "/",
>>     "resourceDTOs": [],
>>     "extensionDTOs": [],
>>     "name": ".default",
>>     "serviceId": 92
>>   },
>>   "applicationDTOs": [
>>     {
>>       "resourceMethods": [],
>>       "base": "/rest",
>>       "resourceDTOs": [
>>         {
>>           "resourceMethods": [
>>             {
>>               "method": "GET",
>>               "consumingMimeType": null,
>>               "producingMimeType": [
>>                 "application/json"
>>               ],
>>               "nameBindings": null,
>>               "path": "\\\\common\\getObject\\"
>>             }
>>           ],
>>           "name": ".generated.for.91",
>>           "serviceId": 91
>>         }
>>       ],
>>       "extensionDTOs": [],
>>       "name": "RestApp",
>>       "serviceId": 44
>>     }
>>   ],
>>   "failedResourceDTOs": [],
>>   "failedExtensionDTOs": [],
>>   "failedApplicationDTOs": []
>> }
>>
>> As it shown, my extension is not even loaded. Although it show up as an
>> osgi service when I inspect the bundle:
>>
>> osgi>bundle 27
>> com.castortech.iris.ba.web.home_1.0.0.qualifier [27]
>>   Id=27, Status=ACTIVE      Data Root=C:\Users\ntle\eclipseWSos
>> gi30\.metadata\.plugins\org.eclipse.pde.core\Pax\org.eclipse.osgi\27\data
>>   "Registered Services"
>>     {javax.ws.rs.container.ContainerRequestFilter}={service.id=43,
>> osgi.jaxrs.extension=true, service.bundleid=27, service.scope=prototype,
>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>> =com.castortech.iris.ba.web.home.JaxrsAuthenticationFilter, component.id
>> =0}
>>     {javax.ws.rs.core.Application}={osgi.jaxrs.application.base=/rest,
>> service.id=44, service.bundleid=27, service.scope=bundle,
>> authentication.with=keycloak, osgi.jaxrs.name=RestApp, component.name
>> =com.castortech.iris.ba.web.home.RestApiApp, component.id=1}
>>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
>> service.id=91, service.bundleid=27, service.scope=bundle,
>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>> =com.castortech.iris.ba.web.home.Api, component.id=2}
>>   Services in use:
>>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
>> service.id=91, service.bundleid=27, service.scope=bundle,
>> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
>> =com.castortech.iris.ba.web.home.Api, component.id=2}
>>     {org.osgi.service.jaxrs.runtime.JaxrsServiceRuntime}={service.id=90,
>> osgi.jaxrs.endpoint=[0.0.0.0:8080], service.bundleid=96,
>> service.scope=singleton, service.ranking=-2147483648,
>> service.changecount=3, service.pid=org.apache.aries.j
>> ax.rs.whiteboard.default}
>>     {org.osgi.service.log.LogService, org.eclipse.equinox.log.Extend
>> edLogService}={service.id=2, service.bundleid=0, service.scope=bundle}
>>   Exported packages
>>     com.castortech.iris.ba.web.home; version="0.0.0"[exported]
>>     org.keycloak.jaxrs; version="0.0.0"[exported]
>>   Imported packages
>> ...
>>
>> I can even get a reference to that filter from the API but for some
>> reason, jaxrs whiteboard does not register this filter
>>
>> Thai
>>
>> On Tue, Aug 28, 2018 at 3:05 PM, Carlos Sierra Andrés <cs...@gmail.com>
>> wrote:
>>
>>> Hi again Thai,
>>>
>>> you can try to get a reference to JaxrsServiceRuntime and call
>>> getRuntimeDTO on it. It should give you a snapshot of the state of the
>>> runtime as well as the reason why the extension is not being activated by
>>> the runtime.
>>>
>>> Also enabling debug might help you diagnose what's going on.
>>>
>>> Carlos.
>>>
>>> El 28/8/18 a las 20:47, Nhut Thai Le escribió:
>>>
>>> Hi Carlos,
>>>
>>> Thank you for pointing out the order. I tried what you suggested but i
>>> still not be able to hit the filter, not even its static field
>>>
>>> @Component(
>>> scope=ServiceScope.PROTOTYPE,
>>> property= {
>>> "osgi.jaxrs.extension=true",
>>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>> }
>>> )
>>> @PreMatching
>>> @Priority(Priorities.AUTHENTICATION)
>>> public final class JaxrsAuthenticationFilter implements
>>> ContainerRequestFilter
>>> {
>>> public static final int count = 1;     //BREAKPOINT NEVER HIT
>>> @Override
>>> public void filter(ContainerRequestContext arg0) throws IOException {
>>> int n = 10;   //BREAKPOINT NEVER HIT
>>> }
>>> }
>>>
>>> Thai
>>>
>>> On Tue, Aug 28, 2018 at 1:16 PM, Carlos Sierra Andrés <csierra@gmail.com
>>> > wrote:
>>>
>>>> Hi,
>>>>
>>>> I would say that this:
>>>>
>>>> -----
>>>> @Component(
>>>> immediate=true,
>>>> property= {
>>>> "osgi.jaxrs.extension=true",
>>>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>>> }
>>>> )
>>>> -----
>>>>
>>>> should be:
>>>>
>>>> -----
>>>> @Component(
>>>> immediate=true,
>>>> property= {
>>>> "osgi.jaxrs.extension=true",
>>>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>>> }
>>>> )
>>>> -----
>>>>
>>>> note the "extension -> application", otherwise your filter is waiting
>>>> for another extension that never arrives.
>>>>
>>>> I would also suggest that you make your component
>>>> ServiceScope.PROTOTYPE so every application gets its own instance of the
>>>> filter.
>>>>
>>>> Let me know if this helps.
>>>>
>>>> Carlos.
>>>>
>>>> El 28/8/18 a las 19:10, Nhut Thai Le escribió:
>>>>
>>>> Hello,
>>>>
>>>> I'm using aries-jax-rs-whiteboard to host by REST service and I want to
>>>> use a ContainerRequestFilter to check for authentication token. However,
>>>> although the filter is registered as an OSGI service, it is not triggered
>>>> or even instantiated. Here is my REST api and filter code:
>>>>
>>>> =====the application====
>>>> @Component(
>>>> immediate = true,
>>>> service = Application.class,
>>>> property= {
>>>> "osgi.jaxrs.name=RestApp",
>>>> JAX_RS_APPLICATION_BASE + "=/rest",
>>>> "authentication.with=keycloak"
>>>> }
>>>> )
>>>> public class RestApiApp extends Application{
>>>>
>>>> @Override
>>>>   public Set<Object> getSingletons() {
>>>>       return Collections.singleton(this);
>>>>   }
>>>> }
>>>>
>>>> =====the API==========
>>>> @Component(
>>>> immediate=true,
>>>> service = Api.class,
>>>> property = {
>>>> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)",
>>>> "osgi.jaxrs.resource=true"
>>>> }
>>>> )
>>>> @Path("/common")
>>>> public final class Api {
>>>> public static final Response EMPTY_RESPONSE =
>>>> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>>>
>>>> @GET
>>>> @Path("/getObject")
>>>> @Produces(MediaType.APPLICATION_JSON)
>>>> public String getObject() {
>>>> return "Rest call 2"; //$NON-NLS-1$
>>>> }
>>>> }
>>>>
>>>> ======the filter==========
>>>> @Component(
>>>> immediate=true,
>>>> property= {
>>>> "osgi.jaxrs.extension=true",
>>>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>>> }
>>>> )
>>>> @PreMatching
>>>> @Priority(Priorities.AUTHENTICATION)
>>>> public final class JaxrsAuthenticationFilter extends
>>>> OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
>>>> {
>>>> public static final int count = 1; //BREAKPOINT NEVER HIT
>>>> @Override
>>>> public void filter(ContainerRequestContext arg0) throws IOException {
>>>> super.filter(arg0);    //BREAKPOINT NEVER HIT
>>>> }
>>>> }
>>>>
>>>> Could anyone give a hint what I may miss?
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Castor Technologies Inc
>>> 460 rue St-Catherine St
>>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>>> Ouest, Suite 613
>>> Montréal, Québec H3B-1A7
>>> (514) 360-7208 o
>>> (514) 798-2044 f
>>> ntle@castortech.com
>>> www.castortech.com
>>>
>>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>>> confidential and may be proprietary information intended only for the use
>>> of the individual or entity to whom it is addressed. If the reader of this
>>> message is not the intended recipient, you are hereby notified that any
>>> viewing, dissemination, distribution, disclosure, copy or use of the
>>> information contained in this e-mail message is strictly prohibited. If you
>>> have received and/or are viewing this e-mail in error, please immediately
>>> notify the sender by reply e-mail, and delete it from your system without
>>> reading, forwarding, copying or saving in any manner. Thank you.
>>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>>> confidentiel, peut être protégé par le secret professionnel et est réservé
>>> à l'usage exclusif du destinataire. Toute autre personne est par les
>>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>>
>>>
>>>
>>
>>
>> --
>> Castor Technologies Inc
>> 460 rue St-Catherine St
>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>> Ouest, Suite 613
>> Montréal, Québec H3B-1A7
>> (514) 360-7208 o
>> (514) 798-2044 f
>> ntle@castortech.com
>> www.castortech.com
>>
>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>> confidential and may be proprietary information intended only for the use
>> of the individual or entity to whom it is addressed. If the reader of this
>> message is not the intended recipient, you are hereby notified that any
>> viewing, dissemination, distribution, disclosure, copy or use of the
>> information contained in this e-mail message is strictly prohibited. If you
>> have received and/or are viewing this e-mail in error, please immediately
>> notify the sender by reply e-mail, and delete it from your system without
>> reading, forwarding, copying or saving in any manner. Thank you.
>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>> confidentiel, peut être protégé par le secret professionnel et est réservé
>> à l'usage exclusif du destinataire. Toute autre personne est par les
>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>
>>
>>
>
>
> --
> Castor Technologies Inc
> 460 rue St-Catherine St
> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
> Ouest, Suite 613
> Montréal, Québec H3B-1A7
> (514) 360-7208 o
> (514) 798-2044 f
> ntle@castortech.com
> www.castortech.com
>
> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
> confidential and may be proprietary information intended only for the use
> of the individual or entity to whom it is addressed. If the reader of this
> message is not the intended recipient, you are hereby notified that any
> viewing, dissemination, distribution, disclosure, copy or use of the
> information contained in this e-mail message is strictly prohibited. If you
> have received and/or are viewing this e-mail in error, please immediately
> notify the sender by reply e-mail, and delete it from your system without
> reading, forwarding, copying or saving in any manner. Thank you.
> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
> confidentiel, peut être protégé par le secret professionnel et est réservé
> à l'usage exclusif du destinataire. Toute autre personne est par les
> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>



-- 
*Raymond Augé* <http://www.liferay.com/web/raymond.auge/profile>
 (@rotty3000)
Senior Software Architect *Liferay, Inc.* <http://www.liferay.com>
 (@Liferay)
Board Member & EEG Co-Chair, OSGi Alliance <http://osgi.org> (@OSGiAlliance)

Re: aries-jax-rs-whiteboard filter not triggered

Posted by Nhut Thai Le <nt...@castortech.com>.
Hi Carlos,

As you can see from previous email, when listing the service provided by
the bundle, I can see my filter listed with component.id=0, I also add a
reference to the filter from my api and I see it not null when the rest
call is made:
@Component(
//immediate=true,
service = Api.class,
property = {
"osgi.jaxrs.name=RestApi",
"osgi.jaxrs.resource=true",
"osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)"
}
)
@Path("/common")
public final class Api {
public static final Response EMPTY_RESPONSE =
Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();

@Reference
JaxrsServiceRuntime runtimeRef;
@Reference
ContainerRequestFilter filter;     //THIS IS NOT NULL SO I THINK THE
COMPONENT IS REGISTERED AND INSTANTIATED BY THE WHITEBOARD CORRECTLY

@GET
@Path("/getObject")
@Produces(MediaType.APPLICATION_JSON)
public String getObject() {
RuntimeDTO runtimeDto = runtimeRef.getRuntimeDTO();
try {
filter.filter(null);     //I GOT AN INSTANCE OF THE FILTER HERE
}
catch(Exception e) {
int x =2;
}
return "Rest call 2"; //$NON-NLS-1$
}
}

so I think the whiteboard does created the component and registered it, but
jaxrs does not use this component in the rest call processing nor recognize
it as a jaxrs extension. Do i need to include anything else but the
aries.component-dsl.component-dsl, aries.javax.jax.rs-api,
aries.jax.rs.whiteboard, aries.util and their dependenies in my run env?


Thai


On Tue, Aug 28, 2018 at 5:07 PM, Carlos Sierra Andrés <cs...@gmail.com>
wrote:

> hi Thai,
>
> this is weird indeed. In your fisrt message, when you had the component
> with "immediate=true", you said the breakpoint was never hit. If I remember
> correctly, but maybe I am wrong, having "immediate=true" should make the
> SCR to immediately instantiate and activate your component. If that did not
> happen that would indicate a problem before the whiteboard gets to know
> about the extension.
>
> Carlos.
>
> El 28/8/18 a las 22:33, Nhut Thai Le escribió:
>
> Hi Carlos,
>
> Here is the result of getRuntimeDto:
> {
>   "serviceDTO": null,
>   "defaultApplication": {
>     "resourceMethods": [
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "text/css"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       },
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "text/html"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       },
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "image/gif"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       },
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "text/javascript"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       },
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "text/css"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       }
>     ],
>     "base": "/",
>     "resourceDTOs": [],
>     "extensionDTOs": [],
>     "name": ".default",
>     "serviceId": 92
>   },
>   "applicationDTOs": [
>     {
>       "resourceMethods": [],
>       "base": "/rest",
>       "resourceDTOs": [
>         {
>           "resourceMethods": [
>             {
>               "method": "GET",
>               "consumingMimeType": null,
>               "producingMimeType": [
>                 "application/json"
>               ],
>               "nameBindings": null,
>               "path": "\\\\common\\getObject\\"
>             }
>           ],
>           "name": ".generated.for.91",
>           "serviceId": 91
>         }
>       ],
>       "extensionDTOs": [],
>       "name": "RestApp",
>       "serviceId": 44
>     }
>   ],
>   "failedResourceDTOs": [],
>   "failedExtensionDTOs": [],
>   "failedApplicationDTOs": []
> }
>
> As it shown, my extension is not even loaded. Although it show up as an
> osgi service when I inspect the bundle:
>
> osgi>bundle 27
> com.castortech.iris.ba.web.home_1.0.0.qualifier [27]
>   Id=27, Status=ACTIVE      Data Root=C:\Users\ntle\
> eclipseWSosgi30\.metadata\.plugins\org.eclipse.pde.core\
> Pax\org.eclipse.osgi\27\data
>   "Registered Services"
>     {javax.ws.rs.container.ContainerRequestFilter}={service.id=43,
> osgi.jaxrs.extension=true, service.bundleid=27, service.scope=prototype,
> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
> =com.castortech.iris.ba.web.home.JaxrsAuthenticationFilter, component.id
> =0}
>     {javax.ws.rs.core.Application}={osgi.jaxrs.application.base=/rest,
> service.id=44, service.bundleid=27, service.scope=bundle,
> authentication.with=keycloak, osgi.jaxrs.name=RestApp, component.name
> =com.castortech.iris.ba.web.home.RestApiApp, component.id=1}
>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
> service.id=91, service.bundleid=27, service.scope=bundle,
> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
> =com.castortech.iris.ba.web.home.Api, component.id=2}
>   Services in use:
>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
> service.id=91, service.bundleid=27, service.scope=bundle,
> osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp), component.name
> =com.castortech.iris.ba.web.home.Api, component.id=2}
>     {org.osgi.service.jaxrs.runtime.JaxrsServiceRuntime}={service.id=90,
> osgi.jaxrs.endpoint=[0.0.0.0:8080], service.bundleid=96,
> service.scope=singleton, service.ranking=-2147483648,
> service.changecount=3, service.pid=org.apache.aries.
> jax.rs.whiteboard.default}
>     {org.osgi.service.log.LogService, org.eclipse.equinox.log.
> ExtendedLogService}={service.id=2, service.bundleid=0,
> service.scope=bundle}
>   Exported packages
>     com.castortech.iris.ba.web.home; version="0.0.0"[exported]
>     org.keycloak.jaxrs; version="0.0.0"[exported]
>   Imported packages
> ...
>
> I can even get a reference to that filter from the API but for some
> reason, jaxrs whiteboard does not register this filter
>
> Thai
>
> On Tue, Aug 28, 2018 at 3:05 PM, Carlos Sierra Andrés <cs...@gmail.com>
> wrote:
>
>> Hi again Thai,
>>
>> you can try to get a reference to JaxrsServiceRuntime and call
>> getRuntimeDTO on it. It should give you a snapshot of the state of the
>> runtime as well as the reason why the extension is not being activated by
>> the runtime.
>>
>> Also enabling debug might help you diagnose what's going on.
>>
>> Carlos.
>>
>> El 28/8/18 a las 20:47, Nhut Thai Le escribió:
>>
>> Hi Carlos,
>>
>> Thank you for pointing out the order. I tried what you suggested but i
>> still not be able to hit the filter, not even its static field
>>
>> @Component(
>> scope=ServiceScope.PROTOTYPE,
>> property= {
>> "osgi.jaxrs.extension=true",
>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>> }
>> )
>> @PreMatching
>> @Priority(Priorities.AUTHENTICATION)
>> public final class JaxrsAuthenticationFilter implements
>> ContainerRequestFilter
>> {
>> public static final int count = 1;     //BREAKPOINT NEVER HIT
>> @Override
>> public void filter(ContainerRequestContext arg0) throws IOException {
>> int n = 10;   //BREAKPOINT NEVER HIT
>> }
>> }
>>
>> Thai
>>
>> On Tue, Aug 28, 2018 at 1:16 PM, Carlos Sierra Andrés <cs...@gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> I would say that this:
>>>
>>> -----
>>> @Component(
>>> immediate=true,
>>> property= {
>>> "osgi.jaxrs.extension=true",
>>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>> }
>>> )
>>> -----
>>>
>>> should be:
>>>
>>> -----
>>> @Component(
>>> immediate=true,
>>> property= {
>>> "osgi.jaxrs.extension=true",
>>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>> }
>>> )
>>> -----
>>>
>>> note the "extension -> application", otherwise your filter is waiting
>>> for another extension that never arrives.
>>>
>>> I would also suggest that you make your component ServiceScope.PROTOTYPE
>>> so every application gets its own instance of the filter.
>>>
>>> Let me know if this helps.
>>>
>>> Carlos.
>>>
>>> El 28/8/18 a las 19:10, Nhut Thai Le escribió:
>>>
>>> Hello,
>>>
>>> I'm using aries-jax-rs-whiteboard to host by REST service and I want to
>>> use a ContainerRequestFilter to check for authentication token. However,
>>> although the filter is registered as an OSGI service, it is not triggered
>>> or even instantiated. Here is my REST api and filter code:
>>>
>>> =====the application====
>>> @Component(
>>> immediate = true,
>>> service = Application.class,
>>> property= {
>>> "osgi.jaxrs.name=RestApp",
>>> JAX_RS_APPLICATION_BASE + "=/rest",
>>> "authentication.with=keycloak"
>>> }
>>> )
>>> public class RestApiApp extends Application{
>>>
>>> @Override
>>>   public Set<Object> getSingletons() {
>>>       return Collections.singleton(this);
>>>   }
>>> }
>>>
>>> =====the API==========
>>> @Component(
>>> immediate=true,
>>> service = Api.class,
>>> property = {
>>> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)",
>>> "osgi.jaxrs.resource=true"
>>> }
>>> )
>>> @Path("/common")
>>> public final class Api {
>>> public static final Response EMPTY_RESPONSE =
>>> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>>
>>> @GET
>>> @Path("/getObject")
>>> @Produces(MediaType.APPLICATION_JSON)
>>> public String getObject() {
>>> return "Rest call 2"; //$NON-NLS-1$
>>> }
>>> }
>>>
>>> ======the filter==========
>>> @Component(
>>> immediate=true,
>>> property= {
>>> "osgi.jaxrs.extension=true",
>>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>> }
>>> )
>>> @PreMatching
>>> @Priority(Priorities.AUTHENTICATION)
>>> public final class JaxrsAuthenticationFilter extends
>>> OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
>>> {
>>> public static final int count = 1; //BREAKPOINT NEVER HIT
>>> @Override
>>> public void filter(ContainerRequestContext arg0) throws IOException {
>>> super.filter(arg0);    //BREAKPOINT NEVER HIT
>>> }
>>> }
>>>
>>> Could anyone give a hint what I may miss?
>>>
>>>
>>>
>>
>>
>> --
>> Castor Technologies Inc
>> 460 rue St-Catherine St
>> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>> Ouest, Suite 613
>> Montréal, Québec H3B-1A7
>> (514) 360-7208 o
>> (514) 798-2044 f
>> ntle@castortech.com
>> www.castortech.com
>>
>> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
>> confidential and may be proprietary information intended only for the use
>> of the individual or entity to whom it is addressed. If the reader of this
>> message is not the intended recipient, you are hereby notified that any
>> viewing, dissemination, distribution, disclosure, copy or use of the
>> information contained in this e-mail message is strictly prohibited. If you
>> have received and/or are viewing this e-mail in error, please immediately
>> notify the sender by reply e-mail, and delete it from your system without
>> reading, forwarding, copying or saving in any manner. Thank you.
>> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
>> confidentiel, peut être protégé par le secret professionnel et est réservé
>> à l'usage exclusif du destinataire. Toute autre personne est par les
>> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
>> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
>> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>>
>>
>>
>
>
> --
> Castor Technologies Inc
> 460 rue St-Catherine St
> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
> Ouest, Suite 613
> Montréal, Québec H3B-1A7
> (514) 360-7208 o
> (514) 798-2044 f
> ntle@castortech.com
> www.castortech.com
>
> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
> confidential and may be proprietary information intended only for the use
> of the individual or entity to whom it is addressed. If the reader of this
> message is not the intended recipient, you are hereby notified that any
> viewing, dissemination, distribution, disclosure, copy or use of the
> information contained in this e-mail message is strictly prohibited. If you
> have received and/or are viewing this e-mail in error, please immediately
> notify the sender by reply e-mail, and delete it from your system without
> reading, forwarding, copying or saving in any manner. Thank you.
> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
> confidentiel, peut être protégé par le secret professionnel et est réservé
> à l'usage exclusif du destinataire. Toute autre personne est par les
> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>
>
>


-- 
Castor Technologies Inc
460 rue St-Catherine St Ouest, Suite 613
Montréal, Québec H3B-1A7
(514) 360-7208 o
(514) 798-2044 f
ntle@castortech.com
www.castortech.com

CONFIDENTIALITY NOTICE: The information contained in this e-mail is
confidential and may be proprietary information intended only for the use
of the individual or entity to whom it is addressed. If the reader of this
message is not the intended recipient, you are hereby notified that any
viewing, dissemination, distribution, disclosure, copy or use of the
information contained in this e-mail message is strictly prohibited. If you
have received and/or are viewing this e-mail in error, please immediately
notify the sender by reply e-mail, and delete it from your system without
reading, forwarding, copying or saving in any manner. Thank you.
AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
confidentiel, peut être protégé par le secret professionnel et est réservé
à l'usage exclusif du destinataire. Toute autre personne est par les
présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
ou reproduire ce message. Si vous avez reçu cette communication par erreur,
veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.

Re: aries-jax-rs-whiteboard filter not triggered

Posted by Carlos Sierra Andrés <cs...@gmail.com>.
hi Thai,

this is weird indeed. In your fisrt message, when you had the component
with "immediate=true", you said the breakpoint was never hit. If I
remember correctly, but maybe I am wrong, having "immediate=true" should
make the SCR to immediately instantiate and activate your component. If
that did not happen that would indicate a problem before the whiteboard
gets to know about the extension.

Carlos.


El 28/8/18 a las 22:33, Nhut Thai Le escribió:
> Hi Carlos,
>
> Here is the result of getRuntimeDto:
> {
>   "serviceDTO": null,
>   "defaultApplication": {
>     "resourceMethods": [
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "text/css"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       },
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "text/html"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       },
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "image/gif"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       },
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "text/javascript"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       },
>       {
>         "method": "GET",
>         "consumingMimeType": null,
>         "producingMimeType": [
>           "text/css"
>         ],
>         "nameBindings": null,
>         "path": "/"
>       }
>     ],
>     "base": "/",
>     "resourceDTOs": [],
>     "extensionDTOs": [],
>     "name": ".default",
>     "serviceId": 92
>   },
>   "applicationDTOs": [
>     {
>       "resourceMethods": [],
>       "base": "/rest",
>       "resourceDTOs": [
>         {
>           "resourceMethods": [
>             {
>               "method": "GET",
>               "consumingMimeType": null,
>               "producingMimeType": [
>                 "application/json"
>               ],
>               "nameBindings": null,
>               "path": "\\\\common\\getObject\\"
>             }
>           ],
>           "name": ".generated.for.91",
>           "serviceId": 91
>         }
>       ],
>       "extensionDTOs": [],
>       "name": "RestApp",
>       "serviceId": 44
>     }
>   ],
>   "failedResourceDTOs": [],
>   "failedExtensionDTOs": [],
>   "failedApplicationDTOs": []
> }
>
> As it shown, my extension is not even loaded. Although it show up as
> an osgi service when I inspect the bundle:
>
> osgi>bundle 27
> com.castortech.iris.ba.web.home_1.0.0.qualifier [27]
>   Id=27, Status=ACTIVE      Data
> Root=C:\Users\ntle\eclipseWSosgi30\.metadata\.plugins\org.eclipse.pde.core\Pax\org.eclipse.osgi\27\data
>   "Registered Services"
>     {javax.ws.rs.container.ContainerRequestFilter}={service.id
> <http://service.id>=43, osgi.jaxrs.extension=true,
> service.bundleid=27, service.scope=prototype,
> osgi.jaxrs.application.select=(osgi.jaxrs.name
> <http://osgi.jaxrs.name>=RestApp), component.name
> <http://component.name>=com.castortech.iris.ba.web.home.JaxrsAuthenticationFilter,
> component.id <http://component.id>=0}
>     {javax.ws.rs.core.Application}={osgi.jaxrs.application.base=/rest,
> service.id <http://service.id>=44, service.bundleid=27,
> service.scope=bundle, authentication.with=keycloak, osgi.jaxrs.name
> <http://osgi.jaxrs.name>=RestApp, component.name
> <http://component.name>=com.castortech.iris.ba.web.home.RestApiApp,
> component.id <http://component.id>=1}
>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
> service.id <http://service.id>=91, service.bundleid=27,
> service.scope=bundle, osgi.jaxrs.application.select=(osgi.jaxrs.name
> <http://osgi.jaxrs.name>=RestApp), component.name
> <http://component.name>=com.castortech.iris.ba.web.home.Api,
> component.id <http://component.id>=2}
>   Services in use:
>     {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
> service.id <http://service.id>=91, service.bundleid=27,
> service.scope=bundle, osgi.jaxrs.application.select=(osgi.jaxrs.name
> <http://osgi.jaxrs.name>=RestApp), component.name
> <http://component.name>=com.castortech.iris.ba.web.home.Api,
> component.id <http://component.id>=2}
>     {org.osgi.service.jaxrs.runtime.JaxrsServiceRuntime}={service.id
> <http://service.id>=90, osgi.jaxrs.endpoint=[0.0.0.0:8080
> <http://0.0.0.0:8080>], service.bundleid=96, service.scope=singleton,
> service.ranking=-2147483648, service.changecount=3,
> service.pid=org.apache.aries.jax.rs.whiteboard.default}
>     {org.osgi.service.log.LogService,
> org.eclipse.equinox.log.ExtendedLogService}={service.id
> <http://service.id>=2, service.bundleid=0, service.scope=bundle}
>   Exported packages
>     com.castortech.iris.ba.web.home; version="0.0.0"[exported]
>     org.keycloak.jaxrs; version="0.0.0"[exported]
>   Imported packages
> ...
>
> I can even get a reference to that filter from the API but for some
> reason, jaxrs whiteboard does not register this filter
>
> Thai
>
> On Tue, Aug 28, 2018 at 3:05 PM, Carlos Sierra Andrés
> <csierra@gmail.com <ma...@gmail.com>> wrote:
>
>     Hi again Thai,
>
>     you can try to get a reference to JaxrsServiceRuntime and call
>     getRuntimeDTO on it. It should give you a snapshot of the state of
>     the runtime as well as the reason why the extension is not being
>     activated by the runtime.
>
>     Also enabling debug might help you diagnose what's going on.
>
>     Carlos.
>
>
>     El 28/8/18 a las 20:47, Nhut Thai Le escribió:
>>     Hi Carlos,
>>
>>     Thank you for pointing out the order. I tried what you suggested
>>     but i still not be able to hit the filter, not even its static field
>>
>>     @Component(
>>     scope=ServiceScope.PROTOTYPE,
>>     property= {
>>     "osgi.jaxrs.extension=true",
>>     "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>     }
>>     )
>>     @PreMatching
>>     @Priority(Priorities.AUTHENTICATION)
>>     public final class JaxrsAuthenticationFilter implements
>>     ContainerRequestFilter
>>     {
>>     public static final int count = 1;     //BREAKPOINT NEVER HIT
>>     @Override
>>     public void filter(ContainerRequestContext arg0) throws IOException {
>>     int n = 10;   //BREAKPOINT NEVER HIT
>>     }
>>     }
>>
>>     Thai
>>
>>     On Tue, Aug 28, 2018 at 1:16 PM, Carlos Sierra Andrés
>>     <csierra@gmail.com <ma...@gmail.com>> wrote:
>>
>>         Hi,
>>
>>         I would say that this:
>>
>>         -----
>>
>>         @Component(
>>         immediate=true,
>>         property= {
>>         "osgi.jaxrs.extension=true",
>>         "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>         }
>>         )
>>         -----
>>
>>         should be:
>>
>>         -----
>>
>>         @Component(
>>         immediate=true,
>>         property= {
>>         "osgi.jaxrs.extension=true",
>>         "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>>         }
>>         )
>>         -----
>>
>>         note the "extension -> application", otherwise your filter is
>>         waiting for another extension that never arrives.
>>
>>         I would also suggest that you make your component
>>         ServiceScope.PROTOTYPE so every application gets its own
>>         instance of the filter.
>>
>>         Let me know if this helps.
>>
>>         Carlos.
>>
>>         El 28/8/18 a las 19:10, Nhut Thai Le escribió:
>>>         Hello,
>>>
>>>         I'm using aries-jax-rs-whiteboard to host by REST service
>>>         and I want to use a ContainerRequestFilter to check for
>>>         authentication token. However, although the filter is
>>>         registered as an OSGI service, it is not triggered or even
>>>         instantiated. Here is my REST api and filter code:
>>>
>>>         =====the application====
>>>         @Component(
>>>         immediate = true,
>>>         service = Application.class,
>>>         property= {
>>>         "osgi.jaxrs.name <http://osgi.jaxrs.name/>=RestApp",
>>>         JAX_RS_APPLICATION_BASE + "=/rest",
>>>         "authentication.with=keycloak"
>>>         }
>>>         )
>>>         public class RestApiApp extends Application{
>>>
>>>         @Override
>>>           public Set<Object> getSingletons() {
>>>               return Collections.singleton(this);
>>>           }
>>>         }
>>>
>>>         =====the API==========
>>>         @Component(
>>>         immediate=true,
>>>         service = Api.class,
>>>         property = {
>>>         "osgi.jaxrs.application.select=(osgi.jaxrs.name
>>>         <http://osgi.jaxrs.name/>=RestApp)",
>>>         "osgi.jaxrs.resource=true"
>>>         }
>>>         )
>>>         @Path("/common")
>>>         public final class Api {
>>>         public static final Response EMPTY_RESPONSE =
>>>         Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>>
>>>         @GET
>>>         @Path("/getObject")
>>>         @Produces(MediaType.APPLICATION_JSON)
>>>         public String getObject() {
>>>         return "Rest call 2"; //$NON-NLS-1$
>>>         }
>>>         }
>>>
>>>         ======the filter==========
>>>         @Component(
>>>         immediate=true,
>>>         property= {
>>>         "osgi.jaxrs.extension=true",
>>>         "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>>         }
>>>         )
>>>         @PreMatching
>>>         @Priority(Priorities.AUTHENTICATION)
>>>         public final class JaxrsAuthenticationFilter extends
>>>         OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
>>>         {
>>>         public static final int count = 1; //BREAKPOINT NEVER HIT
>>>         @Override
>>>         public void filter(ContainerRequestContext arg0) throws
>>>         IOException {
>>>         super.filter(arg0);    //BREAKPOINT NEVER HIT
>>>         }
>>>         }
>>>
>>>         Could anyone give a hint what I may miss?
>>>
>>
>>
>>
>>
>>     -- 
>>     Castor Technologies Inc
>>     460 rue St-Catherine St
>>     <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
>>     Ouest, Suite 613 
>>     Montréal, Québec H3B-1A7
>>     (514) 360-7208 o
>>     (514) 798-2044 f
>>     ntle@castortech.com <ma...@castortech.com>
>>     www.castortech.com <http://www.castortech.com> 
>>
>>     CONFIDENTIALITY NOTICE: The information contained in this e-mail
>>     is confidential and may be proprietary information intended only
>>     for the use of the individual or entity to whom it is addressed.
>>     If the reader of this message is not the intended recipient, you
>>     are hereby notified that any viewing, dissemination,
>>     distribution, disclosure, copy or use of the information
>>     contained in this e-mail message is strictly prohibited. If you
>>     have received and/or are viewing this e-mail in error, please
>>     immediately notify the sender by reply e-mail, and delete it from
>>     your system without reading, forwarding, copying or saving in any
>>     manner. Thank you.
>>     AVIS DE CONFIDENTIALITE: L’information contenue dans ce message
>>     est confidentiel, peut être protégé par le secret professionnel
>>     et est réservé à l'usage exclusif du destinataire. Toute autre
>>     personne est par les présentes avisée qu'il lui est strictement
>>     interdit de diffuser, distribuer ou reproduire ce message. Si
>>     vous avez reçu cette communication par erreur, veuillez la
>>     détruire immédiatement et en aviser l'expéditeur. Merci.
>
>
>
>
> -- 
> Castor Technologies Inc
> 460 rue St-Catherine St Ouest, Suite 613 
> Montréal, Québec H3B-1A7
> (514) 360-7208 o
> (514) 798-2044 f
> ntle@castortech.com <ma...@castortech.com>
> www.castortech.com <http://www.castortech.com> 
>
> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
> confidential and may be proprietary information intended only for the
> use of the individual or entity to whom it is addressed. If the reader
> of this message is not the intended recipient, you are hereby notified
> that any viewing, dissemination, distribution, disclosure, copy or use
> of the information contained in this e-mail message is strictly
> prohibited. If you have received and/or are viewing this e-mail in
> error, please immediately notify the sender by reply e-mail, and
> delete it from your system without reading, forwarding, copying or
> saving in any manner. Thank you.
> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
> confidentiel, peut être protégé par le secret professionnel et est
> réservé à l'usage exclusif du destinataire. Toute autre personne est
> par les présentes avisée qu'il lui est strictement interdit de
> diffuser, distribuer ou reproduire ce message. Si vous avez reçu cette
> communication par erreur, veuillez la détruire immédiatement et en
> aviser l'expéditeur. Merci.


Re: aries-jax-rs-whiteboard filter not triggered

Posted by Nhut Thai Le <nt...@castortech.com>.
Hi Carlos,

Here is the result of getRuntimeDto:
{
  "serviceDTO": null,
  "defaultApplication": {
    "resourceMethods": [
      {
        "method": "GET",
        "consumingMimeType": null,
        "producingMimeType": [
          "text/css"
        ],
        "nameBindings": null,
        "path": "/"
      },
      {
        "method": "GET",
        "consumingMimeType": null,
        "producingMimeType": [
          "text/html"
        ],
        "nameBindings": null,
        "path": "/"
      },
      {
        "method": "GET",
        "consumingMimeType": null,
        "producingMimeType": [
          "image/gif"
        ],
        "nameBindings": null,
        "path": "/"
      },
      {
        "method": "GET",
        "consumingMimeType": null,
        "producingMimeType": [
          "text/javascript"
        ],
        "nameBindings": null,
        "path": "/"
      },
      {
        "method": "GET",
        "consumingMimeType": null,
        "producingMimeType": [
          "text/css"
        ],
        "nameBindings": null,
        "path": "/"
      }
    ],
    "base": "/",
    "resourceDTOs": [],
    "extensionDTOs": [],
    "name": ".default",
    "serviceId": 92
  },
  "applicationDTOs": [
    {
      "resourceMethods": [],
      "base": "/rest",
      "resourceDTOs": [
        {
          "resourceMethods": [
            {
              "method": "GET",
              "consumingMimeType": null,
              "producingMimeType": [
                "application/json"
              ],
              "nameBindings": null,
              "path": "\\\\common\\getObject\\"
            }
          ],
          "name": ".generated.for.91",
          "serviceId": 91
        }
      ],
      "extensionDTOs": [],
      "name": "RestApp",
      "serviceId": 44
    }
  ],
  "failedResourceDTOs": [],
  "failedExtensionDTOs": [],
  "failedApplicationDTOs": []
}

As it shown, my extension is not even loaded. Although it show up as an
osgi service when I inspect the bundle:

osgi>bundle 27
com.castortech.iris.ba.web.home_1.0.0.qualifier [27]
  Id=27, Status=ACTIVE      Data
Root=C:\Users\ntle\eclipseWSosgi30\.metadata\.plugins\org.eclipse.pde.core\Pax\org.eclipse.osgi\27\data
  "Registered Services"
    {javax.ws.rs.container.ContainerRequestFilter}={service.id=43,
osgi.jaxrs.extension=true, service.bundleid=27, service.scope=prototype,
osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp),
component.name=com.castortech.iris.ba.web.home.JaxrsAuthenticationFilter,
component.id=0}
    {javax.ws.rs.core.Application}={osgi.jaxrs.application.base=/rest,
service.id=44, service.bundleid=27, service.scope=bundle,
authentication.with=keycloak, osgi.jaxrs.name=RestApp,
component.name=com.castortech.iris.ba.web.home.RestApiApp,
component.id=1}
    {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
service.id=91, service.bundleid=27, service.scope=bundle,
osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp),
component.name=com.castortech.iris.ba.web.home.Api,
component.id=2}
  Services in use:
    {com.castortech.iris.ba.web.home.Api}={osgi.jaxrs.resource=true,
service.id=91, service.bundleid=27, service.scope=bundle,
osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp),
component.name=com.castortech.iris.ba.web.home.Api,
component.id=2}
    {org.osgi.service.jaxrs.runtime.JaxrsServiceRuntime}={service.id=90,
osgi.jaxrs.endpoint=[0.0.0.0:8080], service.bundleid=96,
service.scope=singleton, service.ranking=-2147483648,
service.changecount=3,
service.pid=org.apache.aries.jax.rs.whiteboard.default}
    {org.osgi.service.log.LogService,
org.eclipse.equinox.log.ExtendedLogService}={service.id=2,
service.bundleid=0, service.scope=bundle}
  Exported packages
    com.castortech.iris.ba.web.home; version="0.0.0"[exported]
    org.keycloak.jaxrs; version="0.0.0"[exported]
  Imported packages
...

I can even get a reference to that filter from the API but for some reason,
jaxrs whiteboard does not register this filter

Thai

On Tue, Aug 28, 2018 at 3:05 PM, Carlos Sierra Andrés <cs...@gmail.com>
wrote:

> Hi again Thai,
>
> you can try to get a reference to JaxrsServiceRuntime and call
> getRuntimeDTO on it. It should give you a snapshot of the state of the
> runtime as well as the reason why the extension is not being activated by
> the runtime.
>
> Also enabling debug might help you diagnose what's going on.
>
> Carlos.
>
> El 28/8/18 a las 20:47, Nhut Thai Le escribió:
>
> Hi Carlos,
>
> Thank you for pointing out the order. I tried what you suggested but i
> still not be able to hit the filter, not even its static field
>
> @Component(
> scope=ServiceScope.PROTOTYPE,
> property= {
> "osgi.jaxrs.extension=true",
> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
> }
> )
> @PreMatching
> @Priority(Priorities.AUTHENTICATION)
> public final class JaxrsAuthenticationFilter implements
> ContainerRequestFilter
> {
> public static final int count = 1;     //BREAKPOINT NEVER HIT
> @Override
> public void filter(ContainerRequestContext arg0) throws IOException {
> int n = 10;   //BREAKPOINT NEVER HIT
> }
> }
>
> Thai
>
> On Tue, Aug 28, 2018 at 1:16 PM, Carlos Sierra Andrés <cs...@gmail.com>
> wrote:
>
>> Hi,
>>
>> I would say that this:
>>
>> -----
>> @Component(
>> immediate=true,
>> property= {
>> "osgi.jaxrs.extension=true",
>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>> }
>> )
>> -----
>>
>> should be:
>>
>> -----
>> @Component(
>> immediate=true,
>> property= {
>> "osgi.jaxrs.extension=true",
>> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>> }
>> )
>> -----
>>
>> note the "extension -> application", otherwise your filter is waiting for
>> another extension that never arrives.
>>
>> I would also suggest that you make your component ServiceScope.PROTOTYPE
>> so every application gets its own instance of the filter.
>>
>> Let me know if this helps.
>>
>> Carlos.
>>
>> El 28/8/18 a las 19:10, Nhut Thai Le escribió:
>>
>> Hello,
>>
>> I'm using aries-jax-rs-whiteboard to host by REST service and I want to
>> use a ContainerRequestFilter to check for authentication token. However,
>> although the filter is registered as an OSGI service, it is not triggered
>> or even instantiated. Here is my REST api and filter code:
>>
>> =====the application====
>> @Component(
>> immediate = true,
>> service = Application.class,
>> property= {
>> "osgi.jaxrs.name=RestApp",
>> JAX_RS_APPLICATION_BASE + "=/rest",
>> "authentication.with=keycloak"
>> }
>> )
>> public class RestApiApp extends Application{
>>
>> @Override
>>   public Set<Object> getSingletons() {
>>       return Collections.singleton(this);
>>   }
>> }
>>
>> =====the API==========
>> @Component(
>> immediate=true,
>> service = Api.class,
>> property = {
>> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)",
>> "osgi.jaxrs.resource=true"
>> }
>> )
>> @Path("/common")
>> public final class Api {
>> public static final Response EMPTY_RESPONSE =
>> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>
>> @GET
>> @Path("/getObject")
>> @Produces(MediaType.APPLICATION_JSON)
>> public String getObject() {
>> return "Rest call 2"; //$NON-NLS-1$
>> }
>> }
>>
>> ======the filter==========
>> @Component(
>> immediate=true,
>> property= {
>> "osgi.jaxrs.extension=true",
>> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>> }
>> )
>> @PreMatching
>> @Priority(Priorities.AUTHENTICATION)
>> public final class JaxrsAuthenticationFilter extends
>> OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
>> {
>> public static final int count = 1; //BREAKPOINT NEVER HIT
>> @Override
>> public void filter(ContainerRequestContext arg0) throws IOException {
>> super.filter(arg0);    //BREAKPOINT NEVER HIT
>> }
>> }
>>
>> Could anyone give a hint what I may miss?
>>
>>
>>
>
>
> --
> Castor Technologies Inc
> 460 rue St-Catherine St
> <https://maps.google.com/?q=460+rue+St-Catherine+St&entry=gmail&source=g>
> Ouest, Suite 613
> Montréal, Québec H3B-1A7
> (514) 360-7208 o
> (514) 798-2044 f
> ntle@castortech.com
> www.castortech.com
>
> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
> confidential and may be proprietary information intended only for the use
> of the individual or entity to whom it is addressed. If the reader of this
> message is not the intended recipient, you are hereby notified that any
> viewing, dissemination, distribution, disclosure, copy or use of the
> information contained in this e-mail message is strictly prohibited. If you
> have received and/or are viewing this e-mail in error, please immediately
> notify the sender by reply e-mail, and delete it from your system without
> reading, forwarding, copying or saving in any manner. Thank you.
> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
> confidentiel, peut être protégé par le secret professionnel et est réservé
> à l'usage exclusif du destinataire. Toute autre personne est par les
> présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
> ou reproduire ce message. Si vous avez reçu cette communication par erreur,
> veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.
>
>
>


-- 
Castor Technologies Inc
460 rue St-Catherine St Ouest, Suite 613
Montréal, Québec H3B-1A7
(514) 360-7208 o
(514) 798-2044 f
ntle@castortech.com
www.castortech.com

CONFIDENTIALITY NOTICE: The information contained in this e-mail is
confidential and may be proprietary information intended only for the use
of the individual or entity to whom it is addressed. If the reader of this
message is not the intended recipient, you are hereby notified that any
viewing, dissemination, distribution, disclosure, copy or use of the
information contained in this e-mail message is strictly prohibited. If you
have received and/or are viewing this e-mail in error, please immediately
notify the sender by reply e-mail, and delete it from your system without
reading, forwarding, copying or saving in any manner. Thank you.
AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
confidentiel, peut être protégé par le secret professionnel et est réservé
à l'usage exclusif du destinataire. Toute autre personne est par les
présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
ou reproduire ce message. Si vous avez reçu cette communication par erreur,
veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.

Re: aries-jax-rs-whiteboard filter not triggered

Posted by Carlos Sierra Andrés <cs...@gmail.com>.
Hi again Thai,

you can try to get a reference to JaxrsServiceRuntime and call
getRuntimeDTO on it. It should give you a snapshot of the state of the
runtime as well as the reason why the extension is not being activated
by the runtime.

Also enabling debug might help you diagnose what's going on.

Carlos.


El 28/8/18 a las 20:47, Nhut Thai Le escribió:
> Hi Carlos,
>
> Thank you for pointing out the order. I tried what you suggested but i
> still not be able to hit the filter, not even its static field
>
> @Component(
> scope=ServiceScope.PROTOTYPE,
> property= {
> "osgi.jaxrs.extension=true",
> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
> }
> )
> @PreMatching
> @Priority(Priorities.AUTHENTICATION)
> public final class JaxrsAuthenticationFilter implements
> ContainerRequestFilter
> {
> public static final int count = 1;     //BREAKPOINT NEVER HIT
> @Override
> public void filter(ContainerRequestContext arg0) throws IOException {
> int n = 10;   //BREAKPOINT NEVER HIT
> }
> }
>
> Thai
>
> On Tue, Aug 28, 2018 at 1:16 PM, Carlos Sierra Andrés
> <csierra@gmail.com <ma...@gmail.com>> wrote:
>
>     Hi,
>
>     I would say that this:
>
>     -----
>
>     @Component(
>     immediate=true,
>     property= {
>     "osgi.jaxrs.extension=true",
>     "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>     }
>     )
>     -----
>
>     should be:
>
>     -----
>
>     @Component(
>     immediate=true,
>     property= {
>     "osgi.jaxrs.extension=true",
>     "osgi.jaxrs.application.select=(authentication.with=keycloak)"
>     }
>     )
>     -----
>
>     note the "extension -> application", otherwise your filter is
>     waiting for another extension that never arrives.
>
>     I would also suggest that you make your component
>     ServiceScope.PROTOTYPE so every application gets its own instance
>     of the filter.
>
>     Let me know if this helps.
>
>     Carlos.
>
>     El 28/8/18 a las 19:10, Nhut Thai Le escribió:
>>     Hello,
>>
>>     I'm using aries-jax-rs-whiteboard to host by REST service and I
>>     want to use a ContainerRequestFilter to check for authentication
>>     token. However, although the filter is registered as an OSGI
>>     service, it is not triggered or even instantiated. Here is my
>>     REST api and filter code:
>>
>>     =====the application====
>>     @Component(
>>     immediate = true,
>>     service = Application.class,
>>     property= {
>>     "osgi.jaxrs.name <http://osgi.jaxrs.name/>=RestApp",
>>     JAX_RS_APPLICATION_BASE + "=/rest",
>>     "authentication.with=keycloak"
>>     }
>>     )
>>     public class RestApiApp extends Application{
>>
>>     @Override
>>       public Set<Object> getSingletons() {
>>           return Collections.singleton(this);
>>       }
>>     }
>>
>>     =====the API==========
>>     @Component(
>>     immediate=true,
>>     service = Api.class,
>>     property = {
>>     "osgi.jaxrs.application.select=(osgi.jaxrs.name
>>     <http://osgi.jaxrs.name/>=RestApp)",
>>     "osgi.jaxrs.resource=true"
>>     }
>>     )
>>     @Path("/common")
>>     public final class Api {
>>     public static final Response EMPTY_RESPONSE =
>>     Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>>
>>     @GET
>>     @Path("/getObject")
>>     @Produces(MediaType.APPLICATION_JSON)
>>     public String getObject() {
>>     return "Rest call 2"; //$NON-NLS-1$
>>     }
>>     }
>>
>>     ======the filter==========
>>     @Component(
>>     immediate=true,
>>     property= {
>>     "osgi.jaxrs.extension=true",
>>     "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
>>     }
>>     )
>>     @PreMatching
>>     @Priority(Priorities.AUTHENTICATION)
>>     public final class JaxrsAuthenticationFilter extends
>>     OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
>>     {
>>     public static final int count = 1; //BREAKPOINT NEVER HIT
>>     @Override
>>     public void filter(ContainerRequestContext arg0) throws IOException {
>>     super.filter(arg0);    //BREAKPOINT NEVER HIT
>>     }
>>     }
>>
>>     Could anyone give a hint what I may miss?
>>
>
>
>
>
> -- 
> Castor Technologies Inc
> 460 rue St-Catherine St Ouest, Suite 613 
> Montréal, Québec H3B-1A7
> (514) 360-7208 o
> (514) 798-2044 f
> ntle@castortech.com <ma...@castortech.com>
> www.castortech.com <http://www.castortech.com> 
>
> CONFIDENTIALITY NOTICE: The information contained in this e-mail is
> confidential and may be proprietary information intended only for the
> use of the individual or entity to whom it is addressed. If the reader
> of this message is not the intended recipient, you are hereby notified
> that any viewing, dissemination, distribution, disclosure, copy or use
> of the information contained in this e-mail message is strictly
> prohibited. If you have received and/or are viewing this e-mail in
> error, please immediately notify the sender by reply e-mail, and
> delete it from your system without reading, forwarding, copying or
> saving in any manner. Thank you.
> AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
> confidentiel, peut être protégé par le secret professionnel et est
> réservé à l'usage exclusif du destinataire. Toute autre personne est
> par les présentes avisée qu'il lui est strictement interdit de
> diffuser, distribuer ou reproduire ce message. Si vous avez reçu cette
> communication par erreur, veuillez la détruire immédiatement et en
> aviser l'expéditeur. Merci.


Re: aries-jax-rs-whiteboard filter not triggered

Posted by Nhut Thai Le <nt...@castortech.com>.
Hi Carlos,

Thank you for pointing out the order. I tried what you suggested but i
still not be able to hit the filter, not even its static field

@Component(
scope=ServiceScope.PROTOTYPE,
property= {
"osgi.jaxrs.extension=true",
"osgi.jaxrs.application.select=(authentication.with=keycloak)"
}
)
@PreMatching
@Priority(Priorities.AUTHENTICATION)
public final class JaxrsAuthenticationFilter implements
ContainerRequestFilter
{
public static final int count = 1;     //BREAKPOINT NEVER HIT
@Override
public void filter(ContainerRequestContext arg0) throws IOException {
int n = 10;   //BREAKPOINT NEVER HIT
}
}

Thai

On Tue, Aug 28, 2018 at 1:16 PM, Carlos Sierra Andrés <cs...@gmail.com>
wrote:

> Hi,
>
> I would say that this:
>
> -----
> @Component(
> immediate=true,
> property= {
> "osgi.jaxrs.extension=true",
> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
> }
> )
> -----
>
> should be:
>
> -----
> @Component(
> immediate=true,
> property= {
> "osgi.jaxrs.extension=true",
> "osgi.jaxrs.application.select=(authentication.with=keycloak)"
> }
> )
> -----
>
> note the "extension -> application", otherwise your filter is waiting for
> another extension that never arrives.
>
> I would also suggest that you make your component ServiceScope.PROTOTYPE
> so every application gets its own instance of the filter.
>
> Let me know if this helps.
>
> Carlos.
>
> El 28/8/18 a las 19:10, Nhut Thai Le escribió:
>
> Hello,
>
> I'm using aries-jax-rs-whiteboard to host by REST service and I want to
> use a ContainerRequestFilter to check for authentication token. However,
> although the filter is registered as an OSGI service, it is not triggered
> or even instantiated. Here is my REST api and filter code:
>
> =====the application====
> @Component(
> immediate = true,
> service = Application.class,
> property= {
> "osgi.jaxrs.name=RestApp",
> JAX_RS_APPLICATION_BASE + "=/rest",
> "authentication.with=keycloak"
> }
> )
> public class RestApiApp extends Application{
>
> @Override
>   public Set<Object> getSingletons() {
>       return Collections.singleton(this);
>   }
> }
>
> =====the API==========
> @Component(
> immediate=true,
> service = Api.class,
> property = {
> "osgi.jaxrs.application.select=(osgi.jaxrs.name=RestApp)",
> "osgi.jaxrs.resource=true"
> }
> )
> @Path("/common")
> public final class Api {
> public static final Response EMPTY_RESPONSE =
> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>
> @GET
> @Path("/getObject")
> @Produces(MediaType.APPLICATION_JSON)
> public String getObject() {
> return "Rest call 2"; //$NON-NLS-1$
> }
> }
>
> ======the filter==========
> @Component(
> immediate=true,
> property= {
> "osgi.jaxrs.extension=true",
> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
> }
> )
> @PreMatching
> @Priority(Priorities.AUTHENTICATION)
> public final class JaxrsAuthenticationFilter extends
> OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
> {
> public static final int count = 1; //BREAKPOINT NEVER HIT
> @Override
> public void filter(ContainerRequestContext arg0) throws IOException {
> super.filter(arg0);    //BREAKPOINT NEVER HIT
> }
> }
>
> Could anyone give a hint what I may miss?
>
>
>


-- 
Castor Technologies Inc
460 rue St-Catherine St Ouest, Suite 613
Montréal, Québec H3B-1A7
(514) 360-7208 o
(514) 798-2044 f
ntle@castortech.com
www.castortech.com

CONFIDENTIALITY NOTICE: The information contained in this e-mail is
confidential and may be proprietary information intended only for the use
of the individual or entity to whom it is addressed. If the reader of this
message is not the intended recipient, you are hereby notified that any
viewing, dissemination, distribution, disclosure, copy or use of the
information contained in this e-mail message is strictly prohibited. If you
have received and/or are viewing this e-mail in error, please immediately
notify the sender by reply e-mail, and delete it from your system without
reading, forwarding, copying or saving in any manner. Thank you.
AVIS DE CONFIDENTIALITE: L’information contenue dans ce message est
confidentiel, peut être protégé par le secret professionnel et est réservé
à l'usage exclusif du destinataire. Toute autre personne est par les
présentes avisée qu'il lui est strictement interdit de diffuser, distribuer
ou reproduire ce message. Si vous avez reçu cette communication par erreur,
veuillez la détruire immédiatement et en aviser l'expéditeur. Merci.

Re: aries-jax-rs-whiteboard filter not triggered

Posted by Carlos Sierra Andrés <cs...@gmail.com>.
Hi,

I would say that this:

-----

@Component(
immediate=true,
property= {
"osgi.jaxrs.extension=true",
"osgi.jaxrs.extension.select=(authentication.with=keycloak)"
}
)
-----

should be:

-----

@Component(
immediate=true,
property= {
"osgi.jaxrs.extension=true",
"osgi.jaxrs.application.select=(authentication.with=keycloak)"
}
)
-----

note the "extension -> application", otherwise your filter is waiting
for another extension that never arrives.

I would also suggest that you make your component ServiceScope.PROTOTYPE
so every application gets its own instance of the filter.

Let me know if this helps.

Carlos.

El 28/8/18 a las 19:10, Nhut Thai Le escribió:
> Hello,
>
> I'm using aries-jax-rs-whiteboard to host by REST service and I want
> to use a ContainerRequestFilter to check for authentication token.
> However, although the filter is registered as an OSGI service, it is
> not triggered or even instantiated. Here is my REST api and filter code:
>
> =====the application====
> @Component(
> immediate = true,
> service = Application.class,
> property= {
> "osgi.jaxrs.name <http://osgi.jaxrs.name/>=RestApp",
> JAX_RS_APPLICATION_BASE + "=/rest",
> "authentication.with=keycloak"
> }
> )
> public class RestApiApp extends Application{
>
> @Override
>   public Set<Object> getSingletons() {
>       return Collections.singleton(this);
>   }
> }
>
> =====the API==========
> @Component(
> immediate=true,
> service = Api.class,
> property = {
> "osgi.jaxrs.application.select=(osgi.jaxrs.name
> <http://osgi.jaxrs.name/>=RestApp)",
> "osgi.jaxrs.resource=true"
> }
> )
> @Path("/common")
> public final class Api {
> public static final Response EMPTY_RESPONSE =
> Response.noContent().type(MediaType.TEXT_HTML_TYPE).build();
>
> @GET
> @Path("/getObject")
> @Produces(MediaType.APPLICATION_JSON)
> public String getObject() {
> return "Rest call 2"; //$NON-NLS-1$
> }
> }
>
> ======the filter==========
> @Component(
> immediate=true,
> property= {
> "osgi.jaxrs.extension=true",
> "osgi.jaxrs.extension.select=(authentication.with=keycloak)"
> }
> )
> @PreMatching
> @Priority(Priorities.AUTHENTICATION)
> public final class JaxrsAuthenticationFilter extends
> OsgiJaxrsBearerTokenFilterImpl implements ContainerRequestFilter
> {
> public static final int count = 1; //BREAKPOINT NEVER HIT
> @Override
> public void filter(ContainerRequestContext arg0) throws IOException {
> super.filter(arg0);    //BREAKPOINT NEVER HIT
> }
> }
>
> Could anyone give a hint what I may miss?
>