JAWSアプリが失敗した場合に、http経由でサーバーにログファイルを送信するコードを書いています。これをテストするために、リクエストを受信して処理するサーブレットをセットアップしました。
私のクライアントコードは、ApacheHttpClient4.2の例からのものです。
{
HttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httppost = new HttpPost("http://localhost:8080/testServer/testserv/a");
FileBody bin = new FileBody(new File("XXXs"));
StringBody comment = new StringBody("A binary file of some kind");
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("bin", bin);
reqEntity.addPart("comment", comment);
httppost.setEntity(reqEntity);
System.out.println("executing request " + httppost.getRequestLine());
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (resEntity != null) {
System.out.println("Response content length: " + resEntity.getContentLength());
}
EntityUtils.consume(resEntity);
} finally {
try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}
}
}
{
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://localhost:8080/testServer/testserv/a");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("username", "vip"));
nvps.add(new BasicNameValuePair("password", "secret"));
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse response2 = httpclient.execute(httpPost);
try {
System.out.println(response2.getStatusLine());
HttpEntity entity2 = response2.getEntity();
// do something useful with the response body
// and ensure it is fully consumed
EntityUtils.consume(entity2);
} finally {
httpPost.releaseConnection();
}
}
私のサーバー側はApacheFileUploadのチュートリアルを使用しています
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
try {
List<FileItem> items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
File uploadedFile = new File("XXX");
try {
item.write(uploadedFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(uploadedFile.getAbsolutePath());
}
} catch (FileUploadException e) {
System.out.println("File Upload Exception");
e.printStackTrace();
}
} else{
System.out.println("Not multi part");
System.out.println(request.getParameterMap());
}
JBossAS7を使用しています。FileEntity
結果は、リクエストにを追加しない場合MultiPartEntity
、リクエストが処理されるということです。それ以外の場合は、FileUpload例外がスローされます。
Processing of multipart/form-data request failed. Stream ended unexpectedly
私はここでJBossや他のツールを使用した経験があまりないので、あなたの助けと忍耐に大いに感謝します。