2002/css-validator/org/w3c/css/error ErrorReport.java,NONE,1.1 ErrorReportFactory.java,NONE,1.1 ErrorReportHTML.java,NONE,1.1 ErrorReportSOAP12.java,NONE,1.1 error.html,NONE,1.1 soaperror.properties,NONE,1.1

Update of /sources/public/2002/css-validator/org/w3c/css/error
In directory hutz:/tmp/cvs-serv22850

Added Files:
	ErrorReport.java ErrorReportFactory.java ErrorReportHTML.java 
	ErrorReportSOAP12.java error.html soaperror.properties 
Log Message:
Error Handling (Jean-Guilhem Rouel)

--- NEW FILE: ErrorReport.java ---
// $Id: ErrorReport.java,v 1.1 2005/07/22 09:45:01 ylafon Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2003.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.error;

import java.io.PrintWriter;

/**
 * ErrorReport<br />
 * Created: Jul 13, 2005 2:05:41 PM<br />
 */
public abstract class ErrorReport {
    abstract public void print(PrintWriter out);
}

--- NEW FILE: ErrorReportSOAP12.java ---
// $Id: ErrorReportSOAP12.java,v 1.1 2005/07/22 09:45:01 ylafon Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2003.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.error;

import java.io.PrintWriter;
import java.net.URL;
import java.net.UnknownHostException;

import org.w3c.css.util.ApplContext;
import org.w3c.css.util.Utf8Properties;

/**
 * ErrorReportSOAP12<br />
 * Created: Jul 13, 2005 2:06:00 PM<br />
 * This class allows to create 2 different soap messages to handle errors:
 * <ul>
 * <li>Sender errors if the URI given in parameter of the servlet is invalid</li>
 * <li>Receiver errors if the URI given is valid but inreachable</li>
 * </ul>
 */
public class ErrorReportSOAP12 extends ErrorReport {
    
    private String title;
    private boolean validURI;
    private Exception exception;
    
    private ApplContext ac;
    private static Utf8Properties messages;
    
    private PrintWriter out;
    
    ErrorReportSOAP12(ApplContext ac, String title, String output, Exception e,
	    boolean validURI) {	
	this.ac = ac;
	this.exception = e;
	this.validURI = validURI;
	this.title = title;
    }
    
    /**
     * @see org.w3c.css.error.ErrorReport#print(java.io.PrintWriter)
     */
    public void print(PrintWriter out) {
	this.out = out;
	
	// the error message
	String errorMessage = exception.getMessage();
	// the string containing the soap response pattern
	String report;
	if(validURI) {
	    report = messages.getProperty("receiver");	    
	    if(exception instanceof UnknownHostException) {
		errorMessage = "The host name " + errorMessage +
			       " couldn't be resolved";		        	
            }            	    
	}
	else {
	    report = messages.getProperty("sender");
	}
	processError(report, errorMessage , title + " " + exception);
    }
    
    /**
     * Prints on the output the soap message str, where each entity<br/>
     * has been replaced by it's value<br/>
     * An entity is an xml comment (&lt;!-- --&gt;) containing a single word
     *  beginning by #<br/>
     * Valid entities names are:
     * <ul>
     * <li><i>charset</i>: prints the charset defined in the Applcontext</li>
     * <li><i>reason</i>: prints the reason of the error</li>
     * <li><i>details</i>: prints the detailed reason of the error</li>
     * </ul>
     * @param str the soap message pattern
     * @param errorMessage the error message (see reason entity)
     * @param details the detailed message error (see details entity)
     */
    private void processError(String str, String errorMessage, String details) {
	try {
	    int i = 0;
	    while ((i = str.indexOf("<!-- #", i)) >= 0) {
		int lastIndexOfEntity = str.indexOf("-->", i);
		String entity = str.substring(i + 6, lastIndexOfEntity - 1)
		    .toLowerCase();	
		// reason entity
		if (entity.equals("reason")) {
		    out.print(str.substring(0, i));
		    str = str.substring(lastIndexOfEntity + 3);
		    i = 0;		    
		    out.print(errorMessage);
		}
		// details entity
		else if (entity.equals("details")) {		    
		    out.print(str.substring(0, i));
		    str = str.substring(lastIndexOfEntity + 3);
		    i = 0;
		    out.print(details);
		}
		//charset entity
		else if (entity.equals("charset")) {		    
		    out.print(str.substring(0, i));
		    str = str.substring(lastIndexOfEntity + 3);
		    i = 0;										
		    out.print(ac.getContentEncoding());
		}
		else {
		    i += 6; // skip this unknown entity
		}
	    }
	    // print the end of the string
	    if(str != null) {
		out.print(str);
	    }
	} catch (Exception e) {
	    e.printStackTrace();
	    if(str != null) {
		out.print(str);
	    }
	}
    }
    
    static {
	// load the soaperror.properties
	URL url;
	messages = new Utf8Properties();
	try {
	    url = ErrorReportSOAP12.class.getResource("soaperror.properties");
	    java.io.InputStream f = url.openStream();
	    messages.load(f);
	    f.close();
	} catch (Exception e) {
	    System.err.println("org.w3c.css.error.ErrorReportSOAP12: "
			       + "couldn't load soap error messages properties ");
	    System.err.println("  " + e.toString());
	}
    }    
}

--- NEW FILE: ErrorReportHTML.java ---
// $Id: ErrorReportHTML.java,v 1.1 2005/07/22 09:45:01 ylafon Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2003.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.error;

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;

import org.w3c.css.servlet.CssValidator;
import org.w3c.css.util.ApplContext;
import org.w3c.css.util.Util;
import org.xml.sax.SAXParseException;

/**
 * ErrorReportHTML<br />
 * Created: Jul 13, 2005 2:05:51 PM<br />
 * This class is used to create an (x)html page when a URI error is thrown by the servlet
 */
public class ErrorReportHTML extends ErrorReport {
    
    //ApplContext ac;
    String title;
    Exception e;
    
    ErrorReportHTML(ApplContext ac, String title, String output, Exception e) {
	// ac is not used for now, but may be useful
	//this.ac     = ac;
	this.title  = title;
	this.e      = e;
    }
    
    /**
     * @see org.w3c.css.error.ErrorReport#print(java.io.PrintWriter)
     */
    public void print(PrintWriter out) {
	try {
	    URL localURL = ErrorReportHTML.class.getResource("error.html");
	    DataInputStream in = new DataInputStream(localURL.openStream());
	    try {
		while (true) {
		    out.print((char) in.readUnsignedByte());
		}
	    } catch (EOFException eof) {
		out.println("<h2>Target: " + Util.escapeHTML(title) + "</h2>");
		out.println("<div class=\"error\">");
		if (e instanceof IOException) {
		    out.println("<p>I/O Error: ");
		    out.println(Util.escapeHTML(e.getMessage()));
		} else if (e instanceof SAXParseException) {
		    SAXParseException saxe = (SAXParseException) e;
		    out.println("<p>Please, validate your XML document"
				+ " first!</p>");
		    if (saxe.getLineNumber() != -1) {
			out.print("<p>Line ");
			out.print(saxe.getLineNumber());
			out.println("</p>");
		    }
		    if (saxe.getColumnNumber() != -1) {
			out.print("<p>Column ");
			out.print(saxe.getColumnNumber());
			out.print("</p>\n");
		    }
		    out.println("<p>" + Util.escapeHTML(e.getMessage()));
		} else if (e instanceof NullPointerException) {
		    out.println("<p>Oups! Internal error!</p><p>");
		    e.printStackTrace();
		} else {
		    out.println(e.toString());
		}
		out.println("</p></div>\n<hr />\n<p><img src='images/mwc"
			    + "ss.gif' alt='made with CSS' /></p>\n<addres"
			    + "s><a href='Email.html'>www-validator-css</a"
			    + "></address>\n</body></html>");
		out.flush();
		/*
		 * System.err.println("CSS Validator: request failed.");
		 * e.printStackTrace();
		 */
	    }
	} catch (Exception unknown) {
	    if (out != null) {
		out.println("org.w3c.css.servlet.CssValidator: couldn't "
			    + "load  error file");
		out.flush();
	    }
	    unknown.printStackTrace();
	} finally {
	    if (out != null) {
		out.close();
	    }
	}
    }

}

--- NEW FILE: soaperror.properties ---
sender:\
<?xml version='1.0' encoding="<!-- #charset -->"?>\n\
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"\n\
            xmlns:m='http://www.w3.org/2005/07/css-validator'>\n\
  <env:Body>\n\
   <env:Fault>\n\
     <env:Code>\n\
       <env:Value>env:Sender</env:Value>\n\
       <env:Subcode>\n\
        <env:Value>m:Exception</env:Value>\n\
       </env:Subcode>\n\
     </env:Code>\n\
     <env:Reason>\n\
      <env:Text xml:lang="en-US"><!-- #reason --></env:Text>\n\
     </env:Reason>\n\
     <env:Detail>\n\
        <m:errordetail xml:lang="en-US">\n\
            Target: <!-- #details -->\n\
        </m:errordetail>\n\
     </env:Detail>\n\
   </env:Fault>\n\
 </env:Body>\n\
</env:Envelope>

receiver:\
<?xml version='1.0' encoding="<!-- #charset -->"?>\n\
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"\n\
            xmlns:m='http://www.w3.org/2005/07/css-validator'>\n\
  <env:Body>\n\
   <env:Fault>\n\
     <env:Code>\n\
       <env:Value>env:Receiver</env:Value>\n\
       <env:Subcode>\n\
        <env:Value>m:IOError</env:Value>\n\
       </env:Subcode>\n\
     </env:Code>\n\
     <env:Reason>\n\
      <env:Text xml:lang="en-US"><!-- #reason --></env:Text>\n\
     </env:Reason>\n\
     <env:Detail>\n\
        <m:errordetail xml:lang="en-US">\n\
            Details: "<!-- #details -->"\n\
        </m:errordetail>\n\
     </env:Detail>\n\
   </env:Fault>\n\
 </env:Body>\n\
</env:Envelope>

--- NEW FILE: ErrorReportFactory.java ---
// $Id: ErrorReportFactory.java,v 1.1 2005/07/22 09:45:01 ylafon Exp $
// Author: Jean-Guilhem Rouel
// (c) COPYRIGHT MIT, ERCIM and Keio, 2003.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.css.error;

import org.w3c.css.util.ApplContext;

/**
 * ErrorReportFactory<br />
 * Created: Jul 13, 2005 2:00:54 PM<br />
 */
public class ErrorReportFactory {
    /**
     * Give back an "ErrorReport" object based on various parameters, but mainly
     * output"
     */
    public static ErrorReport getErrorReport(ApplContext ac, String title,
   					     String output, Exception e,
   					     boolean validURI) {
   	if ((output == null) || (output.equals("html"))
   	    || (output.equals("xhtml"))) {
   	    return new ErrorReportHTML(ac, title, output, e);
   	}
   	if (output.equals("soap12")) {
   	    return new ErrorReportSOAP12(ac, title, output, e, validURI);
   	}
   	return new ErrorReportHTML(ac, title, output, e);
    }
}

--- NEW FILE: error.html ---
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
  <head>
    <meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
    <title>CSS Validator : Error</title>
    <link type="text/css" rel='stylesheet' href='http://jigsaw.w3.org/css-validator/style/error.css' />
  </head>

  <body>
    <div>
      <a href="http://www.w3.org/"><img src="http://www.w3.org/Icons/w3c_home" alt="w3c" /></a>
    </div>
    <hr />
    <div class="t1">CSS</div>
    <div class="t2">Validator</div>
    <div class="t3">Error</div>
      

Received on Friday, 22 July 2005 09:45:08 UTC