Hi Sergey,

Thanks for the answer.

Regarding @Multipart method annotation, is there any way to initiate generation 
of this annotation through the WADL? (project uses WADL fist approach)

Regards,
Andrei.

> -----Original Message-----
> From: Sergey Beryozkin [mailto:[email protected]]
> Sent: Dienstag, 4. April 2017 16:53
> To: [email protected]
> Cc: Sergey Beryozkin; Dmitry Tsybulko
> Subject: Re: Multipart body with proxy client
> 
> Hi Andriy
> 
> What changed in JAX-RS 2.0, and which annoyed me quite a bit at a time, was
> that in JAX-RS 2.0 native types like InputStream have to be processed by the
> default handlers, ex, in case of InputStream it would be basically 
> IOUtils.copy,
> etc, which started breaking the attachments code where individual part was
> represented as InputStream or String for ex. That was done to support wildcard
> handlers like Jackson which would blindly accept any type as long as it is
> application/json.
> 
> InpputStream parts can still be supported by CXF RS multipart code but as long
> as they have @Multipart annotations.
> 
> I can assume that the reason the code below fails is because an individual
> Attachment is using InputStream.
> 
> Try adding @Multipart method annotation, without any properties, that should
> help
> 
> Thanks, Sergey
> 
> 
> 
> 
> On 04/04/17 15:18, Andrei Shakirin wrote:
> > Hi Sergey,
> >
> > I have discovered one difference in processing of mutipart body by client
> proxy after migration to CXF 3:
> >
> > 1. Server method described by following interface (generated from WADL):
> >   @GET
> >   @Produces("multipart/mixed")
> >   @Path
> >   Response getSomething();
> >
> > 2. Implementation :
> >   Response getSomething() {
> >            MyResponse myResponse;// init it here
> >            List<Attachment> attachments = new LinkedList<>();
> >            attachments.add(new Attachment("response",
> MediaType.APPLICATION_XML_TYPE.toString(), myResponse));
> >           // it can be added other attachments
> >           return Response.ok().entity(attachments).build();
> >   }
> >
> > 3.  On client side we create service proxy for calling the method
> >     final T serviceProxy = JAXRSClientFactory.create(baseURL + serviceURL,
> serviceClass, new ArrayList<>(), features, null);
> >     Response response = serviceProxy.getSomething();
> >     MyResponse myResponse = response.readEntity(MyResponse.class);
> >
> > It works for CXF 2.7.11, but for CXF 3.1.7 we get following exception:
> > javax.ws.rs.client.ResponseProcessingException: No message body reader has
> been found for class MyResponse, ContentType:
> multipart/mixed;boundary="uuid:e7578110-29f1-4125-848e-dc9230887d45".
> >
> > For CXF 3.1.7 code works without problems if we use Client API to read set 
> > of
> attachments.
> >
> > Do you have any ideas why it works differently? It is not a big issue, 
> > because
> WebClient / Client API works - anyway interesting to understand the 
> difference.
> >
> > Regards,
> > Andrei.
> >
> 
> 
> --
> Sergey Beryozkin
> 
> Talend Community Coders
> http://coders.talend.com/

Reply via email to