Ok i hit an additional problem. When i create a JaxRsApplication i can reference them in my resource everything works fine except the MessageWriter and MessageReader e.g. Jackson Extension is not found. --> No message body writer has been found for class ... ContentType: application/json Without "osgi.jaxrs.application.select=(osgi.jaxrs.name=MyApp)", serialization works.
I also tried to explicitly select the whiteboard for the Application, with "osgi.jaxrs.whiteboard.target=(service.pid=org.apache.aries.jax.rs.whiteboard.default)" but that doesn't work. How does the injection mechanism work? I couldn't figure it out reading the aries source code. regards, Matthias Am Fr., 8. Nov. 2019 um 10:28 Uhr schrieb Tim Ward <[email protected]>: > Hi, > > Yes, you can absolutely inject things using @Context (this is the only way > to do server sent events, so it’s not optional for any implementation). > It’s recommended that you inject into resource methods, rather than into > fields, unless you make your service prototype scope. This is to avoid any > potential threading mismatch if you inject invocation scoped objects (e.g. > an incoming HttpServletRequest) and get two http calls at the same time. > > Tim > > On 7 Nov 2019, at 16:24, Matthias Leinweber <[email protected]> > wrote: > > Great. Thank you very much. > > I dont want to add CXF or Jersey. thank to your answer I have come up with > the idea myself to inject the @Context HttpServletRequest into the JaxRS > code. To mix in this: > https://osgi.org/specification/osgi.cmpn/7.0.0/service.http.whiteboard.html#d0e120961 > I didn't test it yet but does it work? I don't see that the aries JaxRs > whiteboard impl somewhere > defined osgi.http.whiteboard.servlet.multipart.enabled=true > > Best regards, > Matthias > > Am Do., 7. Nov. 2019 um 15:38 Uhr schrieb Tim Ward <[email protected]>: > >> Hi Matthias >> >> I was a bit confused about how you could add a Servelt to the >> JaxRsWhiteboard instead of the HttpWhiteboard for Multi-Part file uploads. >> >> >> I hope it’s now clear that the JAX-RS whiteboard does not support >> Servlets. You can either: >> >> - Register a servlet with the Http Whiteboard and find a place to put >> the file >> - Handle the multipart file upload using JAX-RS >> >> >> If the file upload is only needed by your JAX-RS components then I would >> recommend just using JAX-RS rather than a servlet. >> >> * So a JaxRsResource can but most not belong to an application? >> >> >> A JAX-RS Whiteboard resource is just a “bare” resource in the service >> registry. In the most common case the resource service that you register >> will bind to the “default” application provided by the JAX-RS Whiteboard. >> There is no need to deploy a custom whiteboard application for resources to >> be hosted by the JAX-RS whiteboard. >> >> * It's fine to put all your Resources into the same JaxRsWhiteboard even >> if you could separate them? >> >> >> Yes. This will work fine. All the resources (by default) will get hosted >> in the default application. If you do want to provide some isolation >> between the resources (e.g. if you need differently configured JSON >> providers for different resources) then you can still do this with a single >> JAX-RSWhiteboard, but you will need to provide separate Applications for >> the resources and extensions. This is because applications within the >> whiteboard *are* isolated from each other, and can have different sets of >> resources and extensions. >> >> In general, however, you’re pretty safe just registering all the >> resources and extensions that you need directly with the whiteboard using >> the default application. >> >> All the best, >> >> Tim >> >> >> On 7 Nov 2019, at 12:54, Matthias Leinweber <[email protected]> >> wrote: >> >> Hello Tim, >> >> thanks for your reply. I get the JaxRS Application thing wrong. I thought >> that an application and a JaxRsResource is/can be the same. But obviously, >> if you read the documentation correct, then not. >> Then it also makes sense to inject the Application with @Context >> Applicaiton app into a method. >> I had also a misunderstanding with http and jaxrs whiteboard. I was a >> bit confused about how you could add a Servelt to the JaxRsWhiteboard >> instead of the HttpWhiteboard for Multi-Part file uploads. >> I think the default app and the configuration of the default jaxrs >> whiteboard caused some confusion for me. >> >> * So a JaxRsResource can but most not belong to an application? >> * It's fine to put all your Resources into the same JaxRsWhiteboard even >> if you could separate them? >> >> right? then I think, I understood the thing and i like it :) >> >> Best regards >> Matthias >> >> Am Do., 7. Nov. 2019 um 13:24 Uhr schrieb Tim Ward <[email protected] >> >: >> >>> in OSGI 6 I think we should be able to use >>> @Component(property = {"osgi.jaxrs.name=myApp", >>> "osgi.jaxrs.application.base=/foo"}, service = A.class) >>> class... >>> That does not work or did I misunderstood something? >>> >>> >>> If you want to register an application with the whiteboard then you must >>> register it as a javax.ws.rs.core.Application in the service registry. >>> This is outlined at https://osgi.org/specification/osgi.cmpou >>> cann/7.0.0/service.jaxrs.html#service.jaxrs.application.services >>> <https://osgi.org/specification/osgi.cmpn/7.0.0/service.jaxrs.html#service.jaxrs.application.services> >>> >>> Second how do i create additional Servlets and how do I select them in a >>> resource? >>> E.g. A configfile/servicepid >>> org.apache.aries.jax.rs.whiteboard-bar.cfg >>> application.base.prefix=/bar >>> should create an additional servlet container? >>> >>> >>> I’m not sure that I totally follow here. It looks like you’re trying to >>> create a configuration for another Aries JAX-RS whitboard instance - is >>> this really what you want, a second JAX-RS whiteboard? The Aries JAX-RS >>> Whiteboard is designed to build on top of a compliant Http Whiteboard, if >>> you are actually trying to create another Http Whiteboard (e.g. to get HTTP >>> served on another port) then you will need to set that up in PAX-Web. >>> >>> Then with >>> @JaxrsWhiteboardTarget >>> or >>> "osgi.jaxrs.whiteboard.target=" >>> >>> I can select the servlet/Whiteboard, but how does the LDAP string look? >>> (service.pid=org.apache.aries.jax.rs.whiteboard-bar)? >>> >>> >>> This property only applies if you create more than one JAX-RS >>> whiteboard, and would be applied to your JAX-RS Whiteboard services >>> (resources, applications, extensions), and you would use the filter to >>> select the JAX-RS Whiteboard that you wanted them to use. If you do want to >>> do this, which seems unlikely, then you would typically add a marker >>> property into the configuration for your JAX-RS Whiteboard and then use >>> that property name/value in the filter. >>> >>> >>> Any questions that relate to setting up the Http Whiteboard will need to >>> be handled by someone with more PAX-Web experience. I would also recommend >>> that, in addition to describing the problems that you’ve encountered, you >>> include a description of what you’re trying to achieve with your system. >>> >>> E.g. >>> >>> >>> - Do you want multiple Http ports being served (this would be Http >>> Whiteboard not JAX-RS Whiteboard)? >>> - Do you want JAX-RS Whiteboard support on top of one or more of the >>> available Http Whiteboards)? >>> - Do you want to publish JAX-RS resource services, application >>> services, or a mixture of the two? >>> - Do you want the JAX-RS services that you publish to appear on all >>> whiteboards, or just a subset? >>> >>> >>> With this information it will be much easier to help you to achieve your >>> goal. >>> >>> All the best, >>> >>> Tim >>> >>> On 6 Nov 2019, at 17:25, Matthias Leinweber <[email protected]> >>> wrote: >>> >>> Hi JB, >>> yes that was my first place to start... really like the examples in the >>> source, they are really helpful. >>> >>> ok: >>> Fist thing are JAXRs Applications. In OSGI7 we will use >>> @JaxrsName("myApp") >>> @JaxrsApplicationBase("foo") >>> @Component >>> class.... >>> >>> in OSGI 6 I think we should be able to use >>> @Component(property = {"osgi.jaxrs.name=myApp", >>> "osgi.jaxrs.application.base=/foo"}, service = A.class) >>> class... >>> That does not work or did I misunderstood something? >>> >>> Second how do i create additional Servlets and how do I select them in a >>> resource? >>> E.g. A configfile/servicepid >>> org.apache.aries.jax.rs.whiteboard-bar.cfg >>> application.base.prefix=/bar >>> should create an additional servlet container? >>> >>> Then with >>> @JaxrsWhiteboardTarget >>> or >>> "osgi.jaxrs.whiteboard.target=" >>> >>> I can select the servlet/Whiteboard, but how does the LDAP string look? >>> (service.pid=org.apache.aries.jax.rs.whiteboard-bar)? >>> >>> Best regards, >>> Matthias >>> >>> >>> Am Mi., 6. Nov. 2019 um 18:00 Uhr schrieb Jean-Baptiste Onofré < >>> [email protected]>: >>> >>>> Hi Matthias, >>>> >>>> did you take a look on the Karaf example ? >>>> >>>> https://github.com/apache/karaf/tree/master/examples/karaf-rest-example >>>> >>>> It contains different approaches, including whiteboard. >>>> >>>> Can you describe a bit what you are looking for ? We can then create the >>>> Jira at Karaf/Aries to improve example/documentation. >>>> >>>> Regards >>>> JB >>>> >>>> On 06/11/2019 17:56, Matthias Leinweber wrote: >>>> > Hello Karaf Team, >>>> > >>>> > I know that this not the 100% correct mailing list for aries jax-rs. >>>> > However my question is what do you plan for further releases of >>>> Karaf? I >>>> > try to use the aries implementation but I struggle with the >>>> configuration. >>>> > Beside the incomplete documentation and the "very special" DSL which >>>> is >>>> > used I dug into the code and understood the following things. >>>> > >>>> > * You can not add additional JAXRSApplications. ("osgi.jaxrs.name >>>> > <http://osgi.jaxrs.name>=myApp", >>>> "osgi.jaxrs.application.base=/approot"} >>>> > although there is code which should do this? >>>> > * Additional configurations for other then the default servlet is not >>>> > possible although there is a service factory manager >>>> which should handle >>>> > additional configs? >>>> > * With org.apache.aries.jax.rs.whiteboard.default.cfg >>>> > # application.base.prefix you can add a global url prefix to your >>>> > JaxRSResoureces. Would be nice if that could be documented somewhere. >>>> > >>>> > Don't get me wrong I do not say that the bundle is bad, but at some >>>> > point it could be easier to understand. >>>> > >>>> > regards Matthias >>>> > >>>> > >>>> >>>> -- >>>> Jean-Baptiste Onofré >>>> [email protected] >>>> http://blog.nanthrax.net >>>> Talend - http://www.talend.com >>>> >>> >>> >>> -- >>> >>> >>> >> >> >> >> > > > >
