[Jersey] Trying to upload a file using the client libraries

From: adam_ruggles <>
Date: Sun, 24 Apr 2011 11:01:10 -0700 (PDT)

I'm trying to upload a file and other form data using multipart/form-data
client with Jersey. I'm uploading to a REST web service also using Jersey.
Here is the server code:

    public String create(@FormDataParam("file") InputStream file,
            @FormDataParam("file") FormDataContentDisposition fileInfo,
            @FormDataParam("name") String name,
            @FormDataParam("description") String description) {
        Ingredient ingredient = new Ingredient();
        // TODO save the file.
        try {
            JSONObject json = new JSONObject();
            try {
            } catch (final InvalidParameterException ex) {
                logger.log(Level.INFO, ex.getMessage());
                json.put("result", false);
                json.put("error", ex.getMessage());
                return json.toString();
            } catch (final GoodDrinksException ex) {
                logger.log(Level.WARNING, null, ex);
                json.put("result", false);
                json.put("error", ex.getMessage());
                return json.toString();
            json.put("ingredient", JsonUtil.ingredientToJSON(ingredient));
            return json.put("result", true).toString();
        } catch (JSONException ex) {
            logger.log(Level.SEVERE, null, ex);
            return "{\"result\",false}";

I've tested the server code using a basic html form on my desktop and it
works fine. The problem seems to be in the client. Here is the relevant
client code.

    ClientConfig config = new DefaultClientConfig();
    client = Client.create(config);
    client.addFilter(new LoggingFilter());
    webResource =
    FormDataMultiPart fdmp = new FormDataMultiPart();
    if (file != null) {
        fdmp.bodyPart(new FileDataBodyPart("file", file,
    fdmp.bodyPart(new FormDataBodyPart("name", ingredient.getName()));
    fdmp.bodyPart(new FormDataBodyPart("description",

    ClientResponse response =
    String string = response.getEntity(String.class);
    logger.log(Level.INFO, "response: {0}", string);
I'm getting a 400 response from the server "The request sent by the client
was syntactically incorrect"

Here is the message that is spit out of the logger, this one is without a
file to keep the output brief:

    1 > POST http://localhost:8080/webapp/resources/ingredient
    1 > Content-Type: multipart/form-data
    1 >
    Content-Type: text/plain
    Content-Disposition: form-data;name="name"
    Content-Type: text/plain
    Content-Disposition: form-data;name="description"

What am I doing wrong in the client to get this working correctly?

View this message in context:
Sent from the Jersey mailing list archive at