Exception 尝试使用RPC向客户端引发异常时发生GWT错误

Exception 尝试使用RPC向客户端引发异常时发生GWT错误,exception,gwt,null,Exception,Gwt,Null,当我尝试使用RPC将服务器上的异常抛出到客户端时,我遇到了一些错误。 我得到的是: 自己的异常类: package catan.user.session.shared; public class SessionInvalidException extends Exception { private static final long serialVersionUID = 1L; } 以及RPC实现 @SuppressWarnings("serial") public class Pro

当我尝试使用RPC将服务器上的异常抛出到客户端时,我遇到了一些错误。 我得到的是: 自己的异常类:

package catan.user.session.shared;
public class SessionInvalidException extends Exception {
    private static final long serialVersionUID = 1L;
}
以及RPC实现

@SuppressWarnings("serial")
public class ProfileServiceImpl extends RemoteServiceServlet implements ProfileService{

    @Override
    public UserLight getUser() throws SessionInvalidException {
        SessionManager.getInstance().isSessionStillValid(this.getThreadLocalRequest());
        return ((UserLight)     this.getThreadLocalRequest().getSession(false).getAttribute("User")).clone();
    }
}
异常在SessionManager.getInstance()中引发。isSessionStillValid()中引发 当我运行我的程序时,我的日志中会出现以下错误

Wed Aug 14 17:13:45 CEST 2013 catan.client.Catan
WARNING: Exception caught 

catan.user.session.shared.SessionInvalidException: null
at catan.user.session.shared.SessionInvalidException_FieldSerializer.instantiate(SessionInvalidException_FieldSerializer.java:16)
at catan.user.session.shared.SessionInvalidException_FieldSerializer.create(SessionInvalidException_FieldSerializer.java:25)
at com.google.gwt.user.client.rpc.impl.SerializerBase.instantiate(SerializerBase.java:115)
at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:396)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:216)
at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:258)
at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:412)
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.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:242)
at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
at java.lang.Thread.run(Unknown Source)
Aug 14, 2013 5:13:45 PM com.google.gwt.logging.server.RemoteLoggingServiceUtil     logOnServer

WARNING: Exception caught 

com.google.gwt.core.client.impl.SerializableThrowable$ThrowableWithClassName
at catan.user.session.shared.SessionInvalidException_FieldSerializer.instantiate(SessionInvalidException_FieldSerializer.java:16)
at catan.user.session.shared.SessionInvalidException_FieldSerializer.create(SessionInvalidException_FieldSerializer.java:25)
at com.google.gwt.user.client.rpc.impl.SerializerBase.instantiate(SerializerBase.java:115)
at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:396)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:216)
at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:258)
at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:412)
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.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:242)
at sun.reflect.GeneratedMethodAccessor34.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
at java.lang.Thread.run(Unknown Source)

有趣的是,在完全相同的包中,我有另一个异常,以几乎完全相同的方式抛出,只有另一个名称,它工作了。。。我只是不明白我做错了什么…

确保异常类位于*.gwt.xml模块定义文件中的元素指定的路径上。例如:

<!-- Specify the paths for translatable code                    -->
<source path='client' />
<source path='shared' />

好的,我解决了我的问题。因此,RPC将异常正确地传递给客户端。然后 在onFailure方法中,我将捕获的对象传递给我的Logger类,然后该类尝试将其发送回服务器或其他地方。这里我不确定,因为Logger类是由我项目的另一个成员编写的。所以不使用这个类就解决了问题,但我仍然不确定这些错误会告诉我什么。。。如果有人感兴趣,这里就是我将捕获的对象传递给的方法。Catan.class是我们的入口点类

public class Logger {

/**
 * Logs a Throwable
 * @param caught
 */
public static void log(Throwable caught) {
    final java.util.logging.Logger log = java.util.logging.Logger.getLogger(Catan.class.getName());
    log.log(Level.WARNING, "Exception caught \n", caught);
}

抛出异常时,是否将其他异常作为原因传递给构造函数?如果包装的异常不在GWT客户端包中,则可以解释该问题。您的
ProfileService
界面中的方法签名是否也会说
public UserLight getUser()抛出SessionInvalidException
?另外,请确保自定义异常类具有默认构造函数
public SessionInvalidException(){}
,因为它是序列化所必需的。@Churro是的,ProfileService这样说,添加一个默认构造函数并不能解决问题。同样,同一个包中的另一个异常(只有另一个名称)也不需要默认的construkter来工作。@David Levesque我考虑过这个问题。我在捕获NullPointerException后引发异常。我将尝试在NullPointerException之前抛出异常。因此,该元素将不在StackTrace或其他内容中。是的,异常在共享包中。它由*.gwt.xml指定。此外,在同一个包中还有另一个例外,只是使用了另一个名称,这个例外中是否有一个成员字段不是共享包中的类型?