Como obter o XML da solicitação POST e modificá-lo no filtro de servlet?

Atualmente, estou trabalhando em um requisito no qual preciso obter o XML (da solicitação POST) no filtro de servlet antes que a solicitação chegue ao controlador Spring e, em seguida, preciso processar o XML (cortar alguns nós / elementos vazios) no diretório filtro e, em seguida, a chamada deve prosseguir.

Tentei o código abaixo (anexado apenas trecho) e pude obter o corpo da solicitação (XML) e definir a resposta modificada.

    HttpServletRequest httpRequest = (HttpServletRequest) request;
    HttpServletResponse httpResponse = (HttpServletResponse) response;
    if (httpRequest.getMethod().equalsIgnoreCase("POST")) {
      extractDataFromRequest(httpRequest);
      httpResponse.getWriter().write("<root><root>");
    }
    chain.doFilter(request, wrappedResponse);

   public static String extractDataFromRequest(HttpServletRequest request) throws IOException {

    String line;
    StringBuilder builder = new StringBuilder();
    BufferedReader reader = request.getReader();
    while ((line = reader.readLine()) != null) {
      builder.append(line);
    }
    return builder.toString();
  }

No entanto, a primavera falhou com a seguinte exceção.

Severe: java.lang.IllegalStateException: PWC3997: getReader() has already been called for this request
    at org.apache.catalina.connector.Request.getInputStream(Request.java:1178)
    at org.apache.catalina.connector.RequestFacade.getInputStream(RequestFacade.java:407)
    at org.springframework.http.server.ServletServerHttpRequest.getBody(ServletServerHttpRequest.java:165)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:120)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:100)

Estou procurando uma implementação concreta para esse requisito por especialistas.

questionAnswers(2)

yourAnswerToTheQuestion