2016-07-22 25 views
1

Hallo, ich arbeite in Upload-API in meinem Projekt. Ich bin in der Lage, Daten zu senden und Antwort mit Jersy Client zu erhalten.Wie man multipart/formData im Upload-Datei-Post-Aufruf im Apache-CXF-Client sendet?

Ich bekomme 200 als Antwort. Hier ist dieser Code.

final Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build(); 
    client.register(new LoggingFilter()); 
    FileDataBodyPart filePart = new FileDataBodyPart("file", new File("/Users/rasaminathan/Desktop/test.txt")); 
    FormDataMultiPart formDataMultiPart = new FormDataMultiPart(); 
    FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart.field("param1", "paramValue") 
               .field("param2", "value") 
               .bodyPart(filePart); 
    final WebTarget target = client.target("http://URL:8000/apiPath"); 
    final Response response = target.request().post(Entity.entity(multipart, multipart.getMediaType())); 

Und das ist das Protokoll, das ich bekam.

Jul 22, 2016 12:15:14 PM org.glassfish.jersey.filter.LoggingFilter log 
    INFO: 1 * Sending client request on thread main 
    1 > POST http://URL:8000/apiPath 
    1 > Content-Type: multipart/form-data 

    Jul 22, 2016 12:15:15 PM org.glassfish.jersey.filter.LoggingFilter log 
    INFO: 1 * Client response received on thread main 
    1 < 200 
    1 < Content-Length: 203 
    1 < Content-Type: application/json 
    1 < Date: Fri, 22 Jul 2016 06:45:14 GMT 
    1 < X-Powered-By: Servlet/2.5 JSP/2.1 

Aber in meinem Projekt sollen wir CXF verwenden. Ich habe das gleiche mit CXF Webclient versucht. Aber ich bekomme "401" Unauthorized Error. Hier ist der Code.

WebClient client = WebClient.create("http://URL:8000"); 
    String path = "apiPath"; 
    client.type(MediaType.MULTIPART_FORM_DATA) 
      .path(path); 

    ClientConfiguration config = WebClient.getConfig(client); 
    config.getInInterceptors().add(new LoggingInInterceptor()); 
    config.getOutInterceptors().add(new LoggingOutInterceptor()); 

    List<Attachment> atts = new LinkedList<Attachment>(); 
    atts.add(new Attachment("file", "application/octet-stream", new ByteArrayInputStream("testContent".getBytes()))); 
    atts.add(new Attachment("param1","text/plain","paramValue")); 
    atts.add(new Attachment("param2","text/plain","value")); 
    MultipartBody body = new MultipartBody(atts); 
    Response response= client.post(body); 

Und das ist das Protokoll, das ich habe.

 Jul 22, 2016 12:23:41 PM org.apache.cxf.interceptor.LoggingOutInterceptor 
     INFO: Outbound Message 
     --------------------------- 
     ID: 1 
     Address: http://URL:8000/apiPath 
     Http-Method: POST 
     Content-Type: multipart/form-data; boundary="uuid:14597725-d376-4643-92f9-7a4a64ae1054" 
     Headers: {Accept=[*/*]} 
     Payload: --uuid:14597725-d376-4643-92f9-7a4a64ae1054 
     Content-Type: application/octet-stream 
     Content-Transfer-Encoding: binary 
     Content-ID: <file> 

     testContent 
     --uuid:14597725-d376-4643-92f9-7a4a64ae1054 
     Content-Type: text/plain 
     Content-Transfer-Encoding: binary 
     Content-ID: <param1> 

     paramValue 
     --uuid:14597725-d376-4643-92f9-7a4a64ae1054 
     Content-Type: text/plain 
     Content-Transfer-Encoding: binary 
     Content-ID: <param2> 

     value 
     -------------------------------------- 
     Jul 22, 2016 12:23:42 PM org.apache.cxf.interceptor.LoggingInInterceptor 
     INFO: Inbound Message 
     ---------------------------- 
     ID: 1 
     Response-Code: 401 
     Encoding: UTF-8 
     Content-Type: text/html; charset=UTF-8 
     Headers: {Content-Length=[46], content-type=[text/html; charset=UTF-8], Date=[Fri, 22 Jul 2016 06:53:42 GMT], X-Powered-By=[Servlet/2.5 JSP/2.1]} 
     -------------------------------------- 

Ich denke, die Params "Param1, Param2" Werte nicht richtig gesendet. Deshalb erhalte ich 401 Fehler, denke ich. Sendet ich Daten im CXF Webclient korrekt? Wenn nicht, bitte helfen Sie mir, den Code zu korrigieren

Antwort

1

Festlegen der Inhaltsdisposition in der Anlage half, das Problem zu lösen. Ich fand Lösung here.

Wie ich Param1 erraten, Param2 Werte Server nicht erreicht.

 List<Attachment> atts = new LinkedList<Attachment>(); 
     ContentDisposition cd = new ContentDisposition("form-data; name=\"file\";filename=\"test.txt\""); 
     atts.add(new Attachment("file", new ByteArrayInputStream("testContent".getBytes()),cd)); 
     ContentDisposition cd1 = new ContentDisposition("form-data; name=\"param1\";"); 
     atts.add(new Attachment("param1",new ByteArrayInputStream("paramValue".getBytes()),cd1)); 
     ContentDisposition cd2 = new ContentDisposition("form-data; name=\"param2\";"); 
     atts.add(new Attachment("param2",new ByteArrayInputStream("value".getBytes()),cd1)); 
     MultipartBody body = new MultipartBody(atts); 
     Response response= client.post(body); 

Jetzt bin ich immer Erfolg Antwort