Thursday, April 14, 2016

How to send Multipart response using RestEasy framework

Leave a Comment

I am trying to implement a webservice that accepts a json string and based on the key it fetches a .zip file.

Then I need to send the .zip file and a json string bundled in a multipart data.

So basically my response should a multipart object containing two parts

1) .zip file 2) json string 

Here is my current code

public class ContentRepo {    @POST @Path("/fetchModel") @Consumes("application/json") @Produces("multipart/mixed") public Response getContent(String strJson) {     Response response = null;     try{         JSONObject objJson = new JSONObject(strJson);         String strAssetName = objJson.getString("assetName");         if(null != strAssetName){             Client client = ClientBuilder.newClient();             ResteasyClient restEasyClient = (ResteasyClient) client;             ResteasyWebTarget target = restEasyClient.target("http://localhost:8091/ContentServer/").path("fetchModel");             response = target.request()                     .post(Entity.entity(getMultiPartData("Car"), MediaType.MULTIPART_FORM_DATA));         }     }catch(Exception ex){         ex.printStackTrace();     }      return response; }  public MultipartFormDataOutput getMultiPartData(String strAssetName){      MultipartFormDataOutput objMultiPartData = new MultipartFormDataOutput();     JSONObject objJson = new JSONObject();      try{          if(strAssetName.equalsIgnoreCase("Car")){             //car assets             try {                 objMultiPartData.addFormData("file", new FileBody(new File("D:/programs/content_server/Car/Car.zip")), MediaType.APPLICATION_OCTET_STREAM_TYPE);                 objJson.put("png", "car");                   objMultiPartData.addFormData("mapping", new StringBody(objJson.toString()), MediaType.APPLICATION_JSON_TYPE);             } catch (UnsupportedEncodingException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }     }catch(Exception ex){         ex.printStackTrace();     }      return objMultiPartData; } 

}

However, when the run the above I am not able to fetch the multipart response. Instead a get the below exception

Caused by: java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory.<init>(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)V at org.jboss.resteasy.client.jaxrs.internal.ClientConfiguration.<init>(ClientConfiguration.java:44) at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:347) at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:52) at javax.ws.rs.client.ClientBuilder.newClient(ClientBuilder.java:114) at com.app.wikicontent.WikitudeContentRepo.getARModel(WikitudeContentRepo.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:155) at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257) at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222) at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211) at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525) ... 25 more 

1 Answers

Answers 1

Your stack trace is complaining that it can't find a ResteasyProvider constructor that was not introduced until org.jboss.resteasy:resteasy-jaxrs version 3.0 in order to support org.jboss.resteasy:resteasy-client. So you probably have an older version of resteasy-jaxrs somewhere on your runtime classpath. Remove it and make sure that your deployed application has its versions of resteasy-jaxrs and resteasy-client in sync.

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment