没错,基础知识,这是在 GWT2.5.0 / JDK1.6 上运行的,并且或多或少地按照文档的设置进行设置
gwt.xml
<inherits name="com.google.gwt.logging.Logging" />
<set-property name="gwt.logging.simpleRemoteHandler"
value="ENABLED" />
<set-property name="gwt.logging.logLevel" value="INFO" />
<set-property name="gwt.logging.enabled" value="TRUE" />
<set-property name="gwt.logging.developmentModeHandler"
value="ENABLED" />
<set-property name="gwt.logging.systemHandler" value="DISABLED" />
<set-property name="gwt.logging.popupHandler" value="DISABLED" />
<set-property name="gwt.logging.consoleHandler" value="ENABLED" />
<set-property name="gwt.logging.firebugHandler" value="ENABLED" />
我用下面的代码强制异常,只是一个简单的 NullPointException
try {
Level n = null;
n.getName();
} catch (NullPointerException ex) {
logger.log(Level.SEVERE, "Null Exception Hit", ex);
}
但是由于某种原因,当向服务器抛出异常时会抛出这个
[WARN] remoteLogging: An IncompatibleRemoteServiceException was thrown while processing this call.
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: Type 'com.google.gwt.core.client.impl.SerializableThrowable' was not assignable to 'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field serializer. For security purposes, this type will not be deserialized.
at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:323)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:206)
RPC servlet 配置正确,如果我只抛出消息而不是异常,它就会很好地记录回服务器。
根据远程服务器日志记录的文档,这应该“正常工作”,我不明白为什么会被抛出。在我看来,SerializableThrowable 根据定义应该是可序列化的。我知道您必须跳过一些障碍才能使您自己的类可序列化,但是我读过的所有内容都表明我应该能够毫无问题地将异常抛回服务器。有任何想法吗?看起来自 2.5.0 以来 serializableThrowable 已移至 com.google.gwt.core.shared.SerializableThrowable,但我不认为这样做。