PK
>5 com/PK
>5
com/covalent/PK
>5 com/covalent/tomcat/PK
>5 com/covalent/tomcat/valves/PK
>5~tm8x 8x 8 com/covalent/tomcat/valves/Global50ErrorReportValve.java/*
* Copyright 1999-2001,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.covalent.tomcat.valves;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.catalina.ValveContext;
import org.apache.catalina.Request;
import org.apache.catalina.Response;
import org.apache.catalina.HttpResponse;
import org.apache.catalina.util.RequestUtil;
import org.apache.catalina.util.ServerInfo;
import org.apache.catalina.util.StringManager;
import org.apache.catalina.valves.Constants;
import org.apache.catalina.valves.ValveBase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.util.compat.JdkCompat;
import org.apache.tomcat.util.IntrospectionUtils;
import org.apache.catalina.Globals;
import javax.servlet.http.HttpServletResponse;
/**
* Further customization of the Tomcat error report valve,
* in addition to the standard tomcat implementation, you can define a set of
* files
*
*
Implementation of a Valve that outputs HTML error pages.
*
* This Valve should be attached at the Host level, although it will work
* if attached to a Context.
*
* HTML code from the Cocoon 2 project.
*
* Example usage
*
*
* .....
*
*
*
* @author Remy Maucherat
* @author Craig R. McClanahan
* @author Nicola Ken Barozzi Aisa
* @author Stefano Mazzocchi
* @author Yoav Shapira
* @author Filip Hanik
* @version $Revision: 304023 $ $Date: 2005-07-26 07:45:22 -0500 (Tue, 26 Jul 2005) $
* @since Tomcat 5.5.18
*/
public class Global50ErrorReportValve
extends ValveBase {
// ----------------------------------------------------- Instance Variables
/**
* The descriptive information related to this implementation.
*/
private static final String info =
"com.covalent.tomcat.valves.Global50ErrorReportValve/1.0";
/**
* The StringManager for this package.
*/
protected static StringManager sm =
StringManager.getManager(Constants.Package);
protected static Log log = LogFactory.getLog(Global50ErrorReportValve.class);
protected HashMap errorFiles = new HashMap();
// ------------------------------------------------------------- Properties
/**
* Return descriptive information about this Valve implementation.
*/
public String getInfo() {
return (info);
}
// public void setError404(String value) {
// setProperty("error404",value);
// }
public void setProperty(String name, Object value) {
setProperty(name,value.toString());
}
public void setProperty(String name, String value) {
if ( name.startsWith("error") ) {
try {
int errcode = Integer.parseInt(name.substring(5));
Integer ec = new Integer(errcode);
File f = new File(value);
if ( f.exists() ) {
errorFiles.put(ec,f);
log.info("Setting error property:"+name+" to:"+value);
}
}catch ( NumberFormatException nx ) {
log.error("Invalid property:" + name, nx);
}
}
}
// --------------------------------------------------------- Public Methods
public Global50ErrorReportValve() {
log.info("Creating Global50ErrorReportValve");
}
/**
* Invoke the next Valve in the sequence. When the invoke returns, check
* the response state, and output an error report is necessary.
*
* @param request The servlet request to be processed
* @param response The servlet response to be created
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void invoke(Request request, Response response,
ValveContext context)
throws IOException, ServletException {
// Perform the request
context.invokeNext(request, response);
ServletRequest sreq = (ServletRequest) request;
ServletResponse sresp = (ServletResponse) response;
if (sresp.isCommitted()) {
return;
}
Throwable throwable = (Throwable) sreq.getAttribute(Globals.EXCEPTION_ATTR);
if (throwable != null) {
// The response is an error
response.setError();
// Reset the response (if possible)
try {
sresp.reset();
} catch (IllegalStateException e) {
;
}
((HttpServletResponse)response).sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
response.setSuspended(false);
try {
// Do nothing on non-HTTP responses
int statusCode = ((HttpResponse)response).getStatus();
// Do nothing on a 1xx, 2xx and 3xx status
// Do nothing if anything has been written already
if ((statusCode < 400) || (response.getContentCount() > 0)) return;
sresp.reset();
File f = (File)errorFiles.get(new Integer(statusCode));
if ( f == null ) report(request, response, throwable);
else fileReport(request, response, statusCode, f);
} catch (IllegalStateException e) {
log.warn("Response already committed, unable to send error file.");
} catch (Throwable t) {
log.error("Error reporting HTTP error code:", t);
}
}
// ------------------------------------------------------ Protected Methods
protected void fileReport(Request request, Response response, int status, File f)
throws IOException {
((HttpServletResponse)response).setContentType("text/html");
((HttpServletResponse)response).setCharacterEncoding("utf-8");
((HttpServletResponse)response).setStatus(status);
FileReader fr = new FileReader(f);
BufferedReader reader = new BufferedReader(fr);
String line = reader.readLine();
while ( line != null ) {
((HttpServletResponse)response).getWriter().write(line);
((HttpServletResponse)response).getWriter().write("\n");
line = reader.readLine();
}
((HttpServletResponse)response).flushBuffer();
}
/**
* Prints out an error report.
*
* @param request The request being processed
* @param response The response being generated
* @param throwable The exception that occurred (which possibly wraps
* a root cause exception
*/
protected void report(Request request, Response response, Throwable throwable)
throws IOException {
// Do nothing on non-HTTP responses
int statusCode = ((HttpResponse)response).getStatus();
// Do nothing on a 1xx, 2xx and 3xx status
// Do nothing if anything has been written already
if ((statusCode < 400) || (response.getContentCount() > 0))
return;
Throwable rootCause = null;
if (throwable != null) {
if (throwable instanceof ServletException)
rootCause = ((ServletException) throwable).getRootCause();
}
String message = RequestUtil.filter(((HttpResponse)response).getMessage());
if (message == null)
message = "";
// Do nothing if there is no report for the specified status code
String report = null;
try {
report = sm.getString("http." + statusCode, message);
} catch (Throwable t) {
;
}
if (report == null)
return;
StringBuffer sb = new StringBuffer();
sb.append("");
sb.append(ServerInfo.getServerInfo()).append(" - ");
sb.append(sm.getString("errorReportValve.errorReport"));
sb.append("");
sb.append(" ");
sb.append("");
sb.append("");
sb.append(sm.getString("errorReportValve.statusHeader",
"" + statusCode, message)).append("
");
sb.append("
");
sb.append("type ");
if (throwable != null) {
sb.append(sm.getString("errorReportValve.exceptionReport"));
} else {
sb.append(sm.getString("errorReportValve.statusReport"));
}
sb.append("
");
sb.append("");
sb.append(sm.getString("errorReportValve.message"));
sb.append(" ");
sb.append(message).append("
");
sb.append("");
sb.append(sm.getString("errorReportValve.description"));
sb.append(" ");
sb.append(report);
sb.append("
");
if (throwable != null) {
String stackTrace = JdkCompat.getJdkCompat()
.getPartialServletStackTrace(throwable);
sb.append("");
sb.append(sm.getString("errorReportValve.exception"));
sb.append("
");
sb.append(RequestUtil.filter(stackTrace));
sb.append("");
while (rootCause != null) {
stackTrace = JdkCompat.getJdkCompat()
.getPartialServletStackTrace(rootCause);
sb.append("");
sb.append(sm.getString("errorReportValve.rootCause"));
sb.append("
");
sb.append(RequestUtil.filter(stackTrace));
sb.append("");
// In case root cause is somehow heavily nested
try {
rootCause = (Throwable) IntrospectionUtils.getProperty
(rootCause, "rootCause");
} catch (ClassCastException e) {
rootCause = null;
}
}
sb.append("");
sb.append(sm.getString("errorReportValve.note"));
sb.append(" ");
sb.append(sm.getString("errorReportValve.rootCauseInLogs",
ServerInfo.getServerInfo()));
sb.append("
");
}
sb.append("
");
sb.append("").append(ServerInfo.getServerInfo()).append("
");
sb.append("");
try {
try {
((HttpServletResponse)response).setContentType("text/html");
((HttpServletResponse)response).setCharacterEncoding("utf-8");
} catch (Throwable t) {
if (log.isDebugEnabled())
log.debug("status.setContentType", t);
}
Writer writer = response.getReporter();
if (writer != null) {
// If writer is null, it's an indication that the response has
// been hard committed already, which should never happen
writer.write(sb.toString());
}
} catch (IOException e) {
;
} catch (IllegalStateException e) {
;
}
}
public void setError400(String value) {
setProperty("error400", value);
}
public void setError401(String value) {
setProperty("error401", value);
}
public void setError402(String value) {
setProperty("error402", value);
}
public void setError403(String value) {
setProperty("error403", value);
}
public void setError404(String value) {
setProperty("error404", value);
}
public void setError405(String value) {
setProperty("error405", value);
}
public void setError406(String value) {
setProperty("error406", value);
}
public void setError407(String value) {
setProperty("error407", value);
}
public void setError408(String value) {
setProperty("error408", value);
}
public void setError409(String value) {
setProperty("error409", value);
}
public void setError410(String value) {
setProperty("error410", value);
}
public void setError411(String value) {
setProperty("error411", value);
}
public void setError412(String value) {
setProperty("error412", value);
}
public void setError413(String value) {
setProperty("error413", value);
}
public void setError414(String value) {
setProperty("error414", value);
}
public void setError415(String value) {
setProperty("error415", value);
}
public void setError416(String value) {
setProperty("error416", value);
}
public void setError417(String value) {
setProperty("error417", value);
}
public void setError418(String value) {
setProperty("error418", value);
}
public void setError419(String value) {
setProperty("error419", value);
}
public void setError420(String value) {
setProperty("error420", value);
}
public void setError421(String value) {
setProperty("error421", value);
}
public void setError422(String value) {
setProperty("error422", value);
}
public void setError423(String value) {
setProperty("error423", value);
}
public void setError424(String value) {
setProperty("error424", value);
}
public void setError425(String value) {
setProperty("error425", value);
}
public void setError426(String value) {
setProperty("error426", value);
}
public void setError427(String value) {
setProperty("error427", value);
}
public void setError428(String value) {
setProperty("error428", value);
}
public void setError429(String value) {
setProperty("error429", value);
}
public void setError430(String value) {
setProperty("error430", value);
}
public void setError431(String value) {
setProperty("error431", value);
}
public void setError432(String value) {
setProperty("error432", value);
}
public void setError433(String value) {
setProperty("error433", value);
}
public void setError434(String value) {
setProperty("error434", value);
}
public void setError435(String value) {
setProperty("error435", value);
}
public void setError436(String value) {
setProperty("error436", value);
}
public void setError437(String value) {
setProperty("error437", value);
}
public void setError438(String value) {
setProperty("error438", value);
}
public void setError439(String value) {
setProperty("error439", value);
}
public void setError440(String value) {
setProperty("error440", value);
}
public void setError441(String value) {
setProperty("error441", value);
}
public void setError442(String value) {
setProperty("error442", value);
}
public void setError443(String value) {
setProperty("error443", value);
}
public void setError444(String value) {
setProperty("error444", value);
}
public void setError445(String value) {
setProperty("error445", value);
}
public void setError446(String value) {
setProperty("error446", value);
}
public void setError447(String value) {
setProperty("error447", value);
}
public void setError448(String value) {
setProperty("error448", value);
}
public void setError449(String value) {
setProperty("error449", value);
}
public void setError450(String value) {
setProperty("error450", value);
}
public void setError451(String value) {
setProperty("error451", value);
}
public void setError452(String value) {
setProperty("error452", value);
}
public void setError453(String value) {
setProperty("error453", value);
}
public void setError454(String value) {
setProperty("error454", value);
}
public void setError455(String value) {
setProperty("error455", value);
}
public void setError456(String value) {
setProperty("error456", value);
}
public void setError457(String value) {
setProperty("error457", value);
}
public void setError458(String value) {
setProperty("error458", value);
}
public void setError459(String value) {
setProperty("error459", value);
}
public void setError460(String value) {
setProperty("error460", value);
}
public void setError461(String value) {
setProperty("error461", value);
}
public void setError462(String value) {
setProperty("error462", value);
}
public void setError463(String value) {
setProperty("error463", value);
}
public void setError464(String value) {
setProperty("error464", value);
}
public void setError465(String value) {
setProperty("error465", value);
}
public void setError466(String value) {
setProperty("error466", value);
}
public void setError467(String value) {
setProperty("error467", value);
}
public void setError468(String value) {
setProperty("error468", value);
}
public void setError469(String value) {
setProperty("error469", value);
}
public void setError470(String value) {
setProperty("error470", value);
}
public void setError471(String value) {
setProperty("error471", value);
}
public void setError472(String value) {
setProperty("error472", value);
}
public void setError473(String value) {
setProperty("error473", value);
}
public void setError474(String value) {
setProperty("error474", value);
}
public void setError475(String value) {
setProperty("error475", value);
}
public void setError476(String value) {
setProperty("error476", value);
}
public void setError477(String value) {
setProperty("error477", value);
}
public void setError478(String value) {
setProperty("error478", value);
}
public void setError479(String value) {
setProperty("error479", value);
}
public void setError480(String value) {
setProperty("error480", value);
}
public void setError481(String value) {
setProperty("error481", value);
}
public void setError482(String value) {
setProperty("error482", value);
}
public void setError483(String value) {
setProperty("error483", value);
}
public void setError484(String value) {
setProperty("error484", value);
}
public void setError485(String value) {
setProperty("error485", value);
}
public void setError486(String value) {
setProperty("error486", value);
}
public void setError487(String value) {
setProperty("error487", value);
}
public void setError488(String value) {
setProperty("error488", value);
}
public void setError489(String value) {
setProperty("error489", value);
}
public void setError490(String value) {
setProperty("error490", value);
}
public void setError491(String value) {
setProperty("error491", value);
}
public void setError492(String value) {
setProperty("error492", value);
}
public void setError493(String value) {
setProperty("error493", value);
}
public void setError494(String value) {
setProperty("error494", value);
}
public void setError495(String value) {
setProperty("error495", value);
}
public void setError496(String value) {
setProperty("error496", value);
}
public void setError497(String value) {
setProperty("error497", value);
}
public void setError498(String value) {
setProperty("error498", value);
}
public void setError499(String value) {
setProperty("error499", value);
}
public void setError500(String value) {
setProperty("error500", value);
}
public void setError501(String value) {
setProperty("error501", value);
}
public void setError502(String value) {
setProperty("error502", value);
}
public void setError503(String value) {
setProperty("error503", value);
}
public void setError504(String value) {
setProperty("error504", value);
}
public void setError505(String value) {
setProperty("error505", value);
}
public void setError506(String value) {
setProperty("error506", value);
}
public void setError507(String value) {
setProperty("error507", value);
}
public void setError508(String value) {
setProperty("error508", value);
}
public void setError509(String value) {
setProperty("error509", value);
}
public void setError510(String value) {
setProperty("error510", value);
}
public void setError511(String value) {
setProperty("error511", value);
}
public void setError512(String value) {
setProperty("error512", value);
}
public void setError513(String value) {
setProperty("error513", value);
}
public void setError514(String value) {
setProperty("error514", value);
}
public void setError515(String value) {
setProperty("error515", value);
}
public void setError516(String value) {
setProperty("error516", value);
}
public void setError517(String value) {
setProperty("error517", value);
}
public void setError518(String value) {
setProperty("error518", value);
}
public void setError519(String value) {
setProperty("error519", value);
}
public void setError520(String value) {
setProperty("error520", value);
}
public void setError521(String value) {
setProperty("error521", value);
}
public void setError522(String value) {
setProperty("error522", value);
}
public void setError523(String value) {
setProperty("error523", value);
}
public void setError524(String value) {
setProperty("error524", value);
}
public void setError525(String value) {
setProperty("error525", value);
}
public void setError526(String value) {
setProperty("error526", value);
}
public void setError527(String value) {
setProperty("error527", value);
}
public void setError528(String value) {
setProperty("error528", value);
}
public void setError529(String value) {
setProperty("error529", value);
}
public void setError530(String value) {
setProperty("error530", value);
}
public void setError531(String value) {
setProperty("error531", value);
}
public void setError532(String value) {
setProperty("error532", value);
}
public void setError533(String value) {
setProperty("error533", value);
}
public void setError534(String value) {
setProperty("error534", value);
}
public void setError535(String value) {
setProperty("error535", value);
}
public void setError536(String value) {
setProperty("error536", value);
}
public void setError537(String value) {
setProperty("error537", value);
}
public void setError538(String value) {
setProperty("error538", value);
}
public void setError539(String value) {
setProperty("error539", value);
}
public void setError540(String value) {
setProperty("error540", value);
}
public void setError541(String value) {
setProperty("error541", value);
}
public void setError542(String value) {
setProperty("error542", value);
}
public void setError543(String value) {
setProperty("error543", value);
}
public void setError544(String value) {
setProperty("error544", value);
}
public void setError545(String value) {
setProperty("error545", value);
}
public void setError546(String value) {
setProperty("error546", value);
}
public void setError547(String value) {
setProperty("error547", value);
}
public void setError548(String value) {
setProperty("error548", value);
}
public void setError549(String value) {
setProperty("error549", value);
}
public void setError550(String value) {
setProperty("error550", value);
}
public void setError551(String value) {
setProperty("error551", value);
}
public void setError552(String value) {
setProperty("error552", value);
}
public void setError553(String value) {
setProperty("error553", value);
}
public void setError554(String value) {
setProperty("error554", value);
}
public void setError555(String value) {
setProperty("error555", value);
}
public void setError556(String value) {
setProperty("error556", value);
}
public void setError557(String value) {
setProperty("error557", value);
}
public void setError558(String value) {
setProperty("error558", value);
}
public void setError559(String value) {
setProperty("error559", value);
}
public void setError560(String value) {
setProperty("error560", value);
}
public void setError561(String value) {
setProperty("error561", value);
}
public void setError562(String value) {
setProperty("error562", value);
}
public void setError563(String value) {
setProperty("error563", value);
}
public void setError564(String value) {
setProperty("error564", value);
}
public void setError565(String value) {
setProperty("error565", value);
}
public void setError566(String value) {
setProperty("error566", value);
}
public void setError567(String value) {
setProperty("error567", value);
}
public void setError568(String value) {
setProperty("error568", value);
}
public void setError569(String value) {
setProperty("error569", value);
}
public void setError570(String value) {
setProperty("error570", value);
}
public void setError571(String value) {
setProperty("error571", value);
}
public void setError572(String value) {
setProperty("error572", value);
}
public void setError573(String value) {
setProperty("error573", value);
}
public void setError574(String value) {
setProperty("error574", value);
}
public void setError575(String value) {
setProperty("error575", value);
}
public void setError576(String value) {
setProperty("error576", value);
}
public void setError577(String value) {
setProperty("error577", value);
}
public void setError578(String value) {
setProperty("error578", value);
}
public void setError579(String value) {
setProperty("error579", value);
}
public void setError580(String value) {
setProperty("error580", value);
}
public void setError581(String value) {
setProperty("error581", value);
}
public void setError582(String value) {
setProperty("error582", value);
}
public void setError583(String value) {
setProperty("error583", value);
}
public void setError584(String value) {
setProperty("error584", value);
}
public void setError585(String value) {
setProperty("error585", value);
}
public void setError586(String value) {
setProperty("error586", value);
}
public void setError587(String value) {
setProperty("error587", value);
}
public void setError588(String value) {
setProperty("error588", value);
}
public void setError589(String value) {
setProperty("error589", value);
}
public void setError590(String value) {
setProperty("error590", value);
}
public void setError591(String value) {
setProperty("error591", value);
}
public void setError592(String value) {
setProperty("error592", value);
}
public void setError593(String value) {
setProperty("error593", value);
}
public void setError594(String value) {
setProperty("error594", value);
}
public void setError595(String value) {
setProperty("error595", value);
}
public void setError596(String value) {
setProperty("error596", value);
}
public void setError597(String value) {
setProperty("error597", value);
}
public void setError598(String value) {
setProperty("error598", value);
}
public void setError599(String value) {
setProperty("error599", value);
}
public void setError600(String value) {
setProperty("error600", value);
}
}
PK
4Y?Z:/ :/ 8 com/covalent/tomcat/valves/Global55ErrorReportValve.java/*
* Copyright 1999-2001,2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.covalent.tomcat.valves;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.util.RequestUtil;
import org.apache.catalina.util.ServerInfo;
import org.apache.catalina.util.StringManager;
import org.apache.catalina.valves.Constants;
import org.apache.catalina.valves.ValveBase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.util.compat.JdkCompat;
import org.apache.tomcat.util.IntrospectionUtils;
import org.apache.catalina.Globals;
import javax.servlet.http.HttpServletResponse;
/**
* Further customization of the Tomcat error report valve,
* in addition to the standard tomcat implementation, you can define a set of
* files
*
* Implementation of a Valve that outputs HTML error pages.
*
* This Valve should be attached at the Host level, although it will work
* if attached to a Context.
*
* HTML code from the Cocoon 2 project.
*
* Example usage
*
*
* .....
*
*
*
* @author Remy Maucherat
* @author Craig R. McClanahan
* @author Nicola Ken Barozzi Aisa
* @author Stefano Mazzocchi
* @author Yoav Shapira
* @author Filip Hanik
* @version $Revision: 304023 $ $Date: 2005-07-26 07:45:22 -0500 (Tue, 26 Jul 2005) $
* @since Tomcat 5.5.18
*/
public class Global55ErrorReportValve
extends ValveBase {
// ----------------------------------------------------- Instance Variables
/**
* The descriptive information related to this implementation.
*/
private static final String info =
"com.covalent.tomcat.valves.Global55ErrorReportValve/1.0";
/**
* The StringManager for this package.
*/
protected static StringManager sm =
StringManager.getManager(Constants.Package);
protected static Log log = LogFactory.getLog(Global55ErrorReportValve.class);
protected HashMap errorFiles = new HashMap();
// ------------------------------------------------------------- Properties
/**
* Return descriptive information about this Valve implementation.
*/
public String getInfo() {
return (info);
}
public void setProperty(String name, Object value) {
setProperty(name,value.toString());
}
public void setProperty(String name, String value) {
if ( name.startsWith("error") ) {
try {
int errcode = Integer.parseInt(name.substring(5));
Integer ec = new Integer(errcode);
File f = new File(value);
if ( f.exists() ) {
errorFiles.put(ec,f);
}
}catch ( NumberFormatException nx ) {
log.error("Invalid property:" + name, nx);
}
}
}
// --------------------------------------------------------- Public Methods
public Global55ErrorReportValve() {
log.info("Creating Global55ErrorReportValve");
}
/**
* Invoke the next Valve in the sequence. When the invoke returns, check
* the response state, and output an error report is necessary.
*
* @param request The servlet request to be processed
* @param response The servlet response to be created
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
public void invoke(Request request, Response response)
throws IOException, ServletException {
// Perform the request
getNext().invoke(request, response);
ServletRequest sreq = (ServletRequest) request;
ServletResponse sresp = (ServletResponse) response;
if (sresp.isCommitted()) {
return;
}
Throwable throwable = (Throwable) sreq.getAttribute(Globals.EXCEPTION_ATTR);
if (throwable != null) {
// The response is an error
response.setError();
// Reset the response (if possible)
try {
sresp.reset();
} catch (IllegalStateException e) {
;
}
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
response.setSuspended(false);
try {
// Do nothing on non-HTTP responses
int statusCode = response.getStatus();
// Do nothing on a 1xx, 2xx and 3xx status
// Do nothing if anything has been written already
if ((statusCode < 400) || (response.getContentCount() > 0)) return;
sresp.reset();
File f = (File)errorFiles.get(new Integer(statusCode));
if ( f == null ) report(request, response, throwable);
else fileReport(request, response, statusCode, f);
} catch (IllegalStateException e) {
log.warn("Response already committed, unable to send error file.");
} catch (Throwable t) {
log.error("Error reporting HTTP error code:", t);
}
}
// ------------------------------------------------------ Protected Methods
protected void fileReport(Request request, Response response, int status, File f)
throws IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
response.setStatus(status);
FileReader fr = new FileReader(f);
BufferedReader reader = new BufferedReader(fr);
String line = reader.readLine();
while ( line != null ) {
response.getWriter().write(line);
response.getWriter().write("\n");
line = reader.readLine();
}
response.flushBuffer();
}
/**
* Prints out an error report.
*
* @param request The request being processed
* @param response The response being generated
* @param throwable The exception that occurred (which possibly wraps
* a root cause exception
*/
protected void report(Request request, Response response, Throwable throwable)
throws IOException {
// Do nothing on non-HTTP responses
int statusCode = response.getStatus();
// Do nothing on a 1xx, 2xx and 3xx status
// Do nothing if anything has been written already
if ((statusCode < 400) || (response.getContentCount() > 0))
return;
Throwable rootCause = null;
if (throwable != null) {
if (throwable instanceof ServletException)
rootCause = ((ServletException) throwable).getRootCause();
}
String message = RequestUtil.filter(response.getMessage());
if (message == null)
message = "";
// Do nothing if there is no report for the specified status code
String report = null;
try {
report = sm.getString("http." + statusCode, message);
} catch (Throwable t) {
;
}
if (report == null)
return;
StringBuffer sb = new StringBuffer();
sb.append("");
sb.append(ServerInfo.getServerInfo()).append(" - ");
sb.append(sm.getString("errorReportValve.errorReport"));
sb.append("");
sb.append(" ");
sb.append("");
sb.append("");
sb.append(sm.getString("errorReportValve.statusHeader",
"" + statusCode, message)).append("
");
sb.append("
");
sb.append("type ");
if (throwable != null) {
sb.append(sm.getString("errorReportValve.exceptionReport"));
} else {
sb.append(sm.getString("errorReportValve.statusReport"));
}
sb.append("
");
sb.append("");
sb.append(sm.getString("errorReportValve.message"));
sb.append(" ");
sb.append(message).append("
");
sb.append("");
sb.append(sm.getString("errorReportValve.description"));
sb.append(" ");
sb.append(report);
sb.append("
");
if (throwable != null) {
String stackTrace = JdkCompat.getJdkCompat()
.getPartialServletStackTrace(throwable);
sb.append("");
sb.append(sm.getString("errorReportValve.exception"));
sb.append("
");
sb.append(RequestUtil.filter(stackTrace));
sb.append("");
while (rootCause != null) {
stackTrace = JdkCompat.getJdkCompat()
.getPartialServletStackTrace(rootCause);
sb.append("");
sb.append(sm.getString("errorReportValve.rootCause"));
sb.append("
");
sb.append(RequestUtil.filter(stackTrace));
sb.append("");
// In case root cause is somehow heavily nested
try {
rootCause = (Throwable) IntrospectionUtils.getProperty
(rootCause, "rootCause");
} catch (ClassCastException e) {
rootCause = null;
}
}
sb.append("");
sb.append(sm.getString("errorReportValve.note"));
sb.append(" ");
sb.append(sm.getString("errorReportValve.rootCauseInLogs",
ServerInfo.getServerInfo()));
sb.append("
");
}
sb.append("
");
sb.append("").append(ServerInfo.getServerInfo()).append("
");
sb.append("");
try {
try {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
} catch (Throwable t) {
if (log.isDebugEnabled())
log.debug("status.setContentType", t);
}
Writer writer = response.getReporter();
if (writer != null) {
// If writer is null, it's an indication that the response has
// been hard committed already, which should never happen
writer.write(sb.toString());
}
} catch (IOException e) {
;
} catch (IllegalStateException e) {
;
}
}
}
PK
>5vLP9x x 9 com/covalent/tomcat/valves/Global50ErrorReportValve.class 0
hijk
l
mn
op
Kqr
st
su
vw
xy
z
{ K|
} K~
l
p
Ll
l % $ % - 0
K
K - - -
>
@
@ -
-
G 0
K
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
K
K
info Ljava/lang/String;
ConstantValue sm (Lorg/apache/catalina/util/StringManager; log Lorg/apache/commons/logging/Log;
errorFiles Ljava/util/HashMap; 9class$com$covalent$tomcat$valves$Global50ErrorReportValve Ljava/lang/Class; Synthetic getInfo ()Ljava/lang/String; Code LineNumberTable LocalVariableTable this 5Lcom/covalent/tomcat/valves/Global50ErrorReportValve; setProperty '(Ljava/lang/String;Ljava/lang/Object;)V name value Ljava/lang/Object; '(Ljava/lang/String;Ljava/lang/String;)V errcode I ec Ljava/lang/Integer; f Ljava/io/File; nx !Ljava/lang/NumberFormatException; ()V invoke `(Lorg/apache/catalina/Request;Lorg/apache/catalina/Response;Lorg/apache/catalina/ValveContext;)V e !Ljava/lang/IllegalStateException;
statusCode t Ljava/lang/Throwable; request Lorg/apache/catalina/Request; response Lorg/apache/catalina/Response; context "Lorg/apache/catalina/ValveContext; sreq Ljavax/servlet/ServletRequest; sresp Ljavax/servlet/ServletResponse; throwable
Exceptions
fileReport M(Lorg/apache/catalina/Request;Lorg/apache/catalina/Response;ILjava/io/File;)V status fr Ljava/io/FileReader; reader Ljava/io/BufferedReader; line report S(Lorg/apache/catalina/Request;Lorg/apache/catalina/Response;Ljava/lang/Throwable;)V Ljava/lang/ClassCastException;
stackTrace writer Ljava/io/Writer; Ljava/io/IOException; rootCause message sb Ljava/lang/StringBuffer; setError400 (Ljava/lang/String;)V setError401 setError402 setError403 setError404 setError405 setError406 setError407 setError408 setError409 setError410 setError411 setError412 setError413 setError414 setError415 setError416 setError417 setError418 setError419 setError420 setError421 setError422 setError423 setError424 setError425 setError426 setError427 setError428 setError429 setError430 setError431 setError432 setError433 setError434 setError435 setError436 setError437 setError438 setError439 setError440 setError441 setError442 setError443 setError444 setError445 setError446 setError447 setError448 setError449 setError450 setError451 setError452 setError453 setError454 setError455 setError456 setError457 setError458 setError459 setError460 setError461 setError462 setError463 setError464 setError465 setError466 setError467 setError468 setError469 setError470 setError471 setError472 setError473 setError474 setError475 setError476 setError477 setError478 setError479 setError480 setError481 setError482 setError483 setError484 setError485 setError486 setError487 setError488 setError489 setError490 setError491 setError492 setError493 setError494 setError495 setError496 setError497 setError498 setError499 setError500 setError501 setError502 setError503 setError504 setError505 setError506 setError507 setError508 setError509 setError510 setError511 setError512 setError513 setError514 setError515 setError516 setError517 setError518 setError519 setError520 setError521 setError522 setError523 setError524 setError525 setError526 setError527 setError528 setError529 setError530 setError531 setError532 setError533 setError534 setError535 setError536 setError537 setError538 setError539 setError540 setError541 setError542 setError543 setError544 setError545 setError546 setError547 setError548 setError549 setError550 setError551 setError552 setError553 setError554 setError555 setError556 setError557 setError558 setError559 setError560 setError561 setError562 setError563 setError564 setError565 setError566 setError567 setError568 setError569 setError570 setError571 setError572 setError573 setError574 setError575 setError576 setError577 setError578 setError579 setError580 setError581 setError582 setError583 setError584 setError585 setError586 setError587 setError588 setError589 setError590 setError591 setError592 setError593 setError594 setError595 setError596 setError597 setError598 setError599 setError600 class$ %(Ljava/lang/String;)Ljava/lang/Class; x1 "Ljava/lang/ClassNotFoundException; x0
SourceFile Global50ErrorReportValve.javaa java/lang/ClassNotFoundException java/lang/NoClassDefFoundErrorno 7com.covalent.tomcat.valves.Global50ErrorReportValve/1.0Z`e error java/lang/Integern java/io/FilenTURS java/lang/StringBuffer Setting error property: to:M java/lang/NumberFormatException Invalid property:r java/util/HashMap !Creating Global50ErrorReportValve javax/servlet/ServletRequest javax/servlet/ServletResponse javax.servlet.error.exception java/lang/Throwableoo java/lang/IllegalStateException &javax/servlet/http/HttpServletResponse org/apache/catalina/HttpResponse 6Response already committed, unable to send error file. Error reporting HTTP error code: text/html utf-8 java/io/FileReadern java/io/BufferedReadernZ
o javax/servlet/ServletExceptionZ PQ http. Z - errorReportValve.errorReport
errorReportValve.statusHeader
type errorReportValve.exceptionReport errorReportValve.statusReport
errorReportValve.message
errorReportValve.description errorReportValve.exception
errorReportValve.rootCause java/lang/ClassCastException errorReportValve.note errorReportValve.rootCauseInLogs
status.setContentType java/io/IOException error400 error401 error402 error403 error404 error405 error406 error407 error408 error409 error410 error411 error412 error413 error414 error415 error416 error417 error418 error419 error420 error421 error422 error423 error424 error425 error426 error427 error428 error429 error430 error431 error432 error433 error434 error435 error436 error437 error438 error439 error440 error441 error442 error443 error444 error445 error446 error447 error448 error449 error450 error451 error452 error453 error454 error455 error456 error457 error458 error459 error460 error461 error462 error463 error464 error465 error466 error467 error468 error469 error470 error471 error472 error473 error474 error475 error476 error477 error478 error479 error480 error481 error482 error483 error484 error485 error486 error487 error488 error489 error490 error491 error492 error493 error494 error495 error496 error497 error498 error499 error500 error501 error502 error503 error504 error505 error506 error507 error508 error509 error510 error511 error512 error513 error514 error515 error516 error517 error518 error519 error520 error521 error522 error523 error524 error525 error526 error527 error528 error529 error530 error531 error532 error533 error534 error535 error536 error537 error538 error539 error540 error541 error542 error543 error544 error545 error546 error547 error548 error549 error550 error551 error552 error553 error554 error555 error556 error557 error558 error559 error560 error561 error562 error563 error564 error565 error566 error567 error568 error569 error570 error571 error572 error573 error574 error575 error576 error577 error578 error579 error580 error581 error582 error583 error584 error585 error586 error587 error588 error589 error590 error591 error592 error593 error594 error595 error596 error597 error598 error599 error600 org.apache.catalina.valves
VW 3com.covalent.tomcat.valves.Global50ErrorReportValve`a
3com/covalent/tomcat/valves/Global50ErrorReportValve $org/apache/catalina/valves/ValveBase java/lang/Class forName initCause ,(Ljava/lang/Throwable;)Ljava/lang/Throwable; java/lang/Object toString java/lang/String
startsWith (Ljava/lang/String;)Z substring (I)Ljava/lang/String; parseInt (Ljava/lang/String;)I (I)V exists ()Z put 8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; append ,(Ljava/lang/String;)Ljava/lang/StringBuffer; org/apache/commons/logging/Log (Ljava/lang/Object;)V *(Ljava/lang/Object;Ljava/lang/Throwable;)V org/apache/catalina/ValveContext
invokeNext >(Lorg/apache/catalina/Request;Lorg/apache/catalina/Response;)V isCommitted getAttribute &(Ljava/lang/String;)Ljava/lang/Object; org/apache/catalina/Response setError reset sendError setSuspended (Z)V getStatus ()I getContentCount get &(Ljava/lang/Object;)Ljava/lang/Object; warn setContentType setCharacterEncoding setStatus (Ljava/io/File;)V (Ljava/io/Reader;)V readLine getWriter ()Ljava/io/PrintWriter; java/io/PrintWriter write flushBuffer getRootCause ()Ljava/lang/Throwable;
getMessage $org/apache/catalina/util/RequestUtil filter &(Ljava/lang/String;)Ljava/lang/String; (I)Ljava/lang/StringBuffer; &org/apache/catalina/util/StringManager getString 8(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String; #org/apache/catalina/util/ServerInfo
getServerInfo J(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String; 'org/apache/tomcat/util/compat/JdkCompat getJdkCompat +()Lorg/apache/tomcat/util/compat/JdkCompat; getPartialServletStackTrace )(Ljava/lang/Throwable;)Ljava/lang/String; )org/apache/tomcat/util/IntrospectionUtils getProperty 8(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; isDebugEnabled debug getReporter java/io/Writer
getManager <(Ljava/lang/String;)Lorg/apache/catalina/util/StringManager; %org/apache/commons/logging/LogFactory getLog 3(Ljava/lang/Class;)Lorg/apache/commons/logging/Log; !KL MN O PQ RS TU VW X YZ [ - \ o] ^_ `a [ L
*+, \
w x]
^_
bN
cd `e [ +
x+ >
Y : Y, : 3* W Y + , N Y + - ^ a \ . { } ~ &