マルチパートメッセージで POST メソッドを受け取る残りの Web サービスがあります。
@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 クライアントを作成しようとしています。シンプルなジャージー クライアントから始めました。
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 で動作する必要があり、そのプラットフォームで jersey を使用するのに問題があります。したがって、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).
サーバーのログ ファイルを確認しましたが、何もありません。したがって、このエラーの原因はわかりません。投稿式と 'multipart/form-data' content-type を使用して単純な html ページを作成しましたが、これも機能します。soapUI からの自動生成されたリクエストも機能します。クライアントが機能しないのはなぜですか? 誰でも助けることができますか?