Hi Tim, Thank you for the feedback. Yes, I understand the @MultipartConfig is in the Servlet Spec, I only added it at the suggestion of others in this thread. It clearly is not doing anything, as you say.
Regarding the @Protected annotation, it is irrelevant to the problem, that is just a name binding annotation to activate a security filter. Elsewhere I read that property osgi.http.whiteboard.servlet.multipart.enabled=true would enable the multi part support, but this is not working for me. I also tried prefixing it with “servlet.init.”, as suggested, and it still does not work. I tried these properties both in my custom JAX-RS Application configuration PID, and in the org.apache.aries.jax.rs.whiteboard.default, same result. Really, I did not expect this to be this obscure, I have not seen any documentation at all covering file uploads in the JAX-RS Whiteboard Specification, or in the Aries web site. Is file upload such an obscure use case to not merit coverage in the examples and documentation? Best regards, Alex soto > On Dec 3, 2020, at 11:23 AM, Tim Ward <[email protected]> wrote: > > Hello, > > Having seen the class included in this email chain I can see that your > example is actually quite complex, and that a couple of things you’re trying > to do may not be working as you expect: > > Firstly, the @MultipartConfig annotation is from the Servlet specification, > and has no meaning in JAX-RS. The JAX-RS whiteboard will therefore not do > anything with the annotation. The annotation also has no meaning as part of a > DS component, and will not result in any service or configuration properties > being set. Anything that you want to achieve using this annotation will > therefore most likely not work. > > Secondly, you make use of an annotation @Protected, but this isn’t listed in > your imports. It’s not an annotation that I recognise from the JAX-RS or > JAX-RS whiteboard specifications, so it’s possible that this annotation is > also not doing anything. > > Thirdly, you are making use of the @JaxrsApplicationSelect annotation - this > means that your JAX-RS resource will *probably* not target the default > application (I can’t be sure because the selection filter you are using isn’t > shown). If your resource isn’t targeting the default application then it may > also not be targeting the default JAX-RS whiteboard. If this is the case then > the whiteboard configuration you will need to set will *not* be the one with > pid org.apache.aries.jax.rs.whiteboard.default, but using the factory pid > that you used to create that whiteboard. > > Fourthly, the exception that you’re describing shows up on google as being an > issue people have had when using Jetty generally. Are you certain that Jetty > is correctly configured? > > Fifthly, have you inspected your running framework to see: > Generic: The actual service properties on your JAX-RS resource > Generic: Which application your JAX-RS resource has been bound to, and what > service properties it has > Generic: Which JAX-RS whiteboard your application has been bound to, and what > service properties it has > Aries specific: What the corresponding service properties are for the Servlet > Service and Http Context service corresponding to your JAX-RS whiteboard > If any of these aren’t as you expect then that will give a better fix on the > problem. > > Finally, you say that you are using PAX-Web. The Aries JAX-RS whiteboard is > designed to work with any compliant implementation of the OSGi Http > Whiteboard > (https://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.http.whiteboard.html > > <https://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.http.whiteboard.html>). > I can’t find this specification referenced anywhere in the PAX-Web > documentation, nor can I find PAX-Web listed as an implementation. This > doesn’t mean that PAX-Web doesn’t support the Http Whiteboard (it may simply > not be documented), but the Aries JAX-RS whiteboard makes extensive use of > features from across the Http Whiteboard specification. If there are any gaps > or incompatibilities in the PAX-Web support then it’s possible that they’re > preventing the JAX-RS whiteboard from operating properly. Have you tried > testing your JAX-RS resource in a plain OSGi framework using either the Felix > or Equinox Http Whiteboards? If this works then it will narrow the search > space considerably. > > All the best, > > Tim Ward > >> On 3 Dec 2020, at 12:49, Alex Soto <[email protected] >> <mailto:[email protected]>> wrote: >> >> Yes, of course, I will write you to your email. >> >> Best regards, >> Alex soto >> >> >> >> >>> On Dec 3, 2020, at 7:45 AM, Jean-Baptiste Onofre <[email protected] >>> <mailto:[email protected]>> wrote: >>> >>> Hi Alex, >>> >>> Not yet started, I will take investigate tonight. >>> >>> By the way, any chance we can do direct chat together (to move forward >>> faster) ? >>> >>> Regards >>> JB >>> >>>> Le 3 déc. 2020 à 13:34, Alex Soto <[email protected] >>>> <mailto:[email protected]>> a écrit : >>>> >>>> Hi JB, >>>> >>>> Did you have a chance to look into this? It is starting become a blocker >>>> in our project, so if there is workaround or any hints, I will appreciate >>>> it. >>>> >>>> Best regards, >>>> Alex soto >>>> >>>> >>>> >>>> >>>>> On Dec 1, 2020, at 9:03 AM, Jean-Baptiste Onofre <[email protected] >>>>> <mailto:[email protected]>> wrote: >>>>> >>>>> Don’t worry, I will update the karaf-rest-example. >>>>> >>>>> Regards >>>>> JB >>>>> >>>>>> Le 1 déc. 2020 à 15:01, Alex Soto <[email protected] >>>>>> <mailto:[email protected]>> a écrit : >>>>>> >>>>>> I’ll try but these days I'm very busy…. >>>>>> >>>>>> Best regards, >>>>>> Alex soto >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> On Dec 1, 2020, at 8:52 AM, Francois Papon >>>>>>> <[email protected] <mailto:[email protected]>> >>>>>>> wrote: >>>>>>> >>>>>>> Hi Alex, >>>>>>> >>>>>>> Any chances to have a sample project to share on github? >>>>>>> >>>>>>> regards, >>>>>>> >>>>>>> François >>>>>>> [email protected] <mailto:[email protected]> >>>>>>> Le 01/12/2020 à 14:50, Alex Soto a écrit : >>>>>>>> No problem, thanks. >>>>>>>> >>>>>>>> I think it will help others to have a working example of a File Upload >>>>>>>> using pure OSGi JAX-RS Whiteboard Specification, all the samples I >>>>>>>> have found do not go there. >>>>>>>> >>>>>>>> Best regards, >>>>>>>> Alex soto >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>> On Dec 1, 2020, at 8:43 AM, Jean-Baptiste Onofre <[email protected] >>>>>>>>> <mailto:[email protected]>> wrote: >>>>>>>>> >>>>>>>>> Thanks for the update. >>>>>>>>> >>>>>>>>> I’m pretty busy with ActiveMQ, Decanter, Camel and Karaf5 PoC, but I >>>>>>>>> will take a look tomorrow. >>>>>>>>> >>>>>>>>> Regards >>>>>>>>> JB >>>>>>>>> >>>>>>>>>> Le 1 déc. 2020 à 14:29, Alex Soto <[email protected] >>>>>>>>>> <mailto:[email protected]>> a écrit : >>>>>>>>>> >>>>>>>>>> Hi JB, >>>>>>>>>> >>>>>>>>>> Yes, Aries JAXRS 1.0.10. >>>>>>>>>> I suppose it is PAX-WEB, or whatever the default is for Karaf 4.3.0. >>>>>>>>>> >>>>>>>>>> The class: >>>>>>>>>> >>>>>>>>>> import javax.servlet.ServletException; >>>>>>>>>> import javax.servlet.annotation.MultipartConfig; >>>>>>>>>> import javax.servlet.http.HttpServletRequest; >>>>>>>>>> import javax.servlet.http.Part; >>>>>>>>>> import javax.ws.rs.Consumes; >>>>>>>>>> import javax.ws.rs.DELETE; >>>>>>>>>> import javax.ws.rs.GET; >>>>>>>>>> import javax.ws.rs.PATCH; >>>>>>>>>> import javax.ws.rs.POST; >>>>>>>>>> import javax.ws.rs.Path; >>>>>>>>>> import javax.ws.rs.PathParam; >>>>>>>>>> import javax.ws.rs.Produces; >>>>>>>>>> import javax.ws.rs.core.Context; >>>>>>>>>> import javax.ws.rs.core.MediaType; >>>>>>>>>> import javax.ws.rs.core.SecurityContext; >>>>>>>>>> import javax.ws.rs.core.UriInfo; >>>>>>>>>> >>>>>>>>>> @Component(service = FirmwareResource.class, scope = >>>>>>>>>> ServiceScope.PROTOTYPE) >>>>>>>>>> @JaxrsResource >>>>>>>>>> @Path(ResourceConstants.FIRMWARE_PATH) >>>>>>>>>> @JaxrsName("firmware") >>>>>>>>>> @JaxrsApplicationSelect(Constants.JAXRS_APP_SELECT) >>>>>>>>>> @Produces(Constants.API_MEDIA_TYPE) >>>>>>>>>> @Protected >>>>>>>>>> @MultipartConfig >>>>>>>>>> public class FirmwareResource { >>>>>>>>>> >>>>>>>>>> @POST >>>>>>>>>> @Consumes(MediaType.MULTIPART_FORM_DATA) >>>>>>>>>> public void upload(@Context HttpServletRequest request) throws >>>>>>>>>> IOException, ServletException { >>>>>>>>>> Collection<Part> parts = request.getParts(); >>>>>>>>>> ... >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Thank you for taking a look at this. >>>>>>>>>> >>>>>>>>>> Best regards, >>>>>>>>>> Alex soto >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> On Dec 1, 2020, at 1:23 AM, Jean-Baptiste Onofre <[email protected] >>>>>>>>>>> <mailto:[email protected]>> wrote: >>>>>>>>>>> >>>>>>>>>>> Hi Alex, >>>>>>>>>>> >>>>>>>>>>> In order for me to reproduce, are you using: >>>>>>>>>>> >>>>>>>>>>> - Aries JAXRS 1.0.10 still (or did you update) ? >>>>>>>>>>> - Pax Web or Felix as HTTP service ? >>>>>>>>>>> - Do you have JEE @MultipartConfig annotation on your JAXRS class ? >>>>>>>>>>> - @Consumers is set to MediaType.MULTIPART ? >>>>>>>>>>> >>>>>>>>>>> It could be necessary to mimic the JAXRS tests by adding a fragment >>>>>>>>>>> to bring org.apache.cxf.jaxrs.utils.multipart to Aries JAXRS bundle. >>>>>>>>>>> >>>>>>>>>>> Regards >>>>>>>>>>> JB >>>>>>>>>>> >>>>>>>>>>>> Le 30 nov. 2020 à 19:19, Alex Soto <[email protected] >>>>>>>>>>>> <mailto:[email protected]>> a écrit : >>>>>>>>>>>> >>>>>>>>>>>> Hello, >>>>>>>>>>>> >>>>>>>>>>>> Anybody has any insight about this? >>>>>>>>>>>> >>>>>>>>>>>> Best regards, >>>>>>>>>>>> Alex soto >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> On Nov 13, 2020, at 8:54 AM, Alex Soto <[email protected] >>>>>>>>>>>>> <mailto:[email protected]>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> Thank you, João, for your response. >>>>>>>>>>>>> >>>>>>>>>>>>> Unfortunately, it is not working for me. I tested adding the >>>>>>>>>>>>> annotation, and my service look almost identical to yours. >>>>>>>>>>>>> >>>>>>>>>>>>> I found this thread >>>>>>>>>>>>> https://github.com/osgi/osgi.enroute/issues/65 >>>>>>>>>>>>> <https://github.com/osgi/osgi.enroute/issues/65> in which Tim >>>>>>>>>>>>> Ward explains about the need to set >>>>>>>>>>>>> “osgi.http.whiteboard.servlet.multipart.enabled=true” in the >>>>>>>>>>>>> configuration PID “org.apache.aries.jax.rs.whiteboard.default” >>>>>>>>>>>>> but that is not working either. It still fails with exception: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> java.lang.IllegalStateException: No multipart config for servlet >>>>>>>>>>>>> at org.eclipse.jetty.server.Request.getParts(Request.java:2378) >>>>>>>>>>>>> ~[!/:9.4.31.v20200723] >>>>>>>>>>>>> at org.eclipse.jetty.server.Request.getParts(Request.java:2366) >>>>>>>>>>>>> ~[!/:9.4.31.v20200723] >>>>>>>>>>>>> at >>>>>>>>>>>>> javax.servlet.http.HttpServletRequestWrapper.getParts(HttpServletRequestWrapper.java:375) >>>>>>>>>>>>> ~[!/:3.1.0] >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Best regards, >>>>>>>>>>>>> Alex soto >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>> On Nov 13, 2020, at 4:30 AM, João Assunção >>>>>>>>>>>>>> <[email protected] >>>>>>>>>>>>>> <mailto:[email protected]>> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hello Alex, >>>>>>>>>>>>>> >>>>>>>>>>>>>> I used Multipart with Aries JAX-RS and I'm almost sure I didn't >>>>>>>>>>>>>> need to mess with the configuration. >>>>>>>>>>>>>> I annotated the class with @MultipartConfig and placed a >>>>>>>>>>>>>> @Consumes(MediaType.MULIPART_FOR_DATA). >>>>>>>>>>>>>> >>>>>>>>>>>>>> @Path("/firmware") >>>>>>>>>>>>>> @Component(service = FirmwareService.class, // >>>>>>>>>>>>>> immediate = true, // >>>>>>>>>>>>>> scope = ServiceScope.SINGLETON, property = { >>>>>>>>>>>>>> JaxrsWhiteboardConstants.JAX_RS_RESOURCE + "=true", >>>>>>>>>>>>>> JaxrsWhiteboardConstants.JAX_RS_APPLICATION_SELECT + >>>>>>>>>>>>>> "=(" + JaxrsWhiteboardConstants.JAX_RS_NAME + "=myApp)" >>>>>>>>>>>>>> }) >>>>>>>>>>>>>> @MultipartConfig >>>>>>>>>>>>>> public class FirmwareService { >>>>>>>>>>>>>> .... >>>>>>>>>>>>>> @POST >>>>>>>>>>>>>> @Path("/upload") >>>>>>>>>>>>>> @Consumes(MediaType.MULTIPART_FORM_DATA) >>>>>>>>>>>>>> public Response uploadFirmware(@Context HttpServletRequest >>>>>>>>>>>>>> request) { >>>>>>>>>>>>>> try { >>>>>>>>>>>>>> doUploadFirmware(request); >>>>>>>>>>>>>> >>>>>>>>>>>>>> Hope this helps >>>>>>>>>>>>>> >>>>>>>>>>>>>> João Assunção >>>>>>>>>>>>>> >>>>>>>>>>>>>> Email: [email protected] >>>>>>>>>>>>>> <mailto:[email protected]> >>>>>>>>>>>>>> Mobile: +351 916968984 >>>>>>>>>>>>>> Phone: +351 211933149 >>>>>>>>>>>>>> Web: www.exploitsys.com <http://www.exploitsys.com/> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Thu, Nov 12, 2020 at 5:25 PM Alex Soto <[email protected] >>>>>>>>>>>>>> <mailto:[email protected]>> wrote: >>>>>>>>>>>>>> With Karaf 4.3.0, using Aries JAX-RS 1.0.10, how can I enable >>>>>>>>>>>>>> multi part support? >>>>>>>>>>>>>> >>>>>>>>>>>>>> I am adding configuration file >>>>>>>>>>>>>> “org.apache.aries.jax.rs.whiteboard.default.cfg” to the “etc” >>>>>>>>>>>>>> directory with property: >>>>>>>>>>>>>> >>>>>>>>>>>>>> osgi.http.whiteboard.servlet.multipart.enabled=true >>>>>>>>>>>>>> >>>>>>>>>>>>>> But I am still getting error: >>>>>>>>>>>>>> >>>>>>>>>>>>>> java.lang.IllegalStateException: No multipart config for servlet >>>>>>>>>>>>>> >>>>>>>>>>>>>> When getting parts from HttpServletRequest. >>>>>>>>>>>>>> Any help will be appreciated. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Best regards, >>>>>>>>>>>>>> Alex soto >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>> >>>>> >>>> >>> >> >
