Quais são GeneratedMethodAccessor1,2, etc e por isso pode não forem apanhados?
-
06-07-2019 - |
Pergunta
Estou ficando rastreamentos de pilha assim:
java.lang.NoClassDefFoundError: sun/reflect/GeneratedMethodAccessor1
at sun.reflect.GeneratedMethodAccessor1.<clinit>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:28)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.tufts.cs.testsim.LogicalProcess.dispatchMessage(LogicalProcess.java:214)
at edu.tufts.cs.testsim.LogicalProcess.processForward(LogicalProcess.java:287)
at edu.tufts.cs.testsim.LogicalProcess.doOperation(LogicalProcess.java:423)
at edu.tufts.cs.testsim.LogicalProcess.run(LogicalProcess.java:434)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.ClassNotFoundException: sun.reflect.GeneratedMethodAccessor1
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
... 19 more
O que são GeneratedMethodAccessor1, GeneratedMethodAccessor2, GeneratedMethodAccessorN e que pode estar causando-lhes para não ser encontrada? Eu estou fazendo algum código byte reescrever em tempo de execução, mas apenas antes de a classe é carregada, e os primeiros várias chamadas através fina reflexão trabalho. Eu estou querendo saber se isso está acontecendo depois que o compilador JIT recebe um porão do meu código, mas eu nem sequer têm uma idéia muito boa de como iniciar a depuração isso.
Solução
GeneratedMethodAccessor###
são classes geradas em tempo de execução pela implementação reflexão para chamar métodos e construtores. Este formar uma ponte de código de bytes de instâncias de Method
ou Constructor
para o método actual ou do construtor. Mais informações estão disponíveis no código-fonte.
deserialisation também faz algo semelhante, a partilha de alguns dos o mesmo mecanismo, para invocar o construtor não-Serializable
mais derivado.