GWT:Tomcat可以';t序列化';javax.net.ssl.SSLException';

GWT:Tomcat可以';t序列化';javax.net.ssl.SSLException';,java,tomcat,ssl,gwt,Java,Tomcat,Ssl,Gwt,在我的工作场所,我曾使用Tomcat 6+Java 6(我认为)测试一个GWT Web应用程序,它工作得很好,但今天它升级到Java 7(Java版本输出),现在我在尝试打开我的Web应用程序(index.html中的布局工作得很好)时在catalina.out中收到以下错误: GRAVE:调度传入RPC调用时发生异常 com.google.gwt.user.client.rpc.SerializationException:类型“javax.net.ssl.SSLException”未包含在此

在我的工作场所,我曾使用Tomcat 6+Java 6(我认为)测试一个GWT Web应用程序,它工作得很好,但今天它升级到Java 7(Java版本输出),现在我在尝试打开我的Web应用程序(index.html中的布局工作得很好)时在catalina.out中收到以下错误:

GRAVE:调度传入RPC调用时发生异常 com.google.gwt.user.client.rpc.SerializationException:类型“javax.net.ssl.SSLException”未包含在此可由此SerializationPolicy序列化的类型集中,或者无法加载其类对象。出于安全目的,不会序列化此类型。: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.SerializationValue(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) 位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 位于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) 位于org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) 运行(Thread.java:745)

有什么想法吗?我能从我这边做点什么吗?或者这是一个它应该解决的问题

与SSLexException相关的代码:


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

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


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

升级
nss
包解决了该问题(必须要求其升级).

我认为服务器端引发了连接异常,您发布的内容是GWT试图将SSLException转换为javascript。所以这是一个Java错误,而不是GWT错误是的,我昨天也得出了同样的结论。问题是代码几天前还在运行,没有任何相关的更改,所以我不确定它是否与Java7有关(可能相关?)。我将用相关的代码更新我的问题(唯一可以抛出SSLException的代码)问题是在我的本地环境中一切正常,使用以前的代码和使用
PrivateKey=SecurityUtils.loadPrivateKeyFromKeyStore(SecurityUtils.getPkcs12KeyStore(),new FileInputStream(key\u FILE\u位置)的新代码,“notasecret”、“privatekey”、“notasecret”);
,我只能在远程web服务器上测试该异常,因此我需要对整个项目进行GWT编译,然后该异常不会被序列化。我不确定是否应该将其作为SSLException/KeyException问题重新发布,但由于它在本地环境中工作,所以我不能完全确定这一点。
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                .setJsonFactory(JSON_FACTORY).setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                .setServiceAccountPrivateKeyFromP12File(new File(KEY_FILE_LOCATION))
                .setServiceAccountScopes(AnalyticsScopes.all()).build();