0

没错,基础知识,这是在 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,但我不认为这样做。

4

1 回答 1

1

因为 Exception 的超类是 Throwable而且它正在实现java.io.Serializable

需要注意的重要一点是,在完整的 Java JRE 中实现 java.io.Serializable 的类都没有在 GWT 的模拟 JRE 中实现 java.io.Serializable。这意味着在 JRE 中实现 java.io.Serializable 的类型(如 Throwable 或 StackTraceElement)将无法通过 GWT RPC 进行传输,因为客户端将无法对它们进行序列化/反序列化。但是,对于其他类型(如 String、Number 等)来说,这不是问题……它们没有在模拟的 JRE 中实现 java.io.Serializable 但具有自定义字段序列化器,以便可以正确序列化它们。

GWT 序列化策略

于 2013-04-03T14:33:05.867 回答