GWT:Tomcat无法序列化' javax.net.ssl.SSLException'

时间:2015-10-14 08:24:25

标签: java tomcat ssl gwt

在我的工作场所,我使用Tomcat 6 + Java 6测试GWT webapp(我认为)并且运行良好,但今天IT升级到Java 7(java -version输出),现在我收到以下错误在catalina.out中,当我尝试打开我的webapp时(index.html中的布局工作正常):

  

GRAVE:调度传入的RPC调用时发生异常   com.google.gwt.user.client.rpc.SerializationException:输入' javax.net.ssl.SSLException'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象。出于安全考虑,此类型不会被序列化:instance = javax.net.ssl.SSLException:java.security.ProviderException:java.security.KeyException           在com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:667)           在com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:130)           在com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter $ ValueWriter $ 8.write(ServerSerializationStreamWriter.java:153)           在com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:587)           在com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:605)           在com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:393)           在com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)           在com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265)           在com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305)           在com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)           在javax.servlet.http.HttpServlet.service(HttpServlet.java:637)           在javax.servlet.http.HttpServlet.service(HttpServlet.java:717)           在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)           在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)           在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)           在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)           在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)           在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)           在org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)           在org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)           在org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)           在org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)           在org.apache.jk.common.ChannelSocket $ SocketConnection.runIt(ChannelSocket.java:891)           at org.apache.tomcat.util.threads.ThreadPool $ ControlRunnable.run(ThreadPool.java:690)           在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();

2 个答案:

答案 0 :(得分:1)

Found the answer!升级nss包解决了问题(不得不要求IT升级)。

答案 1 :(得分:0)

编译GWT应用程序时,将分析代码并生成一整套Javascript以在客户端上运行。对于从服务器发送到客户端的对象,GWT生成它认为需要的所有类的Javascript版本。它是通过查看代码来实现的。

在您的情况下,您可能会发现代码声明它抛出IOException,因此GWT已在客户端上生成对此的支持。但是代码抛出了一个SSLException,一个IOException的子类,GWT没有生成任何客户端代码,因此com.google.gwt.user.client.rpc.SerializationException。这个问题可能一直存在,但现在可以看到,因为你有SSL问题。

因此,您可以通过整理可能是环境问题的SSL问题来避免这个问题,但很可能需要查看GWT应用程序来理清它对异常序列化的处理。