How to Suppress StackTrace in Jax-RPC
In this post, we will remove or edit bea_fault:stacktrace.
First of all, we ll put filter class in web.xml
<filter>
<filter-name>ExceptionHandler</filter-name>
<filter-class>xxxPackage.ExceptionHandler</filter-class>
</filter>
<filter-mapping>
<filter-name>ExceptionHandler</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
Then, this class welcome all url pattern and apply filter. This class must be implemented javax.servlet.Filter.
In below, we posted doFilter method. You can edit stack trace message whatever you want.
By the way,Be careful about java.lang.IllegalStateException: strict servlet API: cannot call getWriter() after getOutputStream() . (If you get an error, just leave a comment! )
Thanks.
Thanks.
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
try {
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
ServletResponseWrapper responseWrapper = new ServletResponseWrapper(httpServletResponse);
filterChain.doFilter(servletRequest, responseWrapper);
if (responseWrapper != null &&
HttpServletResponse.SC_INTERNAL_SERVER_ERROR == responseWrapper.getStatus()) {
if (responseWrapper.getResponse() != null) {
PrintWriter out = responseWrapper.getResponse().getWriter();
String replacedMessage =
responseWrapper.getCaptureAsString().replaceAll("(<bea_fault)[\\w\\W]*(\\/bea_fault:stacktrace>)",
"");
out.print(replacedMessage);
out.flush();
out.close();
}
} else {
PrintWriter out = responseWrapper.getResponse().getWriter();
String currentMessage = responseWrapper.getCaptureAsString();
out.print(currentMessage);
out.flush();
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void doFilter(ServletRequest servletRequest, ServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
try {
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
ServletResponseWrapper responseWrapper = new ServletResponseWrapper(httpServletResponse);
filterChain.doFilter(servletRequest, responseWrapper);
if (responseWrapper != null &&
HttpServletResponse.SC_INTERNAL_SERVER_ERROR == responseWrapper.getStatus()) {
if (responseWrapper.getResponse() != null) {
PrintWriter out = responseWrapper.getResponse().getWriter();
String replacedMessage =
responseWrapper.getCaptureAsString().replaceAll("(<bea_fault)[\\w\\W]*(\\/bea_fault:stacktrace>)",
"");
out.print(replacedMessage);
out.flush();
out.close();
}
} else {
PrintWriter out = responseWrapper.getResponse().getWriter();
String currentMessage = responseWrapper.getCaptureAsString();
out.print(currentMessage);
out.flush();
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Yorumlar
Yorum Gönder