Handle an exception that occurs inside an aspect-proxied component call.
← Design Patterns and Idioms · Ref: Q1117
Exceptions propagate through aspects unchanged:
calc as Calculator! try result <- calc.divide(0) stdout.println(`100 / 0 = ${result}`) catch -> ex as Exception stdout.println(`caught: ${ex.reason()}`)
A silent aspect does not catch or modify exceptions -- they pass straight through. In the example the component throws Exception("zero divisor") for a divisor of 0 and the caller's try/catch handles it exactly as if no aspect were present.
See Q1115 for basic aspect. See Q1116 for aspect with constructor.
Example
defines module qa.designpatterns.aspectexception defines component Calculator as abstract divide() as abstract -> divisor as Integer <- result as Integer? CheckedCalculator is Calculator override divide() -> divisor as Integer <- result as Integer? if divisor == 0 throw Exception("zero divisor") result: 100 / divisor defines class AuditAspect extends Aspect default operator ? defines application ExceptionApp register CheckedCalculator() as Calculator with aspect of AuditAspect() defines program AspectExceptionDemo() with application of ExceptionApp stdout <- Stdout() calc as Calculator! //Normal call through aspect result <- calc.divide(10) stdout.println(`100 / 10 = ${result}`) //An exception thrown by the component passes through the aspect to this try/catch try failed <- calc.divide(0) stdout.println(`100 / 0 = ${failed}`) catch -> ex as Exception stdout.println(`caught: ${ex.reason()}`)
Other ways to ask this
- I need to understand what happens when a proxied method throws through an aspect
- In Spring AOP exceptions propagate through advice. Show the EK9 aspect exception path
- Given a component that throws, verify the exception passes through the aspect to the caller
- Test exception propagation through an aspect proxy
Coming from another language?
Spring AOP: exceptions propagate through @Around advice unless caught. AspectJ: same propagation. EK9: same — exceptions pass through the aspect proxy transparently.
Keywords: aspect, proxy, try catch, exception, error, propagate