【发布时间】:2012-04-08 15:15:57
【问题描述】:
我的httpclient项目遇到了一个奇怪的问题。它在其他两个使用java1.6的Centos系统上运行成功。但它在另一台机器(centos 和 java1.6)上失败了。问题是:
java.lang.IllegalStateException:初始化默认 SSL 上下文失败 [java] 在 org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:211) [java] 在 org.apache.http.conn.ssl.SSLSocketFactory.(SSLSocketFactory.java:333) [java] 在 org.apache.http.conn.ssl.SSLSocketFactory.getSocketFactory(SSLSocketFactory.java:165) [java] 在 org.apache.http.impl.conn.SchemeRegistryFactory.createDefault(SchemeRegistryFactory.java:45) [java] 在 org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:294) [java] 在 org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:445) [java] at simulativeLogin.WebClientDevWrapper.wrapClient(Unknown Source) [java] at simulativeLogin.GetAccessToken.getToken(Unknown Source) [java] 在 crawler.FriendshipCrawler.main(未知来源) [java] 在 java.lang.reflect.Method.invoke(libgcj.so.10) [java] 在 org.apache.tools.ant.taskdefs.ExecuteJava.run(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.taskdefs.ExecuteJava.execute(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.taskdefs.Java.run(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.taskdefs.Java.executeJava(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.taskdefs.Java.executeJava(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.taskdefs.Java.execute(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.UnknownElement.execute(ant-1.7.1.jar.so) [java] 在 java.lang.reflect.Method.invoke(libgcj.so.10) [java] 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.Task.perform(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.Target.execute(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.Target.performTasks(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.Project.executeSortedTargets(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.Project.executeTarget(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.helper.DefaultExecutor.executeTargets(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.Project.executeTargets(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.Main.runBuild(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.Main.startAnt(ant-1.7.1.jar.so) [java] 在 org.apache.tools.ant.launch.Launcher.run(ant-launcher-1.7.1.jar.so) [java] 在 org.apache.tools.ant.launch.Launcher.main(ant-launcher-1.7.1.jar.so) [java] 引起:java.lang.IllegalStateException [java] 在 gnu.javax.net.ssl.provider.X509KeyManagerFactory.engineGetKeyManagers(libgcj.so.10) [java] 在 javax.net.ssl.KeyManagerFactory.getKeyManagers(libgcj.so.10) [java] 在 org.apache.http.conn.ssl.SSLSocketFactory.createSSLContext(SSLSocketFactory.java:187) [java] 在 org.apache.http.conn.ssl.SSLSocketFactory.createDefaultSSLContext(SSLSocketFactory.java:209)【问题讨论】:
-
这是线索:由
IllegalStateExceptiongnu.javax.net.ssl.provider.X509KeyManagerFactory.engineGetKeyManagersinlibgcj.so.10引起。 -
对于我自己,我只是想“gcj?你的问题就在那里!”但我想这对你来说不是一个有用的答案……
-
问题已解决。 javac 的版本是 1.5,但 open-jdk 的版本是 1.6。匹配版本后问题消失。
-
@DonalFellows,你应该为此写一个答案。 Lujingsun,这不仅仅是 Java 的版本,还有 JRE 实现及其安全提供程序,特别是您明显使用的是 GCJ 实现,而不是 OpenJDK。
标签: java linux ssl https httpclient