Update of /cvsroot/springnet/Spring.Net/src/Spring/Spring.Aop/Aspects/Exceptions
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv9622/Exceptions
Modified Files:
ExceptionHandlerAdvice.cs
Log Message:
Update to Common.Logging 1.2
Add Logging advice
Refactoring of ExceptionHandlingAdvice
start of retry advice
misc improvements to spring.aop
Index: ExceptionHandlerAdvice.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/src/Spring/Spring.Aop/Aspects/Exceptions/ExceptionHandlerAdvice.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** ExceptionHandlerAdvice.cs 2 Oct 2007 21:56:53 -0000 1.5
--- ExceptionHandlerAdvice.cs 8 Oct 2007 22:05:16 -0000 1.6
***************
*** 23,26 ****
--- 23,27 ----
using System.Reflection;
using System.Text.RegularExpressions;
+ using System.Threading;
using AopAlliance.Intercept;
using Common.Logging;
***************
*** 70,74 ****
/// <author>Mark Pollack</author>
/// <version>$Id$</version>
! public class ExceptionHandlerAdvice : IMethodInterceptor, IInitializingObject
{
#region Fields
--- 71,75 ----
/// <author>Mark Pollack</author>
/// <version>$Id$</version>
! public class ExceptionHandlerAdvice : AbstractExceptionHandlerAdvice
{
#region Fields
***************
*** 78,81 ****
--- 79,86 ----
private IList exceptionHandlers = new ArrayList();
+ private string onExceptionNameRegex = @"^(on\s+exception\s+name)\s+(.*?)\s+(log|translate|wrap|replace|return|swallow)\s*(.*?)$";
+
+ private string onExceptionRegex = @"^(on\s+exception\s+)(\(.*?\))\s+(log|translate|wrap|replace|return|swallow)\s*(.*?)$";
+
#endregion
***************
*** 83,86 ****
--- 88,111 ----
/// <summary>
+ /// Gets or sets the Regex string used to parse advice expressions starting with 'on exception name' and exception handling actions.
+ /// </summary>
+ /// <value>The regex string to parse advice expressions starting with 'on exception name' and exception handling actions.</value>
+ public override string OnExceptionNameRegex
+ {
+ get { return onExceptionNameRegex; }
+ set { onExceptionNameRegex = value; }
+ }
+
+ /// <summary>
+ /// Gets or sets the Regex string used to parse advice expressions starting with 'on exception (constraint)' and exception handling actions.
+ /// </summary>
+ /// <value>The regex string to parse advice expressions starting with 'on exception (constraint)' and exception handling actions.</value>
+ public override string OnExceptionRegex
+ {
+ get { return onExceptionRegex; }
+ set { onExceptionRegex = value; }
+ }
+
+ /// <summary>
/// Gets or sets the exception handler.
/// </summary>
***************
*** 119,123 ****
/// throws an exception.
/// </exception>
! public object Invoke(IMethodInvocation invocation)
{
try
--- 144,148 ----
/// throws an exception.
/// </exception>
! public override object Invoke(IMethodInvocation invocation)
{
try
***************
*** 138,142 ****
if (returnVal.Equals("logged"))
{
! throw ex;
}
--- 163,167 ----
if (returnVal.Equals("logged"))
{
! throw;
}
***************
*** 146,150 ****
if (returnVal.Equals("nomatch"))
{
! throw ex;
}
else
--- 171,175 ----
if (returnVal.Equals("nomatch"))
{
! throw;
}
else
***************
*** 193,197 ****
/// required property) or if initialization fails.
/// </exception>
! public void AfterPropertiesSet()
{
if (exceptionHandlers.Count == 0)
--- 218,222 ----
/// required property) or if initialization fails.
/// </exception>
! public override void AfterPropertiesSet()
{
if (exceptionHandlers.Count == 0)
***************
*** 206,209 ****
--- 231,239 ----
{
IExceptionHandler handler = Parse(handlerString);
+ if (handler == null)
+ {
+ throw new ArgumentException("Was not able to parse exception handler string [" + handlerString +
+ "]");
+ }
newExceptionHandlers.Add(handler);
}
***************
*** 253,292 ****
/// </summary>
/// <param name="handlerString">The handler string.</param>
! /// <returns>an instance of an exception handler.</returns>
protected virtual IExceptionHandler Parse(string handlerString)
{
! // parts to parse out of string
! string[] exceptionNames = new string[0];
! string constraintExpression = null;
! string actionExpressionText = null;
! string actionText = null;
!
! // is string of expected format?
! bool success = false;
! Match match = GetMatchUsingExceptionNames(handlerString);
! if (match.Success)
! {
! success = true;
! //using exception names for exception filter
! exceptionNames = StringUtils.CommaDelimitedListToStringArray(match.Groups[2].Value.Trim());
! actionText = match.Groups[3].Value.Trim();
! actionExpressionText = match.Groups[4].Value.Trim();
! }
! else
! {
! match = GetMatchUsingExceptionConstraintExpression(handlerString);
! if (match.Success)
! {
! success = true;
! //using constratin expression for exception filter
! constraintExpression = match.Groups[2].Value.Trim().Remove(0, 1);
! constraintExpression = constraintExpression.Substring(0, constraintExpression.Length - 1);
! actionText = match.Groups[3].Value.Trim();
! actionExpressionText = match.Groups[4].Value.Trim();
! }
! }
!
! if (!success)
{
log.Warn("Could not parse exception hander statement " + handlerString);
--- 283,293 ----
/// </summary>
/// <param name="handlerString">The handler string.</param>
! /// <returns>an instance of an exception handler or null if was not able to correctly parse
! /// handler string.</returns>
protected virtual IExceptionHandler Parse(string handlerString)
{
! ParsedAdviceExpression parsedAdviceExpression = ParseAdviceExpression(handlerString);
! if (!parsedAdviceExpression.Success)
{
log.Warn("Could not parse exception hander statement " + handlerString);
***************
*** 294,348 ****
}
!
! return CreateExceptionHandler(handlerString, exceptionNames, constraintExpression, actionText, actionExpressionText);
}
! private static IExceptionHandler CreateExceptionHandler(string handlerString, string[] exceptionNames, string constraintExpression, string actionText, string actionExpressionText)
{
! if (actionText.IndexOf("log") >= 0)
{
//TODO support user selection of level, log.Debug , log.Info etc.
! LogExceptionHandler handler = new LogExceptionHandler(exceptionNames);
! handler.ConstraintExpressionText = constraintExpression;
! handler.ActionExpressionText = "#log.Debug(" + actionExpressionText + ")";
return handler;
}
! else if (actionText.IndexOf("translate") >= 0)
{
! TranslationExceptionHandler handler = new TranslationExceptionHandler(exceptionNames);
! handler.ConstraintExpressionText = constraintExpression;
! handler.ActionExpressionText = actionExpressionText;
return handler;
}
! else if (actionText.IndexOf("wrap") >= 0)
{
! TranslationExceptionHandler handler = new TranslationExceptionHandler(exceptionNames);
! handler.ConstraintExpressionText = constraintExpression;
! handler.ActionExpressionText = ParseWrappedExceptionExpression("wrap", handlerString);
return handler;
}
! else if (actionText.IndexOf("replace") >= 0)
{
! TranslationExceptionHandler handler = new TranslationExceptionHandler(exceptionNames);
! handler.ConstraintExpressionText = constraintExpression;
! handler.ActionExpressionText = ParseWrappedExceptionExpression("replace", handlerString);
return handler;
}
! else if (actionText.IndexOf("swallow") >= 0)
{
! SwallowExceptionHandler handler = new SwallowExceptionHandler(exceptionNames);
! handler.ConstraintExpressionText = constraintExpression;
return handler;
}
! else if (actionText.IndexOf("return") >= 0)
{
! ReturnValueExceptionHandler handler = new ReturnValueExceptionHandler(exceptionNames);
! handler.ConstraintExpressionText = constraintExpression;
! handler.ActionExpressionText = actionExpressionText;
return handler;
}
else
{
! log.Warn("Could not parse exception hander statement " + handlerString);
}
return null;
--- 295,348 ----
}
! return CreateExceptionHandler(parsedAdviceExpression);
}
! private static IExceptionHandler CreateExceptionHandler(ParsedAdviceExpression parsedAdviceExpression)
{
! if (parsedAdviceExpression.ActionText.IndexOf("log") >= 0)
{
//TODO support user selection of level, log.Debug , log.Info etc.
! LogExceptionHandler handler = new LogExceptionHandler(parsedAdviceExpression.ExceptionNames);
! handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
! handler.ActionExpressionText = "#log.Debug(" + parsedAdviceExpression.ActionExpressionText + ")";
return handler;
}
! else if (parsedAdviceExpression.ActionText.IndexOf("translate") >= 0)
{
! TranslationExceptionHandler handler = new TranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
! handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
! handler.ActionExpressionText = parsedAdviceExpression.ActionExpressionText;
return handler;
}
! else if (parsedAdviceExpression.ActionText.IndexOf("wrap") >= 0)
{
! TranslationExceptionHandler handler = new TranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
! handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
! handler.ActionExpressionText = ParseWrappedExceptionExpression("wrap", parsedAdviceExpression.AdviceExpression);
return handler;
}
! else if (parsedAdviceExpression.ActionText.IndexOf("replace") >= 0)
{
! TranslationExceptionHandler handler = new TranslationExceptionHandler(parsedAdviceExpression.ExceptionNames);
! handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
! handler.ActionExpressionText = ParseWrappedExceptionExpression("replace", parsedAdviceExpression.AdviceExpression);
return handler;
}
! else if (parsedAdviceExpression.ActionText.IndexOf("swallow") >= 0)
{
! SwallowExceptionHandler handler = new SwallowExceptionHandler(parsedAdviceExpression.ExceptionNames);
! handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
return handler;
}
! else if (parsedAdviceExpression.ActionText.IndexOf("return") >= 0)
{
! ReturnValueExceptionHandler handler = new ReturnValueExceptionHandler(parsedAdviceExpression.ExceptionNames);
! handler.ConstraintExpressionText = parsedAdviceExpression.ConstraintExpression;
! handler.ActionExpressionText = parsedAdviceExpression.ActionExpressionText;
return handler;
}
else
{
! log.Warn("Could not parse exception hander statement " + parsedAdviceExpression.AdviceExpression);
}
return null;
***************
*** 384,402 ****
}
- private Match GetMatchUsingExceptionNames(string handlerString)
- {
- string regex = @"^(on\s+exception\s+name)\s+(.*?)\s+(log|translate|wrap|replace|return|swallow)\s*(.*?)$";
- RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
- Regex reg = new Regex(regex, options);
- return reg.Match(handlerString);
- }
- private Match GetMatchUsingExceptionConstraintExpression(string handlerString)
- {
- string regex = @"^(on\s+exception\s+)(\(.*?\))\s+(log|translate|wrap|replace|return|swallow)\s*(.*?)$";
- RegexOptions options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
- Regex reg = new Regex(regex, options);
- return reg.Match(handlerString);
- }
#endregion
--- 384,388 ----
|