DefaultHttpClient#execute 不具合
ええと、以下な実装なんですが
InputStream is = httpclient.execute(method,
new ResponseHandler<InputStream>() {
@Override
public InputStream handleResponse(HttpResponse response)
throws ClientProtocolException, IOException {
switch (response.getStatusLine().getStatusCode()) {
case HttpStatus.SC_OK:
return response.getEntity().getContent();
default:
throw new RuntimeException("HTTP Status is " +
response.getStatusLine().getStatusCode());
}
}
});戻った InputStream から BufferedReader を生成して読み込むあたりで IOException が発生している模様。どうも response.getEntity().getContent() の戻りがアレらしい。
で、以下な部分を
case HttpStatus.SC_OK:
return response.getEntity().getContent();こうしてみるとレスポンスが取得できているご様子。
case HttpStatus.SC_OK:
return EntityUtils.toString(response.getEntity(), "UTF-8");あらららこれ何スか?
つうか以前の実装は何故に動いているのかがスデに謎。JSONFunction もこれ方式にして修正してみます。
無事
動作を確認。つうかこの実装は某所に残ったままなんだけど大丈夫なのかな。
つーことで
JSONFunction は以下なカンジになってます。試験未実施。
package jp.shuri.yamanetoshi.json;
import java.io.IOException;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class JSONFunctions {
private static String getHTTPResponseBodyString(HttpRequestBase request,
DefaultHttpClient httpclient)
throws IOException, ClientProtocolException, RuntimeException {
return httpclient.execute(request,
new ResponseHandler<String>() {
@Override
public String handleResponse(HttpResponse response)
throws ClientProtocolException, IOException {
switch (response.getStatusLine().getStatusCode()) {
case HttpStatus.SC_OK:
return EntityUtils.toString(response.getEntity(), "UTF-8");
default:
throw new RuntimeException("HTTP Status is " +
response.getStatusLine().getStatusCode());
}
}
});
}
public static String GETfromURL(String url, DefaultHttpClient httpclient)
throws IOException, ClientProtocolException, RuntimeException {
HttpGet request = new HttpGet(url);
return getHTTPResponseBodyString(request, httpclient);
}
public static String POSTfromURL(String url, DefaultHttpClient httpclient,
List<NameValuePair> params)
throws IOException, ClientProtocolException, RuntimeException {
HttpPost request = new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(params));
return getHTTPResponseBodyString(request, httpclient);
}
public static String PUTfromURL(String url, DefaultHttpClient httpclient,
List<NameValuePair> params)
throws IOException, ClientProtocolException, RuntimeException {
HttpPut request = new HttpPut(url);
request.setEntity(new UrlEncodedFormEntity(params));
return getHTTPResponseBodyString(request, httpclient);
}
public static String DELETEfromURL(String url, DefaultHttpClient httpclient)
throws IOException, ClientProtocolException, RuntimeException {
return httpclient.execute(new HttpDelete(url),
new ResponseHandler<String>() {
@Override
public String handleResponse(HttpResponse response)
throws ClientProtocolException, IOException {
switch (response.getStatusLine().getStatusCode()) {
case HttpStatus.SC_OK:
return null;
default:
throw new RuntimeException("HTTP Status is " +
response.getStatusLine().getStatusCode());
}
}
});
}
}