Hi Geert,
Haha -- thanks! :)
I just did quick test on your response 500 question with Jetty using, as
you said, PRETTY_ENGINE_EXCEPTIONS set to false. It looks like there
are two scenarios:
1) The 500 is caused by a failure in RIFE start up. In this case, Jetty
doesn't handle the situation (correctly) because there is no valid RIFE
instance to hand it to.
Tested by: using rife-crud-1.1-jdk14.jar and rife-crud-1.1-templates.jar
w/ a JDK 1.5 installation. These generate a "SEVERE:
java.lang.NoClassDefFoundError: rife/retroweaver/ClassLiteral" error for
me. Using the rife-crud-1.2-jdk15.jar and rife-crud-1.2-templates.jar
works fine. Alternately, I tried just commenting out the datasource in
the config.xml, and this only produced a 404, presumably because RIFE is
able to correctly identify a misconfiguration and gracefully shuts down
allowing the container to not install the mapping or filter.
2) The 500 is caused by an exception in an element in an otherwise valid
instance of RIFE. In this case, the error _is_ handled. This also
assumes the destination page doesn't have any exceptions of its own. :)
Tested by: coding an element to explicitly throw an EngineException,
then navigating to that element.
I also went ahead and tried doing a setRequestAttribute() (as you were
thinking) with the custom exception I was throwing in scenario 2, and I
was able to successfully read it and display it from the destination
page. So, your approach should work. Snippets are pasted following my sig.
Josh
--
Joshua Hansen
Up Bear Enterprises
(541) 760-7685 (new #)
======[ Exception-throwing Element snippet ]=========
...
public void processElement()
{
EngineException e = new EngineException("Bogus exception. Testing 500
response.");
setRequestAttribute("exception", e);
throw e;
}
...
=================================
======[ 'site.xml' (Destination Element) snippet ]=========
...
<element id="PAGE505" url="500"
implementation="com.test.ErrorPage">
<property name="name">500</property>
</element>
...
=================================
======[ 'ErrorPage.java' (Destination Element) snippet ]=========
...
public void processElement()
{
Template template = getHtmlTemplate("500");
if ( hasRequestAttribute("exception") ) {
EngineException e =
(EngineException)getRequestAttribute("exception");
String exString = e.toString();
String exHtmlText = exString.replaceAll("\n", "<br />\n");
template.setValue("error", exHtmlText );
} else {
template.setValue("error", "Unknown Error");
}
print(template);
}
...
=================================
======[ '500.html' template snippet ]=========
<!--I 'common.blueprint'/-->
<!--BV 'content' -->
<h1 class="top">Error</h1>
<!--V 'error'/-->
<a href="[!V 'EXIT:QUERY:home'/]">Home</a>
<!--/BV-->
=================================
======[ 'web.xml' snippets ]=========
...
<filter-mapping>
<filter-name>RIFE</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
...
<error-page>
<error-code>500</error-code>
<location>/500</location>
</error-page>
...
=================================
Geert Bevin wrote:
Hi Joshua,
thanks a lot for adding this page. I'm not sure I told you before, but
I think this is a very clever way of still adding error-page handling
until RIFE has native support for it. Even without that, it allows you
to easily build error-page handling with RIFE for any other solution :-)
Btw, have you tried to do this with other responses too, like 500, when
a real exception occurs? (you probably need to set
PRETTY_ENGINE_EXCEPTIONS config param to false). If those dispatchers
also work, then I wonder if the error handler has access to the same
request attributes as the initial handler. If so, I can add the
exception itself as a request attribute so that it can be introspected
by the error handler.
Best regards,
Geert
On 03 Jul 2006, at 17:33, Joshua Hansen wrote:
Hi Geert,
Good memory! I hadn't forgotten, but now was a good time for me to
go ahead and do it. Thanks for checking again and the reminder.
A writeup w/ explanation and slightly restructured info is now posted
on the Wiki under Tips and Tricks -> Using RIFE to Serve 404, 403,
etc. Responses :
http://rifers.org/wiki/display/RIFE/Using+RIFE+to+Serve+404%2C+403%
2C+etc.+Responses
Thanks for all the great work on RIFE!
Josh
Geert Bevin wrote:
Hey Josh,
If you're still planning on putting http://article.gmane.org/
gmane.comp.java.rife.user/2483 on the wiki, I think that this would
be the best place now: http://rifers.org/wiki/display/RIFE/ Tips+and
+Tricks
Take care,
Geert
On 03 Jul 2006, at 15:31, Joshua Hansen wrote:
Also here.
Josh
Geert Bevin wrote:
Hi guys,
Steve wrote me a small mail to ask if there was trouble with the
mailing list. Apparently he hasn't received many of this week's
posts. However, they are present in the archives.
Please reply to this message when you get it.
Thanks!
Geert
--
Geert Bevin
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Music and words - http://gbevin.com
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users
--
Geert Bevin
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Music and words - http://gbevin.com
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users
--
Geert Bevin
Uwyn "Use what you need" - http://uwyn.com
RIFE Java application framework - http://rifers.org
Music and words - http://gbevin.com
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users