Announcement Announcement Module
Collapse
No announcement yet.
Intermittent SocketException with HttpClient/RestTemplate Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • Intermittent SocketException with HttpClient/RestTemplate

    I have a strange issue that I'm having trouble figuring out. I have a RestTemplate with a HttpClient for security credentials. Everything works fine and I can make 100+ calls in a row without issue. However, after I have made calls through the RestTemplate and then let it sit idle for 20 or 30 minutes, the next time I try to make a call through it I get a socket exception for connection reset. Then, when I try to call again after that it'll start working again. This happens across multiple servers in multiple environments.

    I can't tell if the issue is on the server side of where I am calling out to, or if it's something with my HttpClient or RestTemplate setup. Any ideas would be greatly appreciated.

    ApplicationContext.xml:
    Code:
    <!-- HTTP Security Configuration -->
         <bean id="httpClientParams" class="org.apache.commons.httpclient.params.HttpClientParams">
            <property name="authenticationPreemptive" value="true"/>
            <property name="connectionManagerClass"
                      value="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"/>
        </bean>
        <bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
            <constructor-arg ref="httpClientParams"/>
            <property name="state" ref="httpStateWithCredentials"/>
        </bean>
        <bean id="httpStateWithCredentials" class="com.....">
        	<property name="credentials" ref="aCredentials"/>
        </bean>
        <bean id="aCredentials" class="org.apache.commons.httpclient.UsernamePasswordCredentials">
            <constructor-arg value="${a.username}"/>
            <constructor-arg value="${a.password}"/>
        </bean>
        <bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory">
            <constructor-arg ref="httpClient"/>
        </bean>
    
        <!-- REST TEMPLATES -->
        <bean id="aRestTemplate" class="org.springframework.web.client.RestTemplate" >
        	<constructor-arg ref="httpClientFactory"/>
        </bean>

    Stack Trace:

    Code:
    SEVERE org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet rest threw exception
     java.net.SocketException: Connection reset
            at java.net.SocketInputStream.read(SocketInputStream.java:168)
            at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
            at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
            at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
            at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
            at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
            at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413)
            at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
            at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
            at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
            at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
            at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
            at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
            at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
            at org.springframework.http.client.CommonsClientHttpRequest.executeInternal(CommonsClientHttpRequest.java:85)
            at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:46)
            at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:49)
            at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:446)
            at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:409)
            at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:385)
            at com....
            at com....
            at com....
            at sun.reflect.GeneratedMethodAccessor1654.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
            at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
            at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
            at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
            at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at com....
            at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at com....
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
Working...
X