aboutsummaryrefslogtreecommitdiffstats
path: root/tests/bugs151/pr127299/ModelErrorConversion.aj
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bugs151/pr127299/ModelErrorConversion.aj')
-rw-r--r--tests/bugs151/pr127299/ModelErrorConversion.aj51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/bugs151/pr127299/ModelErrorConversion.aj b/tests/bugs151/pr127299/ModelErrorConversion.aj
new file mode 100644
index 000000000..3366e15ca
--- /dev/null
+++ b/tests/bugs151/pr127299/ModelErrorConversion.aj
@@ -0,0 +1,51 @@
+aspect ModelErrorConversion {
+
+
+ // convert exception types
+ after(Entity entity) throwing (HibernateException e): modelExec(entity) {
+ convertException(e, entity, thisJoinPoint);
+ }
+ after(Entity entity) throwing (ServiceException e): modelExec(entity) {
+ convertException(e, entity, thisJoinPoint);
+ }
+ after(Entity entity) throwing (SOAPException e): modelExec(entity) {
+ convertException(e, entity, thisJoinPoint);
+ }
+ after(Entity entity) throwing (SOAPFaultException e): modelExec(entity) {
+ convertException(e, entity, thisJoinPoint);
+ }
+
+ /** execution of any method in the model */
+ pointcut modelExecStatic() :
+ execution(* model..*(..));
+
+ pointcut modelExec(Entity entity) :
+ modelExecStatic() && this(entity);
+ // soften the checked exceptions
+ declare soft: ServiceException: modelExecStatic();
+ declare soft: SOAPException: modelExecStatic();
+
+
+ /** Converts exceptions to model exceptions, storing context */
+ private void convertException(Exception e, Entity entity,
+ JoinPoint jp) {
+ ModelException me = new ModelException(e);
+ me.setEntity(entity);
+ me.setArgs(jp.getArgs());
+ // ModelException extends RuntimeException, so this is unchecked
+ throw me;
+ }
+}
+
+class HibernateException extends RuntimeException {}
+class ServiceException extends Exception {}
+class SOAPException extends Exception {}
+class SOAPFaultException extends RuntimeException {}
+
+class Entity {}
+
+class ModelException extends RuntimeException {
+ public ModelException(Throwable t) { super(t); }
+ public void setEntity(Entity entity) {}
+ public void setArgs(Object[] argz) {}
+}