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 <raymond.a...@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 <n...@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 <csie...@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 <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> 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 >>>> n...@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 >>> n...@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 >> n...@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) >