我休息web服務,需要一個POST梅託德與多消息:的HttpClient和MultipartEntity主場迎戰新澤西多部分和Android
@Path("transferFile")
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_XML)
public String multipartTest(com.sun.jersey.multipart.MultiPart data) {
try {
// get first body part (index 0)
BodyPart bp = multiPart.getBodyParts().get(0);
etc..
現在我嘗試寫一個Java客戶端。我從一個簡單的球衣客戶端開始: view plaincopy to clipboardprint?
MultiPart multiPart = new MultiPart();
multiPart.bodyPart(new BodyPart(wavestream,MediaType.APPLICATION_OCTET_STREAM_TYPE));
Client c = Client.create();
WebResource r = c.resource("http://127.0.0.1:8080/webapp:);
response=r.path("transferFile").type(MediaType.MULTIPART_FORM_DATA).accept(MediaType.APPLICATION_XML).post(String.class, multiPart);
這很好用 - 一切正常。不過,我需要這個客戶端在Android上工作,並且在該平臺上使用球衣時遇到了麻煩。所以我用正常的方式在Android上發送多消息:
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter("http.socket.timeout", new Integer(90000)); // 90 second
HttpPost httpPost = new HttpPost("http://127.0.0.1:8080/webapp/transferFile");
httpPost.setHeader("Content-Type", MediaType.MULTIPART_FORM_DATA);
//tried with and without base64
byte [] encodedWavestream = Base64.encodeBytesToBytes(wavestream);
InputStream ins = new ByteArrayInputStream(encodedWavestream);
InputStreamBody body = new InputStreamBody(ins, "test");
int send = ins.available();
MultipartEntity requestContent = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
requestContent.addPart("stream", body);
httpPost.setEntity(requestContent);
HttpResponse Response = client.execute(httpPost);
的這給來自服務器的響應煩人:
HTTP Status 400 - Bad Request
The request sent by the client was syntactically incorrect (Bad Request).
我檢查服務器日誌文件,但裏面空空如也。所以我不知道這個錯誤的起源是什麼。我寫了一個簡單的HTML頁面,其中包含一個公式和'multipart/form-data'內容類型,它也可以工作!從soapUI自動生成的請求也適用!爲什麼我的客戶不工作?任何人都可以幫忙嗎?
我假設你正在使用的Android仿真器和應用程序服務器位於同一主機上。在這種情況下,您必須使用10.0.2.2而不是本地主機或127.0.0.1來訪問主機系統!否則,你指向虛擬(模擬)設備本身。 – Lars 2012-08-16 20:32:32