There is a response wrapper to replace some contents to another contents like this:
import javax.servlet.ServletOutputStream;
import java.io.CharArrayWriter;
import java.io.IOException;
class ArrayServletOutputStream extends ServletOutputStream {
private CharArrayWriter charArray;
public ArrayServletOutputStream(CharArrayWriter charArray) {
this.charArray = charArray;
}
@Override
public void write(int b) throws IOException {
charArray.write(b);
}
}
and the its response wrapper:
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;
class ResponseWrapper extends HttpServletResponseWrapper {
protected CharArrayWriter charArray = new CharArrayWriter();
public ResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public PrintWriter getWriter() {
return new PrintWriter(charArray);
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
return new ArrayServletOutputStream(charArray);
}
}
and the filter is :
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class CustomFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) servletResponse);
filterChain.doFilter(servletRequest, responseWrapper);
String replacedContent = responseWrapper.charArray.toString(); // Example modification
replacedContent = replacedContent.replaceAll("S:Envelope", "soap:Envelope");
replacedContent = replacedContent.replaceAll("S:Body", "soap:Body");
replacedContent = replacedContent.replaceAll("xmlns:S", "xmlns:soap");
replacedContent = replacedContent.replace("<?xml version='1.0' encoding='UTF-8'?>", "");
servletResponse.setContentLength(replacedContent.length());
PrintWriter out = servletResponse.getWriter();
out.write(replacedContent);
}
@Override
public void destroy() {
}
}
So it is working but the characterset is not UTF-8 and another word the ResponseWrapper does not support the UTF-8 encoding.
How do I solve the problem?
thanks in advance to whom help me