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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fixiert es durch das ersetzen MediaType.APPLICATION_OCTET_STREAM und InputStream stream, wie unten
InformationsquelleAutor Karthik Prasad