Hi,
I would like to catch all of our project specific exceptions in one place (as a
last resort, if nobody else catches them earlier on) and handle them in a
generic way. The obvious way to do this, I think, is by overriding
processActionPerform in our own <Project>ActionServlet and catch
<Project>Exception's (superclass for all our own exceptions) there. But the
Action.perform method only throws IOException & ServletException, so either all
our own exceptions will have to inherit from either of those two classes (can't
be the right thing to do), or I will have to change the Action.perform
definition to also throw our <Project>Exception's (doesn't seem right either,
I'd prefer not to have to alter any struts code)?
What should I do?
This actually brings me to another problem that doesn't have anything to do
with struts, but is more a general Java question. Anyway, maybe somebody here
has an elegant solution to it:
Assume the problem above is solved and furthermore that some of the project
specific exceptions have to inherit from other existing exception classes (e.g.
ServletException, IOException, etc.). Since we don't have multiple inheritance,
I can't have a <Project>Exception that is a superclass to all my own
exceptions. I still want to catch all our own exceptions (but no others) in one
place. My first though was of course to define a <Project>Exception interface
and let all our own exceptions implement this interface, thus being able only
to catch <Project>Exception's. But Throwable is not an interface (why not?
What's the idea behind this design?) that <Project>Exception could inherit from
and thus this approach doesn't work, as the try{}catch(){} statement expects a
Throwable object as parameter (try{}catch(<Project>Exception e){} doesn't
compile).
Well, as a kind of a hack I then thought I'll catch all exceptions, check if it
is a project specific one (<Project>Exception.class.isInstance(anException)),
and if not throw it again, but that can't be right, because the method where
this happens then will have to be declared to throw Exception (to generic).
I'll appreciate any help, thanks in advance and the best satisfactory answer
wins a free beer in Zurich ;-)
Klaus Bucka-Lassen