Quelles sont les causes possibles pour ABstractMethodError?
Exception dans le thread "pool-1-thread-1" Java.lang.AbstractMethodError:
org.Apache.thrift.ProcessFunction.isOneway()Z
at org.Apache.thrift.ProcessFunction.process(ProcessFunction.Java:51)
at org.Apache.thrift.TBaseProcessor.process(TBaseProcessor.Java:39)
at com.gemfire.gemstone.thrift.hbase.ThreadPoolServer$ClientConnnection.run(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
at Java.lang.Thread.run(Thread.Java:662)
La réponse simple est la suivante: un code tente d'appeler une méthode déclarée abstract
. Les méthodes abstraites n'ont pas de corps et ne peuvent pas être exécutées. Comme vous avez fourni si peu d'informations, je ne peux pas vous en dire plus sur la façon dont cela peut se produire, car le compilateur détecte généralement ce problème - comme décrit ici, cela signifie que la classe doit avoir changé à l'exécution.
Cela signifie généralement que vous utilisez une ancienne version d'une implémentation d'interface pour laquelle il manque une nouvelle méthode d'interface. Par exemple, l'interface Java.sql.Connection a reçu une nouvelle méthode getSchema dans la version 1.7. Si vous avez un pilote JDBC 1.6 et appelez Connection.getSchema, vous obtiendrez AbstractMethodError.
Extrait de la documentation de AbstractMethodError
Lancé lorsqu'une application tente d'appeler une méthode abstraite. Normalement, cette erreur est interceptée par le compilateur; cette erreur ne peut se produire qu'à l'exécution temps si la définition d’une classe a changé incompatiblement depuis la méthode en cours d'exécution a été compilée pour la dernière fois.
Si vous obtenez cette erreur sur les méthodes implémentées, assurez-vous que vous avez correctement ajouté vos dépendances comme indiqué dans ce fil .
Comme Damian l'a cité:
Normalement, cette erreur est interceptée par le compilateur. cette erreur ne peut que se produire au moment de l'exécution si [...]
J'ai eu la même erreur qui n'a pas été capturée par le compilateur mais lors de l'exécution. Pour le résoudre, je n'ai fait que recompiler sans donner aucune modification au code.
Une sorte de cas particulier de ce qui précède répondre .
J'ai eu cette erreur, car j'utilisais un spring-boot-starter-parent
(par exemple, 2.1.0.RELEASE
utilise la version de printemps: 5.1.2.RELEASE
), mais j'ai aussi inclus une BOM
, qui définit également certaines dépendances de printemps, mais dans une version plus ancienne (par exemple, 5.0.9.RELEASE
).
Il suffit donc de vérifier votre dependency tree
(dans Eclipse, par exemple, vous pouvez utiliser la hiérarchie des dépendances) si vous utilisez les mêmes versions.
Donc, une solution pourrait être de mettre à niveau les dépendances de printemps dans votre BOM
, une autre solution pourrait être de les exclure (mais, en fonction du montant, cela pourrait être moche).