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.







    @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();
        }

    }



Yorumlar

Bu blogdaki popüler yayınlar

How to connect Team Foundation Server in JDeveloper 12c

How To Add a Project To Team Foundation Server with Command Prompt