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.