从 GWT 读取属性文件

Posted

技术标签:

【中文标题】从 GWT 读取属性文件【英文标题】:Read properties file from GWT 【发布时间】:2013-01-13 11:11:08 【问题描述】:

我遇到了这种错误。尝试读取属性文件时它在开发模式下工作正常,但是当我尝试将应用程序部署到 tomcat 时出现此错误。

SEVERE: Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'java.io.FileNotFoundException' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object     not found in the classpath
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:619)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:539)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:616)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:390)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)
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:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

【问题讨论】:

确保服务器端的 RPC 函数有异常的 catch 子句。您不能将 FileNotFoundException(和许多异常)传递给客户端。 【参考方案1】:

每当您进行 Rpc 调用时,所涉及的类都必须实现 java.io.Serializable。在你的情况下,这可能已经发生了。

在您的service class 方法中,您在某处提到了一个参数或返回类型为java.io.FileNotFoundException,它没有实现java.io.Serializable。因此无法序列化。

编辑:这可能会帮助你Serialization Exception while making an RPC call

【讨论】:

每个Throwable实现Serializable:docs.oracle.com/javase/7/docs/api/java/io/… 刚刚看到链接。我倒是知道。感谢分享。【参考方案2】:

必须在RemoteService 接口中的throws 子句中声明每个可能进入客户端的异常。

如果它在 DevMode 下工作,可能是因为你没有这样的异常。你必须找到FileNotFoundException的原因。

【讨论】:

以上是关于从 GWT 读取属性文件的主要内容,如果未能解决你的问题,请参考以下文章

GWT 客户端可以读取调用它的 httpservletresponse 吗?

在 GWT 的客户端读取文件

gwt- 如何读取文本文件(Google App Engine servlet)?

GWT文件上传表单提交POST请求无法读取文件

GWT - 如何读取服务器上的(文本)文件(或:如何在 RemoteServiceServlet 中获取 servletContext)

GWT 项目在部署时不会从 RPC 加载数据