Hi, I am struggling with the following topic for days now. And I don't find any solution, tutorial or explanation anywhere. So I thought of asking here, hoping to get enlightened. :)
I am trying to create a webservice to upload a file which then gets processed on the server. I know that file upload is more complicated that it looks in first place. But this one is driving me crazy. First I tried to use Jersey for the file upload. So I added org.glassfish.jersey.media.multipart as a dependency and created a method like this: @POST @Path("/app4mc/converter") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.TEXT_HTML) public Response upload(@FormDataParam("file") InputStream fileInputStream, @FormDataParam("file") FormDataContentDisposition fileMetaData) This resulted in 415 Unsupported Media Type when I tried to upload a file. My guess was that I have to register the MultipartFeature.class, and as I did not know how to do this, I used the approach to register a new @JaxrsApplication via whiteboard and configure it there. This led to severe errors on startup as Aries is implemented using CXF, and a mixture of CXF and Jersey seems to be not possible. As I did not find a solution for this, I thought of using CXF to upload a file. So I added cxf-rt-frontend-jaxrs as a dependency and changed the method to this @POST @Path("/app4mc/converter") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.TEXT_HTML) public Response upload(MultipartBody body) Still 415. Then I read something about org.apache.cxf.jaxrs.provider.MultipartProvider that needs to be registered. So I thought maybe it would work using the @JaxrsExtension as the application is already a CXF application from what I can see in the startup trace. As the CXF MultipartProvider is not annotated with the needed JAX-RS Whiteboard annotations, I created this class for the registeration: @Component( scope = PROTOTYPE, property="serialize.to<http://serialize.to/>=MULTIPART") @JaxrsExtension @JaxrsMediaType(MULTIPART_FORM_DATA) public class Multipart extends MultipartProvider implements MessageBodyReader<Object>, MessageBodyWriter<Object> { } This results in a IllegalArgumentException: java.lang.IllegalArgumentException: interface org.apache.cxf.jaxrs.impl.tl.ThreadLocalProxy is not visible from class loader at java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:581) at java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:557) at java.lang.reflect.WeakCache$Factory.get(WeakCache.java:230) at java.lang.reflect.WeakCache.get(WeakCache.java:127) at java.lang.reflect.Proxy.getProxyClass0(Proxy.java:419) at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:719) at org.apache.cxf.jaxrs.utils.InjectionUtils.createThreadLocalProxy(InjectionUtils.java:1080) I am running out of ideas. Does anybody has a hint or a small example to solve this? I am happy to write a blog post about the findings to help others in the future! :) Sorry for having posted this on the bndtools google group. The mailing list is surely a better place to ask such a question. Mit freundlichen Grüßen / Best regards Dirk Fauth Cross Automotive Platforms - Systems, Software and Tools, (CAP-SST/ESM1) Robert Bosch GmbH | Postfach 30 02 40 | 70442 Stuttgart | GERMANY | www.bosch.com Tel. +49 7153 666-1155 | dirk.fa...@de.bosch.com<mailto:dirk.fa...@de.bosch.com> Sitz: Stuttgart, Registergericht: Amtsgericht Stuttgart, HRB 14000; Aufsichtsratsvorsitzender: Franz Fehrenbach; Geschäftsführung: Dr. Volkmar Denner, Prof. Dr. Stefan Asenkerschbaumer, Dr. Michael Bolle, Dr. Christian Fischer, Dr. Stefan Hartung, Dr. Markus Heyn, Harald Kröger, Christoph Kübel, Rolf Najork, Uwe Raschke, Peter Tyroller
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev