Still trying to get multipart/form-data upload to work with a Resteasy
client ...

After some experimenting, I now found out that you can add an
@PartType annotation to the client's Map parameter, like this:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("wherever")
Object doUpload(@PartType(MediaType.APPLICATION_OCTET_STREAM)
Map<String, DataSource> parts);

And then use this as:

Map<String, DataSource> parts = new HashMap<String, DataSource>();
parts.put("file", new FileDataSource(new File("mypic.jpg")));
Object response = client.doUpload(parts);

Resteasy will then use
org.jboss.resteasy.plugins.providers.multipart.MapMultipartFormDataWriter.

That way, however, two important things are missing from the HTTP
request (compared to a direct upload from a browser): the Content-Type
is hard-wired to application/octet-stream because of the annotation
and the mime part containing the file data does not have a
Content-Disposition header with a "filename" parameter with the
DataSource's name (in this example, this should be
Content-Disposition: attachment; filename="mypic.jpg").

Might this get fixed or do you suggest coding the upload with a
hand-crafted request?

Jay


> Hi,
>
> how do I parameterize an interface method for a POST call that
> consumes a multipart/form-data, for use with use
> org.jboss.resteasy.client.ProxyFactory?
>
> The server implements something like this:
>
> @POST
> @Consumes(MediaType.MULTIPART_FORM_DATA)
> @Produces(MediaType.APPLICATION_JSON)
> @Path("wherever")
> public Response doFooImpl(MultipartFormDataInput object) {
> List<InputPart> items = object.getFormDataMap().get("ITEM"); /* ... */
>  }
>
> In the client, I tried this:
>
> @POST
> @Consumes(MediaType.MULTIPART_FORM_DATA)
> @Produces(MediaType.APPLICATION_JSON)
> @Path("wherever")
> Object doFoo(Map<String, DataSource> parts);
>
> But when I run this, the client throws a
>
> java.lang.RuntimeException: could not find writer for content-type
> multipart/form-data type: java.util.Map
>
> Would it be better to use a javax.mail.Multipart as a client-side
> parameter? Or 
> org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInputImpl
> (if that is an "official" API class)?
>
> Thanks, Jay
>

------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
Resteasy-users mailing list
Resteasy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/resteasy-users

Reply via email to