DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8026>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8026

Exceptions in StandardHostDeployer.addChild are lost through invokeMethod

           Summary: Exceptions in StandardHostDeployer.addChild are lost
                    through invokeMethod
           Product: Tomcat 4
           Version: Nightly Build
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Catalina
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


The value of "Method.invoke()" is not debatable.  However, it has its issues,
outside of pure performance questions.  one annoyance with it is the
"InvocationTargetException" that it can throw.  The meaning of this is that the
called method threw an exception.  It doesn't note WHAT the exception was, just
that it threw an exception.  If the called method didn't log or print the
exception in some way, there's no way to know what happened.

This is what can happen when the Digester is parsing the Tomcat configuration files.

I made a mistake in merging changes from my old 4.0.4b2 "server.xml" into the
CVS latest "server.xml".  I ended up putting the "manager" Context into the new
"server.xml".  I didn't notice the "manager.xml" in webapps.  I guess that
somehow takes the place of the Context in the "server.xml" (although I can't
quite get "manager" to work yet).  Anyway, when Tomcat starts up with the bad
"manager" Context, I eventually get an error from "MethodUtils.invokeMethod",
being an InvocationTargetException.  This is all I get.  I don't even know what
method it was invoking.

I eventually had to build the latest Tomcat from CVS, and I added a print
statement in that method, showing every method it was calling.  I noticed the
last one before it died, which was "StandardHostDeployer.addChild()".  When I
broke in that method in the debugger, it pointed out the problem to me, as it
attempted to throw an IllegalStateException, which would have been thrown away.

I'm not certain whether this should be reported against Tomcat, or Commons.  The
real problem is that "Method.invoke()" can't record exceptions thrown from the
called method, but I doubt that'll be changed anytime soon.

In Tomcat, you could try to log all exceptions that "might" be called from the
Digester, which is probably impractical.

I would guess the best fix would be to have the direct or indirect caller of
"MethodUtils.invokeMethod()" to log the ITE exception, indicating the method
that was called.  That would at least point someone to the method, which is
better than nothing.

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to