nested exception is feign.FeignException: stream is closed reading GET

020-09-17 14:35:04.465 ERROR [web-a,,,] 216 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.FeignException: stream is closed reading GET http://localhost:8180/product/processA] with root cause

java.io.IOException: stream is closed at java.base/sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.ensureOpen(HttpURLConnection.java:3468) at java.base/sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3473) at java.base/java.io.FilterInputStream.read(FilterInputStream.java:83) at java.base/java.io.PushbackInputStream.read(PushbackInputStream.java:136) at org.springframework.web.client.MessageBodyClientHttpResponseWrapper.hasEmptyMessageBody(MessageBodyClientHttpResponseWrapper.java:101) at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:87) at org.springframework.cloud.openfeign.support.SpringDecoder.decode(SpringDecoder.java:60) at com.github.zengfr.conuniframework.cloud.service.config.FeignConfiguration$CustomResponseEntityDecoder.decode(FeignConfiguration.java:108) at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:176) at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:140) at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78) at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) at com.sun.proxy.$Proxy259.processA(Unknown Source) at com.github.zengfr.conuniframework.cloud.web.controller.TestController.test2(TestController.java:34) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Client:------------------------------------------------------------------------------------------- @FeignClient(value = "service-a", url = "http://localhost:8180", path = "/product", configuration = FeignConfiguration.class) public interface ProductClient { @GetMapping(value = "/") public String process();

@GetMapping(value = "/processA")
public String processA();

@GetMapping(value = "/processB")
public String processB();

}

Api:-------------------------------------------------------------------------------------------

@RefreshScope // @EnableOAuth2Resource @RestController @RequestMapping(value = "/product") public class ProductController { @Autowired DiscoveryClient discoveryClient;

@GetMapping(value = "/") public String process() { List serviceInstances = discoveryClient.getInstances("service-b"); ServiceInstance serviceInstance = serviceInstances.get(0); return String.format( "%s,%s,%s,%s", serviceInstance.getServiceId(), serviceInstance.getHost(), serviceInstance.getPort(), "Hello"); }

@GetMapping(value = "/processA") public String processA() { return "processA"; }

@GetMapping(value = "/processB") public String processB() { return "processB"; } }

Comment From: songliang

Why is this question closed?Is there any solution?

Comment From: GenusLi

@songliang "Could you check if there's a response interceptor that implements reading the entirety of the result returned from downstream services in the stream, causing the stream's cursor to end up at the tail? I just encountered this issue myself and during troubleshooting, I discovered that one of my response interceptors was reading the response result beforehand, leading to the problem."