web-dev-qa-db-fra.com

L'expression AspectJ donne une erreur formelle sans lien en coupure de point

J'ai dans aspectJ l'expression:

@Pointcut("within(com.param.cpms.dao.impl.ProjectMetaDaoImpl)")
public void daoExceptionHandle() {

}

À Spring 3.0 startup, je reçois l’erreur suivante:

nested exception is Java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
15
param

Le problème ne réside probablement pas dans votre point de coupe, mais dans un conseil utilisant ce point de coupe et un paramètre qui n'existe pas dans le point de coupe. Supprimez simplement le paramètre du conseil (ou ajoutez-le à la découpe du point).

21
kriegaex

La publication est plutôt ancienne, mais par souci d’exhaustivité, j’ajoute une autre raison, si vous utilisez les conseils @Around.

Selon la documentation Spring AspectJ le premier argument de l'avis doit être ProceedingJoinPoint. S'il manque, vous obtiendrez exactement ce message d'exception. Malheureusement, l’exception ne renvoie pas à des conseils erronés. Résoudre le bogue est donc un jeu de hasard.

6
vacant78

J'ai eu cette erreur à cause d'une mauvaise importation de classe. J'aurais dû importer la classe d'importation org.aspectj.lang.JoinPoint, mais au lieu de cela, j'ai importé une autre classe Joinpoint à partir d'un autre package. 

4
Anshu Pandey

C'était Joinpoint ("p minuscule)

org.aopalliance.intercept.Joinpoint;

Changer en JointPoint ("majuscule)

org.aspectj.lang.JoinPoint; 
3
Dan

J'ai également eu ce problème, et dans mon cas, il s'agissait d'une importation incorrecte à partir de: org.aopalliance.intercept.Joinpoint;

Il doit être: org.aspectj.lang.JoinPoint;

2
Daejong Lin

Si vous utilisez une configuration basée sur XML et si votre configuration ressemble à ceci: 

<aop:config>
<aop:aspect ref="bAdvice">
    <aop:pointcut id="displayPointcut" expression="execution(* com.example.demo.BusinessClass.display())"/>
    <aop:before method="before" pointcut-ref="displayPointcut" />
</aop:aspect>
</aop:config>

Ensuite, dans 2 scénarios, vous obtenez l'erreur: 

  1. Si vous utilisez l'expression pointcut, c'est-à-dire que display () dans notre cas a défini sans paramètres et dans la méthode de classe réelle, certains paramètres.
  2. Si dans avant conseil, c'est-à-dire aop: before, method = "before" ont défini sans noms d'argument et dans la classe de conseil réelle, la méthode "before" a certains paramètres.

En fin de compte, lorsque les paramètres de méthode définis dans XML ne correspondent pas à la méthode réelle, cette erreur se produit.

1
Kishan Panchal

Ce n'est pas votre réponse, mais peut-être que cela vous aidera un peu.

Tutoriel Spring AOP vous pouvez consulter ce tutoriel

@Before("execution(* com.de.controller..*(..))")
public void beforeLoggerAdvice(JoinPoint joinPoint, WebRequest request) {
    DeUtil.looger.info("--working");
}

J'ai eu la même exception mais à cause de WebRequest , j'ai supprimé cela et en utilisant l'alternative

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
1
Bhushan Dafale

Parfois, la raison pourrait être la suivante. 

 public void afterReturning(JoinPoint joinPoint, Object result)

Supprimez simplement Object result comme ci-dessous et cela fonctionne pour moi.

public void afterReturning(JoinPoint joinPoint)
1
vipin cp

J'avais la même erreur, dans mon scénario, j'utilisais deux paramètres de méthode

public void methodName(JoinPoint joinPoint ,HttpServletRequest request) throws

et mon annotation était comme 

@Before("execution(public * com.Java.controller.*Controller.*(..))")

En tant que solution, j'ai ajouté  

args (demande, ..)

@Before("execution(public * com.Java.controller.*Controller.*(..)) && args(request,..)")
0
Urja Ramanandi

L'exception formelle non liée dans la suppression de point se produit également pour deux résolutions dans AOP.

Raison n ° 1: S'il n'y a aucune instruction de retour dans après avoir renvoyé un avis

Pour une implémentation basée sur XML

<aop:aspect id="myaspect" ref="trackAspect">
<aop:pointcut id="pointCutAfterReturning" expression="execution(* com.springlearn.Operation.*(..))" />
<aop:after-returning method="myAdvice"  returning="result" pointcut-ref="pointCutAfterReturning"/>  //Make sure returning result is added
</aop:aspect>

Pour l'implémentation basée sur l'annotation

@AfterReturning(  
              pointcut = "execution(* Operation.*(..))",  
              returning= "result") //Make sure returning result is added

Raison 2: S'il n'y a pas de jeté Après avoir jeté un conseil

Pour une implémentation basée sur XML

<aop:aspect id="myaspect" ref="trackAspect" >  
     <!-- @AfterThrowing -->  
     <aop:pointcut id="pointCutAfterThrowing"    expression="execution(* com.javatpoint.Operation.*(..))" />  
     <aop:after-throwing method="myadvice" throwing="error" pointcut-ref="pointCutAfterThrowing" />  //Make sure throwing error is added
  </aop:aspect> 

Pour l'implémentation basée sur des annotations

@AfterThrowing(  
              pointcut = "execution(* Operation.*(..))",  
              throwing= "error")  //Make sure throwing error is added
0
Gani