#!/usr/bin/env bash # Every pointcut designator Spring AOP supports, with what it actually matched. set -euo pipefail set +m cd "$(dirname "$0")/.." source scripts/env.sh { echo "== which designator matched which join point ==" echo echo "Five methods are called once each: OrderService.place, OrderService.cancel," echo "InventoryService.reserve, InventoryService.finalCheck and" echo "DefaultOrderService.interfaceless." echo start_app > /dev/null curl -s "http://127.0.0.1:${APP_PORT}/aop/designators" | python3 -c ' import json,sys d=json.load(sys.stdin) print(" orderService proxy kind :", d["orderServiceProxyKind"]) print(" proxy is an instance of DefaultOrderService :", d["orderServiceIsDefaultOrderServiceInstance"]) print() for k,v in d["matches"].items(): print(" %-32s -> %s" % (k, ", ".join(v)))' echo echo "== what the parser accepts and refuses ==" echo curl -s "http://127.0.0.1:${APP_PORT}/aop/parser" | python3 -c ' import json,sys d=json.load(sys.stdin) print(" supported (all parsed and evaluated):") for r in d["supported"]: print(" %-52s %s" % (r["expression"], "OK" if r["accepted"] else "REJECTED")) print() print(" unsupported in Spring AOP:") for r in d["unsupported"]: print(" %-52s %s" % (r["expression"][:50], "accepted!" if r["accepted"] else "rejected")) print() first=[r for r in d["unsupported"] if not r["accepted"]][0] print(" the exception, in full:") print(" " + first["exception"]) print(" " + first["message"])' echo echo "The reference documentation says these produce an IllegalArgumentException. They do" echo "not: UnsupportedPointcutPrimitiveException extends RuntimeException directly, so a" echo "catch of IllegalArgumentException will not catch it." stop_app } > docs/output/01-designators.txt 2>&1 cat docs/output/01-designators.txt