앱단에서 서버와 java.net.HttpURLConnection을 이용해서 POST 방식으로 통신하는 경우에 가끔가다 java.io.EOFException 에러가 발생하더군요.
Caused by: java.io.EOFException
at libcore.io.Streams.readAsciiLine(Streams.java:203)
at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:560)
at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813)
at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486)
at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:49)
at org.springframework.http.client.SimpleClientHttpResponse.getStatusCode(SimpleClientHttpResponse.java:55)
at org.springframework.web.client.DefaultResponseErrorHandler.hasError(DefaultResponseErrorHandler.java:46)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:476)
주로 삼성 갤럭시류의 폰에서 발생하는데, 이 문제 때문에 엄청 골치가 아팠습니다.
구글링해보면 gzip 압축문제 때문이라고 하는 사람도 있고 여러가지 해법이 있었지만 현재까지는 http.keepAlive를 끄는 것이 맞는듯합니다.
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
... ...
patchEOFException();
... ...
}
private void patchEOFException() {
System.setProperty("http.keepAlive", "false");
}
* 참고 사이트
http://stackoverflow.com/questions/13182519/spring-rest-template-usage-causes-eofexception
https://jira.springsource.org/browse/ANDROID-102
http://stackoverflow.com/questions/12280629/nullpointerexception-when-using-spring-resttemplate-in-android
http://android-developers.blogspot.fr/2011/09/androids-http-clients.html
http://stackoverflow.com/questions/3352424/httpurlconnection-openconnection-fails-second-time
'Android' 카테고리의 다른 글
greenrobot EventBus를 써보니... (0) | 2013.04.26 |
---|---|
저희회사 앱에 사용된 라이브러리 (0) | 2013.04.18 |
[AOP] 아키텍처 규칙위반 체크 예제 (0) | 2013.04.17 |
안드로이드 쓰레드 사용 총정리 (0) | 2013.04.15 |
AndroidAnnotations의 @Background, @UiThread 어노테이션 흉내내기 (0) | 2012.11.07 |