在我的工作场所,我使用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();
答案 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应用程序来理清它对异常序列化的处理。