プロジェクトの小さな部分として、パラメーターとして渡されるいくつかの文字列も必要とするファイルアップロードWebサービスを作成しようとしています...
これまでのところ、ファイル アップロード Web サービスを作成することができました。ただし、入力としてアップロードするファイルのみを渡す場合にのみ機能します。ここで、いくつかのパラメーターも受け入れるように Web サービスを変更しました。しかし、それは私にエラーを与えています:
java.lang.IllegalArgumentException: URLDecoder: エスケープ (%) パターンの 16 進文字が無効です - 入力文字列の場合: "&'"
ここにスタックトレース全体をコピーすることはできませんが、それは無意味だと思います。これは私のWebサービスです:
@POST
@Path("/postdata")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void postData3(List<Attachment> atts, @FormParam("username") final String username, @Context HttpServletRequest request)
{
System.out.println(username);
String home = "/home/yashdosi/s";
for(Attachment att : atts)
{
DataHandler dataHandler = att.getDataHandler();
try
{
InputStream stream = dataHandler.getInputStream();
MultivaluedMap map = att.getHeaders();
OutputStream out = new FileOutputStream(new File(home + "//" + getFileName(map)));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = stream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
stream.close();
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
そして、これは私のJavaクライアントです:
HttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httppost = new HttpPost("http://localhost:8080/fileupload-ws/services/postdata");
FileBody img = new FileBody(new File("/home/yashdosi/1.jpg"));
FileBody html = new FileBody(new File("/home/yashdosi/hotmail.html"));
StringBody contentBody = new StringBody("some.email@gmail.com");
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("image", img);
reqEntity.addPart("html", html);
reqEntity.addPart("username", contentBody);
httppost.setEntity(reqEntity);
//httppost.setHeader("Content-Type", "multipart/form-data");
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);
}
catch(Exception e)
{
e.printStackTrace();
}
finally {
try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}
}
このエラーの原因は何ですか? または、この問題をどのように回避する必要がありますか!?