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>