GWT错误:java.lang.NoClassDefFoundError:com / google / gwt / core / client / GWTBridge [英] GWT Error: java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridge

查看:203
本文介绍了GWT错误:java.lang.NoClassDefFoundError:com / google / gwt / core / client / GWTBridge的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用GWT作为一个类的项目,尽管之前一切正常,但我最近重构了我的代码,突然间我遇到了标题错误。我搜索了一下,看起来GWTBridge问题是由两个主要原因造成的:a)一个固定为2.5.1的bug,或者b)试图从服务器调用客户端代码,反之亦然( classNotFoundException GWTBridge )。



我使用GWT 2.5.1和我99%肯定我没有违反b),所以我不知所措。我简直就是在重构时从工作版本复制和粘贴代码,所以我不确定问题来自哪里。



我的直觉是它可能有某些东西与我在重构时创建的两个静态Singleton类有关。重构时的我的目标仅仅是让RPC更不混乱,因为它迫使我链接一堆异样的调用,这使得我疯狂。我基本上做的是创建两个静态的Singleton类(PageLoader和UserManager),它们的目的是进行异步调用并返回返回的任何OnSuccess,这样在onModuleLoad中我可以进行连续的RPC调用而不必处理链接(例如,我可以只需进入UserManager.getInstance()。isLoggedIn(),然后在稍后的RPC调用中使用返回的布尔值,而不必将该调用放入onSuccess函数中。我把这两个类放在client.services和我的Async类中。



我不知道为什么这会导致问题,但我想不出其他任何东西。是否知道我是否正确?



我附加了一个静态类和下面返回的堆栈跟踪的一部分。






UserManager类

  package com.google .gwt.sample.vendorcouver.client.services; 

import com.google.gwt.core.client.GWT;
import com.google.gwt.sample.vendorcouver.client.user.VenUser;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;

$ b $ *单例,简化异步调用服务器端* /

public class UserManager {

private static UserManager UserManagerInstance = null;
private static LoginServiceAsync LoginServiceInstance = null;
私有静态VenUserServiceAsync VenUserServiceInstance = null;
private static boolean isLoggedIn = false;
private static boolean isAdmin = false;
private static String UserName = null;

$ b public static UserManager getInstance()
{
if(UserManagerInstance == null)
{
UserManagerInstance = new UserManager();
LoginServiceInstance = GWT.create(LoginService.class);
VenUserServiceInstance = GWT.create(VenUserService.class);
}
返回UserManagerInstance;

$ b public boolean isLoggedIn()
{
LoginServiceInstance.isLoggedIn(new AsyncCallback< Boolean>(){
public void onFailure(Throwable error) {
Window.alert(抱歉,服务器端似乎有错误!您可能无法登录。);
}
public void onSuccess(Boolean loggedInStatus) {
Window.alert(isLoggedIn is sucessful; will return+ loggedInStatus);
isLoggedIn = loggedInStatus;
}
});
return isLoggedIn;
}

堆栈跟踪:

  SEVERE:javax.servlet.ServletContext log:分派传入RPC调用时的异常
com.google.gwt.user.server.rpc.UnexpectedException:服务方法'public abstract boolean com.google.gwt.sample.vendorcouver.client.services.LoginService.isLoggedIn()'抛出了一个意外的异常:java.lang.NoClassDefFoundError:com / google / gwt / core / client / GWTBridge
at com.google .gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)
,位于com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
,位于com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
位于com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
位于javax.servlet.http.HttpServlet。服务(HttpServlet.java:637)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
位于org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: 511)
at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter。的java:在com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter 74)
(ServletHandler.java:1157)
。的java:在com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter 123)
(ServletHandler.java:1157)
。 java:34)
at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(服务BlobFilter.java:63)
在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
在com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter( TransactionCleanupFilter.java:43)
在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
在com.google.appengine.tools.development.StaticFileFilter.doFilter( StaticFileFilter.java:125)
在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)
在com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest( DevAppServerModulesFilter.java:366)美元,com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349 b $ b)
在com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter( DevAppServerModulesFilter.java:116)
at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter( ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
在com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java:487)
在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
在org.mortbay.jetty.Server.handle(Server.java:326)
在org.mortbay.jetty .HttpConnection.handleRequest(HttpConnecti $())
at org.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay .io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582)
引起:java.lang.NoClassDefFoundError :com / google / gwt / core / client / GWTBridge
at com.google.gwt.user.client.Window。< clinit>(Window.java:504)
at java.lang.Class .forName0(本地方法)$ b $在java.lang.Class.forName(未知源)
在com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70 )
,位于com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64 )
at com.google.gwt.sample.vendorcouver.server.LoginServiceImpl.isLoggedIn(LoginServiceImpl.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun .reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com .google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
,位于com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
... 40 more
由java.net.URLClassLoader导致:java.lang.ClassNotFoundException:com.google.gwt.core.client.GWTBridge
$ 1.run(Unknown Source)在java.net.URLClassLoader上
$ 1.run(未知源)
在java.security.AccessController.doPrivileged(本地方法)$ b $在java.net.URLClassLoader.findClass(未知源)
在java.lang.ClassLoader.loadClass(未知源)
a t com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:216)$ b $ at java.lang.ClassLoader.loadClass(Unknown Source)
... 52 more


解决方案

stacktrace很清晰:您正试图使用​​ com.google.gwt.sample.vendorcouver.server.LoginServiceImpl#isLoggedIn 中的$ c> com.google.gwt.user.client.Window code>(服务器端代码)




顺便说一句,你知道你的 UserManager#isLoggedIn always 返回 false 第一次被调用,对吧? (由于RPC调用的异步性质)


I'm using GWT for a class project, and although everything worked before, I recently refactored my code and suddenly I'm running into the title error. I searched around and it seems that the GWTBridge problem is caused by 2 main things: a) a bug which was fixed for 2.5.1, or b) trying to call client-side code from the server and vice versa (classNotFoundException GWTBridge).

I'm using GWT 2.5.1 and I'm 99% sure I'm not violating case b), so I'm at a loss. I literally just copy and pasted code from the working version while refactoring, so I'm not sure where the problem is coming from.

My intuition is that it may have something to do with two static Singleton classes I created while refactoring. My objective when refactoring was simply to make RPCs less messy, as it was forcing me to chain a bunch of asynchronous calls which drove me crazy. What I basically did was to make two static Singleton classes (PageLoader and UserManager) whose purposes were to make the asynchronous calls and return whatever OnSuccess returned, so that in onModuleLoad I could make successive RPC calls without having to deal with chaining (e.g. I could just go UserManager.getInstance().isLoggedIn() and then used the returned boolean in an RPC call later on without having to put that call inside an onSuccess function). I put both these classes in client.services along with my Async classes.

I have no idea why that might cause a problem, but I can't think of anything else. Does know if I'm on the right track?

I've attached one of the static classes and part of the returned stack trace below.


UserManager Class

package com.google.gwt.sample.vendorcouver.client.services;

import com.google.gwt.core.client.GWT;
import com.google.gwt.sample.vendorcouver.client.user.VenUser;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;


/*Singleton that simplifies making asynchronous calls to the server side.*/

public class UserManager {

    private static UserManager UserManagerInstance = null;
    private static LoginServiceAsync LoginServiceInstance = null;
    private static VenUserServiceAsync VenUserServiceInstance = null;
    private static boolean isLoggedIn = false;
    private static boolean isAdmin = false;
    private static String UserName = null;


    public static UserManager getInstance()
    {
        if (UserManagerInstance == null)
        {
            UserManagerInstance = new UserManager();
            LoginServiceInstance = GWT.create(LoginService.class);
            VenUserServiceInstance = GWT.create(VenUserService.class);
        }
        return UserManagerInstance;
    }

    public boolean isLoggedIn()
    {
        LoginServiceInstance.isLoggedIn(new AsyncCallback<Boolean>() {
            public void onFailure(Throwable error) {
                Window.alert("Sorry, there seemed to be an error on the server side! You may be unable to log in.");
            }
            public void onSuccess(Boolean loggedInStatus) {
                Window.alert("isLoggedIn is sucessful; will return" + loggedInStatus);
                isLoggedIn = loggedInStatus;
            }
        });
        return isLoggedIn;
    }

Stack trace:

   SEVERE: javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract boolean com.google.gwt.sample.vendorcouver.client.services.LoginService.isLoggedIn()' threw an unexpected exception: java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridge
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:487)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridge
    at com.google.gwt.user.client.Window.<clinit>(Window.java:504)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70)
    at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
    at com.google.gwt.sample.vendorcouver.server.LoginServiceImpl.isLoggedIn(LoginServiceImpl.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
    ... 40 more
Caused by: java.lang.ClassNotFoundException: com.google.gwt.core.client.GWTBridge
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:216)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 52 more

解决方案

The stacktrace is clear: you're trying to use the com.google.gwt.user.client.Window (client) class from your com.google.gwt.sample.vendorcouver.server.LoginServiceImpl#isLoggedIn (server-side code)


BTW, you do realize that your UserManager#isLoggedIn will always return false the first time it's called, right? (due to the asynchronous nature of the RPC calls)

这篇关于GWT错误:java.lang.NoClassDefFoundError:com / google / gwt / core / client / GWTBridge的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆