我正在尝试使用Java代理向类添加方法。但是它给出了如下错误。
java.lang.VerifyError: Local variable table overflow
Exception Details:
Location:com/github/shehanperera/example/Method.method1()V @3: aload_0
Reason: Local index 0 is invalid
Bytecode: 0x0000000: b800 532a b600 56b1
at com.github.shehanperera.example.Sample.main(Sample.java:13)
这是我的代理人
new AgentBuilder.Default()
.with(AgentBuilder.Listener.StreamWriting.toSystemError())
.with(new AgentBuilder.InitializationStrategy.SelfInjection.Eager())
.type((ElementMatchers.nameContains("Method")))
.transform((builder, typeDescription, classLoader, module) -> builder
.defineMethod("method3", void.class, Visibility.PUBLIC)
.intercept(MethodDelegation.to(AddMethod.class))
.method(ElementMatchers.nameContains("method1"))
.intercept(SuperMethodCall.INSTANCE
.andThen(MethodCall.invoke(ElementMatchers.nameContains("method3"))))
).installOn(instrumentation);
这是我需要添加的方法。
public class AddMethod {
public static void method3() throws Exception {
System.out.println("This is new method : method 3");
}}
这是我真正的Method类,我想在其中添加新方法。
public class Method {
Method() {
System.out.println("This is constructor ");
}
public static void method1() {
try {
Thread.sleep(500);
System.out.println("This is Method 1");
} catch (InterruptedException e) {
//Ignore
}
}}
这是主要的方法
public static void main(String[] args) {
System.out.println("This is Sample main");
(13) Method method = new Method();
method.method1();
}
你可以告诉我这个案例中的问题是什么。这是我试图添加方法的正常类。
答案 0 :(得分:1)
您正尝试从静态方法调用非静态方法,而Byte Buddy在此处缺少检查。我在最新版本中添加了检查,但是您尝试执行的操作无效,但当然这不会导致验证程序错误。
使List<Article> articles = null;
var wpLoadTask = Task.Run(async () =>
{
articles = await _cmsClient.GetAllArticlesAsync();
});
wpLoadTask.Wait();
非静态或method1
静态,这将有效。