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]> 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 >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>> >>> >> >
