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