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.
0 comments:
Post a Comment