I am working with an application involving Struts2 in web layer and Spring in
business layer. I also have BusinessException class which will be used by all
business services to create business related validation failures which must go
up to web layer and should be shown to users as validation message(s). I can
easily do this by writing in my Action class:
ClientAction extends ActionSupport throws Exception{
....
try{
clientService.searchClient();
}catch(InvalidClientSearchCriteriaException e){
addActionMessage("Invlid Search Criteria");
}
...
And similar code in every action class. However i dont want to pollute my
action classes with try catch blocks. Instead it would be much better if i can
write on try catch block at one place and catch all the exceptions there as
BusinessExceptions and create messages /errors from embedded messages/errors in
those exceptions. One approach i could think of was to use interceptor or
preresult listener. But I cannot use interceptor like below which catches
BusinessExceptions thrown from action classes...
ExceptionInterceptor extends AbstractInterceptor(ActionInvocation
ivocation,...){
try{
invocation.invoke();
}catch(Exception e){
if(e instanceof BusinessException){
ActionSupport as = (ActionSupport)invocation.getAction();
String message = extractMessagefromException()//--custom
method to extract message embedded in exception.
as.addActionMessages(message);
//-- above will not work result has already been rendered right? and
hence it wouldn't matter if i add action messages now.
}
}
}
Second approach of using pre-result listener is to add action messages just
like above in pre-result listener's method, as result is yet to be rendered and
I can safely change that. However I am not sure if pre-result listener will
ever execute, if exception is thrown in action ? And even if it does, how i can
get the exception object thrown by the action ?
Please let me know any other approach by which i don't have to clutter my
classes with try-catch block
******************************************************
This message and any files or attachments sent with this message contain
confidential information and is intended only for the individual named. If you
are not the named addressee, you should not disseminate, distribute, copy or
use any part of this email. If you have received this message in error, please
delete it and all copies from your system and notify the sender immediately by
return Email.
Email transmission cannot be guaranteed to be secure or error-free as
information can be intercepted, corrupted, lost, destroyed, late, incomplete or
may contain viruses. The sender, therefore, does not accept liability for any
errors or omissions in the contents of this message, which arise as a result of
email transmission.
******************************************************
How to handle business exceptions from service layer in struts 2 at only one place
Vaishampayan, Shailesh Arvind Tue, 29 Oct 2013 04:40:33 -0700
- How to handle business exceptions from servi... Vaishampayan, Shailesh Arvind
- Re: How to handle business exceptions f... Antonios Gkogkakis
- Re: How to handle business exceptions f... Lukasz Lenart

