J'essaie de changer la valeur de retour d'une méthode d'une classe déjà chargée. De la documentation de ByteBuddy (http://bytebuddy.net/#/tutorial) cela semble possible en utilisant l'agent Java, tant que je n'ajoute aucun champ/méthode.ByteBuddy - Modifier la valeur par défaut de la classe de chargement
Mon code est le suivant:
ByteBuddyAgent.install();
new ByteBuddy()
.redefine(StuffImpl.class)
.method(returns(Result.class))
.intercept(FixedValue.value(new Result("intercepted")))
.make()
.load(StuffImpl.class.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent());
Mais je reçois l'exception suivante:
java.lang.UnsupportedOperationException: class redefinition failed: attempted to change the schema (add/remove fields)
La chose est, je ne suis pas une méthode ajoutais. Où Byte Buddy ajoute un champ ou une méthode dans le code ci-dessus?
EDIT:
public class StuffImpl {
public Result validate() {
return new Result("original");
}
}
public class Result {
private String result;
public Result(String result) {
this.result = result;
}
}