【问题标题】:NoSuchAlgorithm when calling Rest WebService调用 Rest Web Service 时没有这样的算法
【发布时间】:2016-02-02 11:47:37
【问题描述】:

我有这段代码直接处理来自 REST 客户端的响应:

 uc = (HttpURLConnection) u.openConnection();
 uc.setConnectTimeout(2000);
 uc.setDoOutput(true);

 out = new OutputStreamWriter(uc.getOutputStream());
 out.write(posturl);
 out.flush();
 rd = new BufferedReader(new InputStreamReader(uc.getInputStream()));

当我运行这段代码(实际上它是一个 jar 在 OpenESB 中运行我的 BPEL)时,我得到以下异常:

java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext) cause java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

我不确定这里发生了什么,更不用说解决它了。我猜这与作为 HTTPS 服务器的端点有关。我自己对 HTTPs 的经验很少,所以我不确定是什么原因或如何解决它。

完整的 StackTrace(或与 OpenESB 提供的一样完整):

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)
    at javax.net.ssl.DefaultSSLSocketFactory.throwException(SSLSocketFactory.java:198)
    at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:205)
    at sun.net.www.protocol.https.HttpsClient.createSocket(HttpsClient.java:361)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:162)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:378)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:473)
    at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:270)
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:327)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:931)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1090)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
    at es.myapp.OpenAMRESTAuthentication.readURLResponse(OpenAMRESTAuthentication.java:157)
    at es.myapp.OpenAMRESTAuthentication.authenticate(OpenAMRESTAuthentication.java:60)
    at es.myapp.OpenAMRESTAuthentication.authenticate(OpenAMRESTAuthentication.java:94)
    at es.myapp.AuthSingleton.authenticate(AuthSingleton.java:82)

【问题讨论】:

  • 你能发布完整的 Stacktrace 吗?通常真正的罪魁祸首在其他地方,这只是一个症状。
  • 应该是HttpsURLConnection。你可以将 u.open 连接到HttpsURLConnection 并尝试一下。
  • @MadhusudanaReddySunnapu 我不能那样做;这是我的网络服务器上的一个 jar。它应该与端点一起工作,我已经看到它在其他应用程序上工作。

标签: java rest ssl


【解决方案1】:

解决了!感谢@Daniel 指出了一个类似的答案,原来我的 OpenESB 有这些启动参数:

"-Djavax.net.ssl.keyStore=%OPENESB_HOME%/keystore.jks" "-Djavax.net.ssl.trustStore=%OPENESB_HOME%/cacerts.jks" -Djavax.net.ssl.keyStorePassword=changeit

删除它们,它又可以工作了:)

【讨论】:

    猜你喜欢
    • 2016-06-09
    • 2021-11-23
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多