Java Spring Boot:每个请求一次筛选器->;路径为[]的上下文中Servlet[dispatcherServlet]的Servlet.service()引发异常
我已使用以下代码实现了每个请求一次过滤器:Java Spring Boot:每个请求一次筛选器->;路径为[]的上下文中Servlet[dispatcherServlet]的Servlet.service()引发异常,java,spring,spring-boot,tomcat,filter,Java,Spring,Spring Boot,Tomcat,Filter,我已使用以下代码实现了每个请求一次过滤器: protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { httpRequestWrapper = Optional.ofNullable(new HttpRequestWrapper(reques
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException
{
httpRequestWrapper = Optional.ofNullable(new HttpRequestWrapper(request));
if(httpRequestWrapper.isPresent())
{
Message message = objectMapper.readValue(httpRequestWrapper.get().getInputStream(), Message.class);
try
{
boolean isAuthenticatedHeader = false;
RabbitMq.rabbitMqLog(canonicalMessage);
isAuthenticatedHeader = authenticateAuthHeader(request.getHeader(Constants.AUTH), request.getHeader(Constants.PASS));
if (isAuthenticatedHeader)
{
Logger.logInfo(new LogDetails(CLASSNAME), "Aunthentication successful !!!! ");
if (Filter.isInValid().test(canonicalMessage))
{
throw new BadRequestException();
}
}
else
{
Logger.logError(new LogDetails(CLASSNAME), " Aunthentication not successful. Please check. ");
throw new NotAuthorizedException("Unauthorized Access");
}
Map<String, String> headers = Collections.list(((HttpServletRequest) request).getHeaderNames()).stream().collect(Collectors.toMap(h -> h, request::getHeader));
headers.updateHeaders(headers);
filterChain.doFilter(httpRequestWrapper.get(), response);
RabbitMq.rabbitMqLog();
}
catch (Exception e)
{}
}
我尝试了以下几点:
if (request.getMethod().equals("POST") && (new AntPathRequestMatcher("/transactions/v1/enrichments").matches(request))) {
httpRequestWrapper = Optional.ofNullable(new HttpRequestWrapper(request));
if(httpRequestWrapper.isPresent())
{
CanonicalMessage canonicalMessage = objectMapper.readValue(httpRequestWrapper.get().getInputStream(), CanonicalMessage.class);
try
{
boolean isAuthenticatedHeader = false;
eventLogRawDataServiceImpl.eventLogExecution(canonicalMessage);
isAuthenticatedHeader = authenticateAuthHeader(request.getHeader(Constants.AUTHORIZATION), request.getHeader(Constants.DEPLOYMENT_TOKEN));
if (isAuthenticatedHeader)
{
ondotLogger.logInfo(new LogDetails(CLASSNAME), "Aunthentication successful !!!! ");
if (CloudServerFilter.isInValid().test(canonicalMessage))
{
throw new BadRequestException();
}
}
else
{
ondotLogger.logError(new LogDetails(CLASSNAME), " Aunthentication not successful. Please check. ");
throw new NotAuthorizedException("Unauthorized Access");
}
Map<String, String> headers = Collections.list(((HttpServletRequest) request).getHeaderNames()).stream().collect(Collectors.toMap(h -> h, request::getHeader));
cloudServerHeaders.updateHeaders(headers);
filterChain.doFilter(httpRequestWrapper.get(), response);
responseHandler.eventLoggerForResponse();
}
catch (Exception e)
{}
}
}else
{
filterChain.doFilter(request, response);
}
}
例外情况:
The Exception comes after wards :
018-08-01 15:26:33,612 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - Servlet 'dispatcherServlet' configured successfully
2018-08-01 15:26:33,628 DEBUG [http-nio-8889-exec-1] filter.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:33,647 DEBUG [http-nio-8889-exec-1] filter.OrderedRequestContextFilter - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:33,648 ERROR [http-nio-8889-exec-1] [/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@34378acb; line: 1, column: 0]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3854)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3799)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2924)
at com.ondot.cloudserver.handlers.CloudServerFilter.doFilterInternal(CloudServerFilter.java:57)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2018-08-01 15:26:33,657 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error]
2018-08-01 15:26:33,661 DEBUG [http-nio-8889-exec-1] annotation.RequestMappingHandlerMapping - Looking up handler method for path /error
2018-08-01 15:26:33,667 DEBUG [http-nio-8889-exec-1] annotation.RequestMappingHandlerMapping - Returning handler method [public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)]
2018-08-01 15:26:33,667 DEBUG [http-nio-8889-exec-1] support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'basicErrorController'
2018-08-01 15:26:33,667 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - Last-Modified value for [/error] is: -1
2018-08-01 15:26:33,762 DEBUG [http-nio-8889-exec-1] annotation.HttpEntityMethodProcessor - Written [{timestamp=Wed Aug 01 15:26:33 IST 2018, status=500, error=Internal Server Error, exception=com.fasterxml.jackson.databind.JsonMappingException, message=No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@34378acb; line: 1, column: 0], path=/health/}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6c6cb480]
2018-08-01 15:26:33,771 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2018-08-01 15:26:33,771 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - Successfully completed request
2018-08-01 15:26:34,274 DEBUG [http-nio-8889-exec-3] filter.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:34,275 DEBUG [http-nio-8889-exec-3] filter.OrderedRequestContextFilter - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:34,275 ERROR [http-nio-8889-exec-3] [/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@281c1fb0; line: 1, column: 0]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3854)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3799)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2924)
at com.ondot.cloudserver.handlers.CloudServerFilter.doFilterInternal(CloudServerFilter.java:57)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2018-08-01 15:26:34,282 DEBUG [http-nio-8889-exec-3] servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error]
2018-08-01 15:26:34,283 DEBUG [http-nio-8889-exec-3] annotation.RequestMappingHandlerMapping - Looking up handler method for path /error
2018-08-01 15:26:34,284 DEBUG [http-nio-8889-exec-3] annotation.RequestMappingHandlerMapping - Returning handler method [public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)]
2018-08-01 15:26:34,284 DEBUG [http-nio-8889-exec-3] support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'basicErrorController'
2018-08-01 15:26:34,284 DEBUG [http-nio-8889-exec-3] servlet.DispatcherServlet - Last-Modified value for [/error] is: -1
2018-08-01 15:26:34,289 DEBUG [http-nio-8889-exec-3] annotation.HttpEntityMethodProcessor - Written [{timestamp=Wed Aug 01 15:26:34 IST 2018, status=500, error=Internal Server Error, exception=com.fasterxml.jackson.databind.JsonMappingException, message=No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@281c1fb0; line: 1, column: 0], path=/info}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6c6cb480]
2018-08-01 15:26:34,289 DEBUG [http-nio-8889-exec-3] servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2018-08-01 15:26:34,289 DEBUG [http-nio-8889-exec-3] servlet.DispatcherServlet - Successfully completed request
2018-08-01 15:26:34,833 DEBUG [cloudServerDbConnectionPool housekeeper] pool.HikariPool - cloudServerDbConnectionPool - Before cleanup stats (total=21, active=0, idle=21, waiting=0)
2018-08-01 15:26:34,834 DEBUG [cloudServerDbConnectionPool housekeeper] pool.HikariPool - cloudServerDbConnectionPool - After cleanup stats (total=20, active=0, idle=20, waiting=0)
2018-08-01 15:26:34,834 DEBUG [cloudServerDbConnectionPool connection closer] pool.PoolBase - cloudServerDbConnectionPool - Closing connection oracle.jdbc.driver.T4CConnection@5ac8cbc1: (connection has passed idleTimeout)
2018-08-01 15:26:53,477 DEBUG [http-nio-8889-exec-2] filter.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:53,478 DEBUG [http-nio-8889-exec-2] filter.OrderedRequestContextFilter - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:53,478 ERROR [http-nio-8889-exec-2] [/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@76d11ae3; line: 1, column: 0]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3854)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3799)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2924)
at com.ondot.cloudserver.handlers.CloudServerFilter.doFilterInternal(CloudServerFilter.java:57)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2018-08-01 15:26:53,480 DEBUG [http-nio-8889-exec-2] servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error]
2018-08-01 15:26:53,480 DEBUG [http-nio-8889-exec-2] annotation.RequestMappingHandlerMapping - Looking up handler method for path /error
2018-08-01 15:26:53,481 DEBUG [http-nio-8889-exec-2] annotation.RequestMappingHandlerMapping - Returning handler method [public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)]
2018-08-01 15:26:53,481 DEBUG [http-nio-8889-exec-2] support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'basicErrorController'
2018-08-01 15:26:53,482 DEBUG [http-nio-8889-exec-2] servlet.DispatcherServlet - Last-Modified value for [/error] is: -1
2018-08-01 15:26:53,486 DEBUG [http-nio-8889-exec-2] annotation.HttpEntityMethodProcessor - Written [{timestamp=Wed Aug 01 15:26:53 IST 2018, status=500, error=Internal Server Error, exception=com.fasterxml.jackson.databind.JsonMappingException, message=No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@76d11ae3; line: 1, column: 0], path=/health/}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6c6cb480]
2018-08-01 15:26:53,487 DEBUG [http-nio-8889-exec-2] servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2018-08-01 15:26:53,487 DEBUG [http-nio-8889-exec-2] servlet.DispatcherServlet - Successfully completed request
2018-08-01 15:27:04,835 DEBUG [cloudServerDbConnectionPool housekeeper] pool.HikariPool - cloudServerDbConnectionPool - Pool stats (total=20, active=0, idle=20, waiting=0)
}
它帮助我缓存请求并重用它。以前我使用拦截器来验证我的请求。但我需要捕获我的请求并将其交给Rabbit MQ,因为我将其转移到了筛选器。您添加的日志只是信息,调试哪里是异常??更新了帖子。您只能阅读正文一次。。。您正在过滤器中读取它,因此正文已经被读取,没有更多的内容可供使用。我有HTTP包装器来读取输入流,运行请求和获取响应没有问题。异常会在一段时间后不断重复,就像它在日志中弹出一样。当我的雄猫正常工作时给我回复。奇怪的是,这种行为发生在Linux服务器上,我无法在EclipseIDE中获得它。
@Configuration
public class CloudServerConfigAdapter extends WebMvcConfigurerAdapter{
@Autowired
private Filter filter;
@Bean
public FilterRegistrationBean myFilterRegistrationBean() {
FilterRegistrationBean regBean = new FilterRegistrationBean();
regBean.setFilter(filter);
regBean.setOrder(1);
regBean.addUrlPatterns("/transactions/v1/enrichments");
return regBean;
}
The Exception comes after wards :
018-08-01 15:26:33,612 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - Servlet 'dispatcherServlet' configured successfully
2018-08-01 15:26:33,628 DEBUG [http-nio-8889-exec-1] filter.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:33,647 DEBUG [http-nio-8889-exec-1] filter.OrderedRequestContextFilter - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:33,648 ERROR [http-nio-8889-exec-1] [/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@34378acb; line: 1, column: 0]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3854)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3799)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2924)
at com.ondot.cloudserver.handlers.CloudServerFilter.doFilterInternal(CloudServerFilter.java:57)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2018-08-01 15:26:33,657 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error]
2018-08-01 15:26:33,661 DEBUG [http-nio-8889-exec-1] annotation.RequestMappingHandlerMapping - Looking up handler method for path /error
2018-08-01 15:26:33,667 DEBUG [http-nio-8889-exec-1] annotation.RequestMappingHandlerMapping - Returning handler method [public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)]
2018-08-01 15:26:33,667 DEBUG [http-nio-8889-exec-1] support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'basicErrorController'
2018-08-01 15:26:33,667 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - Last-Modified value for [/error] is: -1
2018-08-01 15:26:33,762 DEBUG [http-nio-8889-exec-1] annotation.HttpEntityMethodProcessor - Written [{timestamp=Wed Aug 01 15:26:33 IST 2018, status=500, error=Internal Server Error, exception=com.fasterxml.jackson.databind.JsonMappingException, message=No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@34378acb; line: 1, column: 0], path=/health/}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6c6cb480]
2018-08-01 15:26:33,771 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2018-08-01 15:26:33,771 DEBUG [http-nio-8889-exec-1] servlet.DispatcherServlet - Successfully completed request
2018-08-01 15:26:34,274 DEBUG [http-nio-8889-exec-3] filter.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:34,275 DEBUG [http-nio-8889-exec-3] filter.OrderedRequestContextFilter - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:34,275 ERROR [http-nio-8889-exec-3] [/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@281c1fb0; line: 1, column: 0]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3854)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3799)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2924)
at com.ondot.cloudserver.handlers.CloudServerFilter.doFilterInternal(CloudServerFilter.java:57)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2018-08-01 15:26:34,282 DEBUG [http-nio-8889-exec-3] servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error]
2018-08-01 15:26:34,283 DEBUG [http-nio-8889-exec-3] annotation.RequestMappingHandlerMapping - Looking up handler method for path /error
2018-08-01 15:26:34,284 DEBUG [http-nio-8889-exec-3] annotation.RequestMappingHandlerMapping - Returning handler method [public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)]
2018-08-01 15:26:34,284 DEBUG [http-nio-8889-exec-3] support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'basicErrorController'
2018-08-01 15:26:34,284 DEBUG [http-nio-8889-exec-3] servlet.DispatcherServlet - Last-Modified value for [/error] is: -1
2018-08-01 15:26:34,289 DEBUG [http-nio-8889-exec-3] annotation.HttpEntityMethodProcessor - Written [{timestamp=Wed Aug 01 15:26:34 IST 2018, status=500, error=Internal Server Error, exception=com.fasterxml.jackson.databind.JsonMappingException, message=No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@281c1fb0; line: 1, column: 0], path=/info}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6c6cb480]
2018-08-01 15:26:34,289 DEBUG [http-nio-8889-exec-3] servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2018-08-01 15:26:34,289 DEBUG [http-nio-8889-exec-3] servlet.DispatcherServlet - Successfully completed request
2018-08-01 15:26:34,833 DEBUG [cloudServerDbConnectionPool housekeeper] pool.HikariPool - cloudServerDbConnectionPool - Before cleanup stats (total=21, active=0, idle=21, waiting=0)
2018-08-01 15:26:34,834 DEBUG [cloudServerDbConnectionPool housekeeper] pool.HikariPool - cloudServerDbConnectionPool - After cleanup stats (total=20, active=0, idle=20, waiting=0)
2018-08-01 15:26:34,834 DEBUG [cloudServerDbConnectionPool connection closer] pool.PoolBase - cloudServerDbConnectionPool - Closing connection oracle.jdbc.driver.T4CConnection@5ac8cbc1: (connection has passed idleTimeout)
2018-08-01 15:26:53,477 DEBUG [http-nio-8889-exec-2] filter.OrderedRequestContextFilter - Bound request context to thread: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:53,478 DEBUG [http-nio-8889-exec-2] filter.OrderedRequestContextFilter - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@4e982e7d
2018-08-01 15:26:53,478 ERROR [http-nio-8889-exec-2] [/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@76d11ae3; line: 1, column: 0]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270)
at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3854)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3799)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2924)
at com.ondot.cloudserver.handlers.CloudServerFilter.doFilterInternal(CloudServerFilter.java:57)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2018-08-01 15:26:53,480 DEBUG [http-nio-8889-exec-2] servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing GET request for [/error]
2018-08-01 15:26:53,480 DEBUG [http-nio-8889-exec-2] annotation.RequestMappingHandlerMapping - Looking up handler method for path /error
2018-08-01 15:26:53,481 DEBUG [http-nio-8889-exec-2] annotation.RequestMappingHandlerMapping - Returning handler method [public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)]
2018-08-01 15:26:53,481 DEBUG [http-nio-8889-exec-2] support.DefaultListableBeanFactory - Returning cached instance of singleton bean 'basicErrorController'
2018-08-01 15:26:53,482 DEBUG [http-nio-8889-exec-2] servlet.DispatcherServlet - Last-Modified value for [/error] is: -1
2018-08-01 15:26:53,486 DEBUG [http-nio-8889-exec-2] annotation.HttpEntityMethodProcessor - Written [{timestamp=Wed Aug 01 15:26:53 IST 2018, status=500, error=Internal Server Error, exception=com.fasterxml.jackson.databind.JsonMappingException, message=No content to map due to end-of-input
at [Source: com.ondot.cloudserver.handlers.HttpRequestWrapper$CachedServletInputStream@76d11ae3; line: 1, column: 0], path=/health/}] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@6c6cb480]
2018-08-01 15:26:53,487 DEBUG [http-nio-8889-exec-2] servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2018-08-01 15:26:53,487 DEBUG [http-nio-8889-exec-2] servlet.DispatcherServlet - Successfully completed request
2018-08-01 15:27:04,835 DEBUG [cloudServerDbConnectionPool housekeeper] pool.HikariPool - cloudServerDbConnectionPool - Pool stats (total=20, active=0, idle=20, waiting=0)
public class HttpRequestWrapper extends HttpServletRequestWrapper {
private ByteArrayOutputStream cachedBytes;
public HttpRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public ServletInputStream getInputStream() throws IOException {
if (cachedBytes == null)
cacheInputStream();
return new CachedServletInputStream();
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
private void cacheInputStream() throws IOException {
/*Cache the inputstream in order to read it multiple times.*/
cachedBytes = new ByteArrayOutputStream();
IOUtils.copy(super.getInputStream(), cachedBytes);
}
final class CachedServletInputStream extends ServletInputStream {
private ByteArrayInputStream input;
public CachedServletInputStream() {
/* create a new input stream from the cached request body */
input = new ByteArrayInputStream(cachedBytes.toByteArray());
}
@Override
public int read() throws IOException {
return input.read();
}
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener listener) {
}
}