为什么Java Stripe API对receiveChangeCipherSpec()有异常NoSuchMethodError?
我在void linux上使用带Payara 5和OpenJDK的Stripe Java库版本5.41.0 [void@void ~]$ java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment (build 1.8.0_202-b00)
OpenJDK 64-Bit Server VM (build 25.202-b00, mixed mode)
我得到了receiveChangeCipherSpec
的一个例外,如下所示:
java.lang.NoSuchMethodError: sun.security.ssl.Handshaker.receiveChangeCipherSpec()V
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1150)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
at com.stripe.net.LiveStripeResponseGetter.makeURLConnectionRequest(LiveStripeResponseGetter.java:429)
at com.stripe.net.LiveStripeResponseGetter.getStripeResponse(LiveStripeResponseGetter.java:582)
at com.stripe.net.LiveStripeResponseGetter.rawRequest(LiveStripeResponseGetter.java:500)
at com.stripe.net.LiveStripeResponseGetter.staticRequest(LiveStripeResponseGetter.java:526)
at com.stripe.net.LiveStripeResponseGetter.request(LiveStripeResponseGetter.java:74)
at com.stripe.net.APIResource.request(APIResource.java:186)
我认为这可能是因为缺乏无限的安全策略,但按照安装程序,我仍然有上述例外
尽管我正在进行的任何API调用都不起作用,但令人不快的代码是这一行:Customer.retrieve(stripeCustomerId)
升级Stripe库会解决这个问题吗,还是我错过了Payara的一个罐子或其他东西
# 1 楼答案
这个问题的答案与这里相同(sun.security.ssl.SSLSessionImpl not found)。总而言之,问题在于,这种方法确实是错误的,它应该更像是^{,因为,引用Antoine的话:
帕亚拉/
Glassfish embeds native sun.* classes into [glassfish5_home]/glassfish/modules/endorsed/grizzly-npn-bootstrap.jar, so it conflicts with others classes included into [JDK_HOME]/jre/lib/jsse.jar
我使用了Antoine的解决方案,即打开
grizzly-npn-bootstrap.jar
并删除sun
文件夹,这样它就不再冲突,并从jsse.jar
加载正确的类在linux上,您可以使用Ark打开jar并直接删除,而在Windows上,您似乎可以使用7zip执行同样的操作。先做一个备份,以防将来需要回到原来的jar