Sometimes there is only a "business exception", other times there is an underlying exception followed by a business exception. So the business object is thrown a SQL error, wraps it, and throws its own version. Other times, there can be a business logic error that doesn't wrap anything else.
Sandeep Takhar wrote: > > Thanks Ted & Paul. > > As always, a useful piece of the puzzle. > > Just wondering what you need the isCause() method. I > read the article about exception handling, but when > you write the detail message -- won't this write the > cause out for you? > > Where would you not have the cause? > > Also: the business error -- is it the last one thrown > or the first? The cause: is this the last one thrown > or the first? > > thanks, > > Sandeep > --- Ted Husted <[EMAIL PROTECTED]> wrote: > > I basically do the same thing as Paul. My business > > objects throw > > their own exceptions, which I can catch. These > > exception classes > > are "chained" and often include more than one > > message: the initial > > cause and my business explanation. I use the > > ActionError class to > > send this to the JSP. Since they ActionError can > > handle a queue of > > messages, I start with a generic "Oops" message, > > followed by the > > more specific business error, followed by the > > geek-speak initial > > cause. This way everybody is happy! > > > > ActionErrors errors = new ActionErrors(); > > ModelResult modelResult = null; > > > > try { > > modelResult = getResult( > > mapping,form,request,response,helpers); > > } > > catch (ModelException e) { > > // Log and print to error console > > servlet.log("Model Exception: ", e ); > > e.printStackTrace(); > > // General error message > > errors.add(ActionErrors.GLOBAL_ERROR, > > new ActionError("error.general")); > > // Generate error messages from exceptions > > errors.add(ActionErrors.GLOBAL_ERROR, > > new ActionError("error.detail",e.getMessage())); > > if (e.isCause()) { > > errors.add(ActionErrors.GLOBAL_ERROR, > > new > > ActionError("error.detail",e.getCauseMessage())); > > } > > } > > > > The "error.detail" is one big replacement parameter > > > > error.detail={0} > > > > Then I look for an input mapping, and use that for > > the error > > page if there is one. If not, I look for a generic > > "error" page instead. > > > > // -- Report any errors > > if (!errors.empty()) { > > saveErrors(request, errors); > > if (mapping.getInput()!=null) > > return (new ActionForward(mapping.getInput())); > > // If no input page, use error forwarding > > return (mapping.findForward(Tokens.ERROR)); > > } > > > > The chained exception class is based on Brian Goetz' > > class. > > > > > http://www.javaworld.com/javaworld/jw-08-2001/jw-0803-exceptions.html > > > > -Ted. > > > > -- > > To unsubscribe, e-mail: > > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > > <mailto:[EMAIL PROTECTED]> > > > > __________________________________________________ > Do You Yahoo!? > Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month. > http://geocities.yahoo.com/ps/info1 > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- Ted Husted, Husted dot Com, Fairport NY USA. -- Custom Software ~ Technical Services. -- Tel +1 716 737-3463 -- http://www.husted.com/struts/ -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>