Author: jstrachan
Date: Mon Nov 28 12:12:10 2011
New Revision: 1207097
URL: http://svn.apache.org/viewvc?rev=1207097&view=rev
Log:
Fixes CAMEL-4719 so camel-web works better inside WebLogic; avoiding the use of
the scalate console unless its present and in debig mode and having a
precompiled error page to avoid unnecessary runtime compilation of scalate
templates. Also used the simpler scalate filter which adds support for jade,
markdown, confluence etc easier with less boilerplate XML in web.xml
Added:
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml
Modified:
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml
Added:
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml?rev=1207097&view=auto
==============================================================================
---
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml
(added)
+++
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/error.scaml
Mon Nov 28 12:12:10 2011
@@ -0,0 +1,212 @@
+-#
+-# Copyright (C) 2009-2011 the original author or authors.
+-# See the notice.md file distributed with this work for additional
+-# information regarding copyright ownership.
+-#
+-# 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.
+-#
+- if ( !engine.isDevelopmentMode )
+ .scalate-error-500
+ %h1 Server Error: We're sorry, but something went wrong.
+ %p We've been notified about this issue and we'll take a look at it
shortly.
+
+- else
+ - import util.parsing.input.Position
+ - import org.fusesource.scalate._
+ - import org.fusesource.scalate.console._
+ - val consoleHelper = new ConsoleHelper(context)
+ - import consoleHelper._
+ - response.setContentType("text/html")
+ - attributes("layout") = ""
+ !!! Basic
+ %html(lang="en")
+ %head
+ %meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
+ %meta(name="keywords" content="error")
+ %title Unexpected Failure
+ %style(type="text/css")
+ :plain
+ html, body {
+ margin: 0;
+ padding: 0;
+ font-family: Helvetica, Arial, Sans;
+ background: #EEEEEE;
+ }
+ .block {
+ padding: 20px;
+ border-bottom: 1px solid #aaa;
+ }
+ #scalate-error .header h1 {
+ font-weight: normal;
+ font-size: 28px;
+ margin: 0;
+ }
+ #scalate-error .more {
+ color: #666;
+ font-size: 80%;
+ border: none;
+ }
+ #scalate-error .header {
+ background: #fcd2da;
+ }
+ #scalate-error .header p {
+ color: #333;
+ }
+ #scalate-error .details {
+ background: #f6f6f6;
+ }
+ #scalate-error .details h2 {
+ font-weight: normal;
+ font-size: 18px;
+ margin: 0 0 10px 0;
+ }
+ #scalate-error .details .lineNumber {
+ float: left;
+ display: block;
+ width: 40px;
+ text-align: right;
+ margin-right: 10px;
+ font-size: 14px;
+ font-family: monospace;
+ background: #333;
+ color: #fff;
+ }
+ #scalate-error .details .line {
+ clear: both;
+ color: #333;
+ margin-bottom: 1px;
+ }
+ #scalate-error .details pre {
+ font-size: 14px;
+ margin: 0;
+ overflow-x: hidden;
+ }
+ #scalate-error .details .error {
+ color: #c00 !important;
+ }
+ #scalate-error .details .error .lineNumber {
+ background: #c00;
+ }
+ #scalate-error .details .errorCol {
+ background: #c00;
+ color:#fff;
+ }
+ #scalate-error .details a {
+ text-decoration: none;
+ }
+ #scalate-error .details a:hover * {
+ cursor: pointer !important;
+ }
+ #scalate-error .details a:hover pre {
+ background: #FAFFCF !important;
+ }
+
+ #scalate-error .details .stacktrace {
+ clear: both;
+ color: #333;
+ margin-bottom: 1px;
+ font-size: 10px;
+ }
+
+ #scalate-error .nested {
+ padding-top:10px;
+ padding-left:10px;
+ }
+
+ #scalate-error .nested .block {
+ padding:10px;
+ }
+ #scalate-error .nested .header {
+ font-size:10px;
+ }
+ #scalate-error .nested .header h1 {
+ font-size:16px;
+ }
+ %body
+ #content
+ .wrapper
+ -# Wrap in a try catch block so if there is a error on this page it
gets logged to the console
+ - try
+ %link(href={uri("/css/scalate/errors.css")} rel="stylesheet"
type="text/css")
+
+ - def displayError(file:String, pos:Position, message:String)
+ .header.block
+ %h1
+ = message
+
+ .details.block
+ %h2
+ = editLink(file, pos.line, pos.column)
+ in #{shorten(file)} near line #{pos.line} col #{pos.column}
+
+ - for (s <- lines(file, pos))
+ - val ss = s.style(pos.line)
+ = editLink(file, s.line, (if (pos.line == s.line) pos.column
else 1))
+ %div(class=ss)
+ %span.lineNumber
+ = s.line
+ - if (pos.line == s.line)
+ - val (prefix, ch, postfix) =
s.splitOnCharacter(pos.column - 1)
+ %pre<
+ &~ prefix
+ %span.errorCol><
+ &~ ch
+ &~ postfix
+ - else
+ %pre<
+ &~ s.source
+
+ - def displayException(e:Throwable)
+ .header.block
+ %h1
+ = e.getMessage
+ %p
+ = e
+ .details.block
+ - for( stack <- e.getStackTrace )
+ = renderStackTraceElement(stack)
+ - if( e.getCause!=null )
+ .nested
+ - displayException(e.getCause)
+
+ #scalate-error
+ - exception match
+ - case e:InvalidSyntaxException =>
+ - displayError( e.template, e.pos, e.brief)
+
+ - case e:CompilerException =>
+ - for ( error <- e.errors )
+ - displayError(error.file, error.pos, error.message)
+ - val o = error.original
+ - if (o != null)
+ .section.block
+ = editLink(o.file, o.pos.line, o.pos.column)
+ from generated #{shorten(o.file)} near line
#{o.pos.line} col #{o.pos.line}
+
+ - case e:Throwable =>
+ - displayException(e)
+
+ - case u =>
+ .header.block
+ %h1
+ = errorMessage
+ %p
+ = u
+ - catch
+ - case e:Throwable=>
+ - e.printStackTrace
+ -# Fallback to a simple rendering of the error message
+ .header.block
+ %h1
+ = errorMessage
+
Modified:
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml?rev=1207097&r1=1207096&r2=1207097&view=diff
==============================================================================
---
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
(original)
+++
camel/trunk/components/camel-web/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
Mon Nov 28 12:12:10 2011
@@ -20,16 +20,22 @@
-@ var body: String
-@ var title : String = "Camel Web Console"
- response.setContentType("text/html")
+
+-# Only include the console if it's available and the engine is in dev mode.
+- val include_console = engine.isDevelopmentMode &&
engine.resourceLoader.exists("/org/fusesource/scalate/console/console_head.scaml")
+
%html(lang="en")
%head
%meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
%meta(name="description" content="Apache Camel Console")
%meta(name="keywords" content="camel,eip,web")
- = include("/org/fusesource/scalate/console/console_head.scaml")
+ - if (include_console)
+ = include("/org/fusesource/scalate/console/console_head.scaml")
%link(href={uri("/css/site.css")} rel="stylesheet" type="text/css")
- %link(href={uri("/css/scalate/console.css")} rel="stylesheet"
type="text/css")
+ - if (include_console)
+ %link(href={uri("/css/scalate/console.css")} rel="stylesheet"
type="text/css")
%link(href={uri("/css/sorttable.css")} rel="stylesheet" type="text/css")
%link(href={uri("/css/type-settings.css")} rel="stylesheet"
type="text/css")
@@ -104,7 +110,8 @@
(
%a{:href => "?printable=true"}> printable version
)
- = include("/org/fusesource/scalate/console/console.scaml")
+ - if (include_console)
+ = include("/org/fusesource/scalate/console/console.scaml")
.design_attribution
%a{:href => "http://hiramchirino.com/"} Graphic Design By Hiram
\ No newline at end of file
Modified: camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml?rev=1207097&r1=1207096&r2=1207097&view=diff
==============================================================================
--- camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml (original)
+++ camel/trunk/components/camel-web/src/main/webapp/WEB-INF/web.xml Mon Nov 28
12:12:10 2011
@@ -75,27 +75,17 @@
<url-pattern>/*</url-pattern>
</filter-mapping>
- <servlet>
- <servlet-name>TemplateEngineServlet</servlet-name>
-
<servlet-class>org.fusesource.scalate.servlet.TemplateEngineServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>TemplateEngineServlet</servlet-name>
- <url-pattern>*.mustache</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>TemplateEngineServlet</servlet-name>
- <url-pattern>*.scaml</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <servlet-name>TemplateEngineServlet</servlet-name>
- <url-pattern>*.ssp</url-pattern>
- </servlet-mapping>
+ <filter>
+ <filter-name>TemplateEngineFilter</filter-name>
+
<filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>TemplateEngineFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
<error-page>
<error-code>500</error-code>
- <location>/WEB-INF/scalate/errors/500.scaml</location>
+ <location>/WEB-INF/scalate/error.scaml</location>
</error-page>
</web-app>