クライアントコード:
FormDataBodyPart f = new FormDataBodyPart(...);
FormDataBodyPart f2 = new FormDataBodyPart(...);
MultiPart multiPart = new MultiPart();
multiPart.bodyPart(f);
multiPart.bodyPart(f2);
//Execute Call
WebResource wr = resource().path(Url.X);
wr = wr.queryParam("subjectId", "value_something");
ClientResponse response = wr.type(MediaType.MULTIPART_FORM_DATA).post(ClientResponse.class, multiPart);
サーバーコード:
String id = req.getParameter("subjectId");
req は HttpServletRequest です - 春によって注入されます
@Context
protected HttpServletRequest httpServletRequest;
問題: 一部の環境では、id
取得されたパラメーターが null です。フィルターでは、while リクエスト パラメーター マップを出力してログインします。これは単に空です。
同じクライアントを実行しても異なる環境でも結果が異なるため、問題はサーバー側にあると考えられます。
一部のサーバーでは、すべてのクライアントからパラメーターが常に空であり、他の環境では、すべてのクライアントからパラメーターが常に存在します。
それで... Tomcat側の問題のように見えますが...どこで?
更新:サーバー上のwiresharkからの結果:
[Malformed Packet: MIME multipart]
Expert Info (Error/Malformed): Malformed Packet (Exception occurred)
Message: Malformed Packet (Exception occurred)
エラーにもかかわらず、一部のサーバーではパラメーターが存在し、他のサーバーではパラメーターが欠落しています。
更新: AccessLogValve によってログに記録された要求には、パラメーター
127.0.0.1 が含まれています - - [26/Nov/2012:03:04:58 -0800] "POST /api/get-retrieve?
x =y HTTP/1.1" 200 16
おそらく、Tomcat のどこかに問題があり、これらのパラメータが破棄されています...