2016-04-05 7 views
3

Ich versuche, einen Webservice zu implementieren, der eine JSON-Zeichenfolge akzeptiert und basierend auf dem Schlüssel eine ZIP-Datei abruft.So senden Sie eine Multipart-Antwort mit dem RestEasy-Framework

Dann muss ich die ZIP-Datei und eine JSON-Zeichenfolge in einem mehrteiligen Daten gebündelt senden.

Also im Grunde meiner Antwort soll ein mehrteiliger Objekt enthält zwei Teile

1) .zip file 
2) json string 

Hier ist mein aktueller 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; 
} 

}

Wenn jedoch der Lauf der oben mir nicht in der Lage ist um die mehrteilige Antwort zu holen. Stattdessen erhält eine die folgende Ausnahme

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 
+0

Veröffentlichen Sie weitere Details zu den Abhängigkeiten, die Sie verwenden. –

Antwort

4

Ihr Stack-Trace beschwert, dass es nicht ein ResteasyProviderconstructor finden kann, die nicht introduced bis org.jboss.resteasy:resteasy-jaxrs Version 3.0, um war zu org.jboss.resteasy:resteasy-client zu unterstützen. Sie haben wahrscheinlich eine ältere Version von resteasy-jaxrs irgendwo auf Ihrem Klassenpfad für die Laufzeit. Entfernen Sie es und stellen Sie sicher, dass Ihre implementierte Anwendung die Versionen resteasy-jaxrs und resteasy-client synchronisiert hat.

Verwandte Themen