【发布时间】:2015-01-15 01:53:26
【问题描述】:
我正在开发一个使用 Eclipse Juno ver - 1.5.0 的 Web 应用程序,该应用程序托管在 Tomcat 7.0 上。此外,该应用程序还使用远程方法调用。
在代码中进行更新后,我清理了 tomcat 目录。这导致从以下目录中删除了一些基本的 .class 文件
.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/trusteddataaggwebsite/WEB-INF/classes
显然重建项目并没有恢复被删除的文件。所以,我手动恢复了丢失的 .class 文件。虽然丢失的文件之一是 TSDAVis_Stub.class 文件。
因此,我使用 rmic 命令重新编译了存根以生成存根。但是在执行时我收到以下错误
java.lang.NoSuchMethodError: stub class initialization failed
trusteddataagg.TSDAVis_Stub.<clinit>(Unknown Source)
sun.misc.Unsafe.ensureClassInitialized(Native Method)
sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25)
sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122)
java.lang.reflect.Field.acquireFieldAccessor(Field.java:918)
java.lang.reflect.Field.getFieldAccessor(Field.java:899)
java.lang.reflect.Field.getLong(Field.java:528)
java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1614)
java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:52)
java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:425)
java.security.AccessController.doPrivileged(Native Method)
java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:413)
java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:310)
java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:547)
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1582)
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
java.rmi.Naming.lookup(Naming.java:84)
ParaselectionServlet.doPost(ParaselectionServlet.java:128)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
我知道代码描述有点模糊,但如果有人能解释一下,那将非常有帮助
java.lang.NoSuchMethodError: stub class initialization failed
更具体地说,如果此错误与 RMI 或某些配置问题有关。
谢谢。
【问题讨论】:
-
再次清理并重建所有内容,这次停止并重新启动注册表。还请显示您使用的
rmic命令。 -
我确实尝试过清理和重建。我什至从 Eclipse 中删除了该项目并重新导入。同样,我从 tomcat 中删除了它,然后重新添加并重新发布了该项目。 RMI 注册表也是如此。它还没有解决问题。
-
对于 rmic 命令:我在服务器项目的 src 文件夹中使用了 javac *.java 然后,我使用了:rmictrusteddataagg.TSDAVis 它编译时没有标记任何错误。然后我将生成的 stub.class 文件移动到问题中列出的元数据目录中。