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 > <csie...@gmail.com <mailto:csie...@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 >> <csie...@gmail.com <mailto:csie...@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 >> n...@castortech.com <mailto:n...@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 > n...@castortech.com <mailto:n...@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.