从 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- 如何读取文本文件(Google App Engine servlet)?
GWT - 如何读取服务器上的(文本)文件(或:如何在 RemoteServiceServlet 中获取 servletContext)