GWT:Tomcat 无法序列化 'javax.net.ssl.SSLException'
GWT: Tomcat can't serialize 'javax.net.ssl.SSLException'
在我的工作场所,我正在使用 Tomcat 6 + Java 6(我认为)测试 GWT 网络应用程序并且工作完美,但今天它升级到 Java 7(java -version 输出),现在我在 catalina.out 中收到以下错误,当我尝试打开我的 webapp 时(index.html 中的布局完美运行):
GRAVE: Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'javax.net.ssl.SSLException' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = javax.net.ssl.SSLException: java.security.ProviderException: java.security.KeyException
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:667)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:130)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter.write(ServerSerializationStreamWriter.java:153)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:587)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:605)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:393)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:745)
有什么想法吗?我可以从我这边做点什么吗?或者这是 IT 应该解决的问题?
与 SSLException 相关的代码。 Source:
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY).setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountPrivateKeyFromP12File(new File(KEY_FILE_LOCATION))
.setServiceAccountScopes(AnalyticsScopes.all()).build();
编译 GWT 应用程序时,会分析代码并在客户端上生成 Javascript 的整个负载 运行。对于从服务器发送到客户端的对象,GWT 生成它认为需要的所有 classes 的 Javascript 版本。它通过查看代码来实现。
在您的情况下,您可能会发现代码声明它抛出 IOException,因此 GWT 已在客户端生成对此的支持。但是代码抛出 SSLException,这是 IOException 的子 class,GWT 没有生成任何客户端代码,因此 com.google.gwt.user.client.rpc.SerializationException。这个问题很可能一直存在,但现在出现是因为您有 SSL 问题。
因此,您可以通过解决可能与环境有关的 SSL 问题来避免此问题,但可能需要查看 GWT 应用程序以解决其对异常序列化的处理。
Found the answer! 升级 nss
包解决了问题(不得不要求 IT 升级)。
在我的工作场所,我正在使用 Tomcat 6 + Java 6(我认为)测试 GWT 网络应用程序并且工作完美,但今天它升级到 Java 7(java -version 输出),现在我在 catalina.out 中收到以下错误,当我尝试打开我的 webapp 时(index.html 中的布局完美运行):
GRAVE: Exception while dispatching incoming RPC call com.google.gwt.user.client.rpc.SerializationException: Type 'javax.net.ssl.SSLException' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = javax.net.ssl.SSLException: java.security.ProviderException: java.security.KeyException at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:667) at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:130) at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter.write(ServerSerializationStreamWriter.java:153) at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:587) at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:605) at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:393) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:745)
有什么想法吗?我可以从我这边做点什么吗?或者这是 IT 应该解决的问题?
与 SSLException 相关的代码。 Source:
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY).setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountPrivateKeyFromP12File(new File(KEY_FILE_LOCATION))
.setServiceAccountScopes(AnalyticsScopes.all()).build();
编译 GWT 应用程序时,会分析代码并在客户端上生成 Javascript 的整个负载 运行。对于从服务器发送到客户端的对象,GWT 生成它认为需要的所有 classes 的 Javascript 版本。它通过查看代码来实现。
在您的情况下,您可能会发现代码声明它抛出 IOException,因此 GWT 已在客户端生成对此的支持。但是代码抛出 SSLException,这是 IOException 的子 class,GWT 没有生成任何客户端代码,因此 com.google.gwt.user.client.rpc.SerializationException。这个问题很可能一直存在,但现在出现是因为您有 SSL 问题。
因此,您可以通过解决可能与环境有关的 SSL 问题来避免此问题,但可能需要查看 GWT 应用程序以解决其对异常序列化的处理。
Found the answer! 升级 nss
包解决了问题(不得不要求 IT 升级)。