2010-11-17 9 views
1

Je reçois une erreur étrange sur la boîte d'un collègue. CGLib utilise une classe de service pour la journalisation AOP de printemps, et lors de l'exécution, il indique «erreur de compilation non résolue: doit remplacer une méthode de superclasse» sur la classe fastclass par classe proxy cglibcglib compilateur jdk compliance

Dans la classe incriminée, j'utilise Les annotations @override lorsque j'implémente une interface, et je sais qu'elle est supportée dans jdk 1.6 mais pas 1.5 CGLib est auto-proxying cette classe d'implémentation

Cependant, ça marche bien sur ma boîte avec jdk_1.6_17, mais pas sur son avec jdk_1.6_10

Cependant cependant, il peut compiler correctement le projet en utilisant maven, qui utilise le même jdk Suppression de l'annotation @Override erreur unglig cglib, mais c'est bizarre non?

Quel compilateur cglib utilise-t-il pour son auto-proxying, et cela pourrait-il être un bug dans jdk_1.6_10 ou y a-t-il autre chose qui me manque?

utilisant un ressort 3.0.4, jboss 5,10, la sécurité ressort 3.0.3

essentiellement, la classe implémente AuthenticationUserDetailsService au printemps-sécurité.

La signature de la méthode fautive:

@Override 
public UserDetails loadUserDetails(Authentication auth) throws UsernameNotFoundException; 

UserDetails est une interface de sécurité à ressort, et est ainsi une authentification.

+0

Pouvez-vous afficher le code source de la méthode à l'origine du problème? Cette méthode utilise-t-elle des génériques ou est-elle déclarée comme renvoyant un sous-type du type de retour des méthodes substituées (covariance)? –

+0

ajouté, rien de tel, il retourne effectivement une implémentation personnalisée de UserDetails, mais il est déclaré à retourner UserDetails. – gtrak

Répondre

0

Ok, compris. J'ai explicite introduit cglib 2.2 dans le pom.xml, et spring-flex apportait 2.1_03, qui est de 2005. Pour une raison quelconque, ma boîte a fini par utiliser le nouveau, et mon collègue a fini par utiliser l'ancien.

Quelqu'un sait pourquoi un particulier est chargé en premier?

+0

C'est effectivement aléatoire (c'est-à-dire qu'il y a un algorithme, mais ça ne vaut pas la peine d'essayer de le faire). La solution commune, pour cglib au moins, semble être de fourrer votre propre copie dans votre propre espace de noms pour votre projet. –