앱단에서 서버와 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

Posted by 에코지오
,