<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>modules/helma/middleware/error.js</filename>
    </added>
    <added>
      <filename>modules/helma/middleware/notfound.js</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -13,6 +13,8 @@ exports.middleware = [
     'helma/middleware/gzip',
     'helma/middleware/etag',
     'helma/middleware/responselog',
+    'helma/middleware/error',
+    'helma/middleware/notfound'
     // 'helma/middleware/profiler'
 ];
 </diff>
      <filename>apps/demo/config.js</filename>
    </modified>
    <modified>
      <diff>@@ -7,13 +7,12 @@ require('core/string');
 
 include('helma/webapp/request');
 include('helma/webapp/response');
-include('helma/buffer');
 
 import('helma/engine', 'engine');
 import('helma/httpserver', 'server');
 import('helma/logging', 'logging');
 
-export('start', 'stop', 'getConfig', 'handleRequest', 'error', 'notfound');
+export('start', 'stop', 'getConfig', 'handleRequest');
 
 var log = logging.getLogger(module.id);
 
@@ -48,13 +47,11 @@ function handleRequest(env) {
     
     try {
         res = resolveInConfig(req, config, actionPath, decodeURI(path), &quot;&quot;);
-    } catch (e) {
+    } catch (e if (e.retry || e.redirect)) {
         if (e.retry) {
             throw e;
         } else if (e.redirect) {
             return new RedirectResponse(e.redirect);
-        } else {
-            res = error(req, e);
         }
     }
     return res;
@@ -105,7 +102,7 @@ function resolveInConfig(req, config, actionPath, path, prefix) {
                     actionPath.push(match[0]);
                     return resolveInConfig(req, module, actionPath, path, match[0] + &quot;/&quot;);
                 } else {
-                    return notfound(req);
+                    throw {notfound: true};
                 }
             }
         }
@@ -145,70 +142,6 @@ function getAction(module, name) {
 }
 
 /**
- * Standard error page
- * @param e the error that happened
- */
-function error(req, e) {
-    var res = new Response();
-    res.status = 500;
-    res.contentType = 'text/html';
-    var msg = String(e).escapeHtml();
-    res.writeln('&lt;html&gt;&lt;title&gt;', msg, '&lt;/title&gt;');
-    res.writeln('&lt;body&gt;&lt;h1&gt;', msg, '&lt;/h1&gt;');
-    var errors = engine.getErrors();
-    for each (var error in errors) {
-        res.writeln(renderSyntaxError(error));
-    }
-    if (e.fileName &amp;&amp; e.lineNumber) {
-        res.writeln('&lt;p&gt;In file&lt;b&gt;', e.fileName, '&lt;/b&gt;at line&lt;b&gt;', e.lineNumber, '&lt;/b&gt;&lt;/p&gt;');
-    }
-    if (e.rhinoException) {
-        res.writeln('&lt;h3&gt;Script Stack&lt;/h3&gt;');
-        res.writeln('&lt;pre&gt;', e.rhinoException.scriptStackTrace, '&lt;/pre&gt;');
-        res.writeln('&lt;h3&gt;Java Stack&lt;/h3&gt;');
-        var writer = new java.io.StringWriter();
-        var printer = new java.io.PrintWriter(writer);
-        e.rhinoException.printStackTrace(printer);
-        res.writeln('&lt;pre&gt;', writer.toString().escapeHtml(), '&lt;/pre&gt;');
-        log.error(msg, e.rhinoException);
-    } else {
-        log.error(msg);
-    }
-    res.writeln('&lt;/body&gt;&lt;/html&gt;');
-    return res.close();
-}
-
-function renderSyntaxError(error) {
-    var buffer = new Buffer();
-    buffer.write(&quot;&lt;div class='stack'&gt;in &quot;).write(error.sourceName);
-    buffer.write(&quot;, line &quot;).write(error.line);
-    buffer.write(&quot;: &lt;b&gt;&quot;).write(error.message).write(&quot;&lt;/b&gt;&lt;/div&gt;&quot;);
-    if (error.lineSource) {
-        buffer.write(&quot;&lt;pre&gt;&quot;).write(error.lineSource).write(&quot;\n&quot;);
-        for (var i = 0; i &lt; error.offset - 1; i++) {
-            buffer.write(' ');
-        }
-        buffer.write(&quot;&lt;b&gt;^&lt;/b&gt;&lt;/pre&gt;&quot;);
-    }
-    return buffer;
-}
-
-/**
- * Standard notfound page
- */
-function notfound(req) {
-    var res = new Response();
-    var msg = 'Not Found';
-    res.status = 404;
-    res.contentType = 'text/html';
-    res.writeln('&lt;html&gt;&lt;title&gt;', msg, '&lt;/title&gt;');
-    res.writeln('&lt;body&gt;&lt;h2&gt;', msg, '&lt;/h2&gt;');
-    res.writeln('&lt;p&gt;The requested URL', req.pathDecoded, 'was not found on the server.&lt;/p&gt;');
-    res.writeln('&lt;/body&gt;&lt;/html&gt;');
-    return res.close();
-}
-
-/**
  * Try to load the configuration module.
  * @param configModuleName optional module name, default is 'config'
  */</diff>
      <filename>modules/helma/webapp.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f2b63a0c318109bcbea4ab78cf67b0c1f492231a</id>
    </parent>
  </parents>
  <author>
    <name>Hannes Walln&#246;fer</name>
    <email>hannesw@gmail.com</email>
  </author>
  <url>http://github.com/hns/helma-ng/commit/c0bc044fa8b8ca1995e8b514c469998273148d6f</url>
  <id>c0bc044fa8b8ca1995e8b514c469998273148d6f</id>
  <committed-date>2009-11-07T21:40:45-08:00</committed-date>
  <authored-date>2009-11-07T21:40:45-08:00</authored-date>
  <message>Move error and 404 handling from helma/webapp into dedicated middleware</message>
  <tree>ac44e29baecbd89a16e4579fb5fed6adde7882e9</tree>
  <committer>
    <name>Hannes Walln&#246;fer</name>
    <email>hannesw@gmail.com</email>
  </committer>
</commit>
