Have a look at the ExceptionMappingInterceptor, with a bit of tweaking I
believe you can achieve what you want.

http://struts.apache.org/release/2.0.x/struts2-core/apidocs/com/opensymphony/xwork2/interceptor/ExceptionMappingInterceptor.html

Antonios


On 29 October 2013 10:15, Vaishampayan, Shailesh Arvind <
svaishampa...@inautix.co.in> wrote:

>
>
>
>
>
> 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.
> ******************************************************

Reply via email to