Wie die post-Datei als Anlage in die CXF JAX-RS

Ich versuche, die post eine csv-Datei.Dateien, die gezippt per gzip mit cxf und jaxrs.

Unten ist die server-Seite code.

import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.zip.GZIPInputStream;

import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;

import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.jaxrs.ext.multipart.Multipart;

import org.kp.common.LogConstants;
 import org.kp.util.LogHelper;

@Path("TestData")
 public class TestDataResource {

  @POST
  @Produces("text/xml")
  @Consumes(MediaType.APPLICATION_OCTET_STREAM)
  public Response postTestData( final @Multipart InputStream stream,
    @Context HttpServletRequest request) {

    boolean result = true;

    LogHelper.setLog(LogConstants.INFO, request.getContentType());
    LogHelper.setLog(LogConstants.INFO, request.getCharacterEncoding());
    LogHelper.setLog(LogConstants.INFO, request.getHeader("charset"));
    LogHelper.setLog(LogConstants.INFO, request.getHeader("Content-Encoding"));
    LogHelper.setLog(LogConstants.INFO, request.getHeader("Content-Length"));
    LogHelper.setLog(LogConstants.INFO, request.getHeader("Transfer-Encoding"));


    writeToFile(stream);
    return Response.status(result == true ? Status.OK : Status.EXPECTATION_FAILED).build();

  }

 private void writeToFile(InputStream inputStream) {

  OutputStream outputStream = null;

  try {

   GZIPInputStream gzis = new GZIPInputStream(inputStream);
    //write the inputStream to a FileOutputStream
    outputStream = new FileOutputStream(new File(
      "d:\\temp\\test.csv"));
    IOUtils.copy(gzis, outputStream);
   } catch (IOException ex) {
    ex.printStackTrace();
   }
   finally{
    try {
     outputStream.close();
    } catch (IOException e) {
     //TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }

}

Und der client seitige code steht unten.

import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.util.LinkedList;
 import java.util.List;

import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;

import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
 import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition;


 public class kpTest {

 public static void main(String[] str) throws FileNotFoundException{

  final String  URL = "http://localhost:8080/kp_services/services/kpservices/TestData";

  WebClient client = WebClient.create(URL);

  //client.type(MediaType.APPLICATION_OCTET_STREAM);
   client.type(MediaType.APPLICATION_OCTET_STREAM);
   ContentDisposition cd = new ContentDisposition("attachment;filename=test.csv.gz");
   List<Attachment> atts = new LinkedList<Attachment>();
   InputStream stream = new FileInputStream("D:\\kp\\test.csv.gz");
   Attachment att = new Attachment("root", stream, cd);
   atts.add(att);
   //Response response = client.post(new MultipartBody(att));

  //or just post the attachment if it's a single part request only
  //Response response = client.post(atts);

  //or just use a file
   //client.post(new File("D:\\kp\\test.csv"));

   Response response = client.post(new File("D:\\kp\\test.csv.gz"));
   System.out.println(response.getStatus());
  }
 }

Dem oben genannten Programm einwandfrei funktioniert.

Response response = client.post(new File("D:\\kp\\test.csv.gz"));

Vom obigen code, was ich glaube, ist, dass ich nicht senden Sie die Datei als Anlage eher schicke ich es als input-stream, mit url-codiert.

Wenn ich versuche, den code zu modifizieren, kommentieren die oben genannte Zeile und kommentieren Sie

Response response = client.post(atts);

Bekomme ich Fehlermeldung, dass Kein message-body-writer gefunden wird. Ich auch versuchen, ändern Sie die server-side-code aus @Multipart InputStream stream Liste Anhang. Trotzdem habe ich gate-die gleichen Fehler. Wie muss ich hinzufügen-Anbieter für den message-body-writer. Können einige auf helfen Sie mir bei der Behebung des Problems.

InformationsquelleAutor Karthik Prasad | 2013-08-09

Schreibe einen Kommentar