微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

URL.openConnection在不同环境中返回HttpsURLConnection的不同实例

如何解决URL.openConnection在不同环境中返回HttpsURLConnection的不同实例

我正在尝试使用以下代码段在Java中发出Https请求:

1. java.net.URL urlObject = new java.net.URL("/*my https url*/");
2. javax.net.ssl.HttpsURLConnection HttpsURLConnection = (javax.net.ssl.HttpsURLConnection)urlObject.openConnection();

在第2行的运行时,urlObject.openConnection()返回一个sun.net.www.protocol.https.DelegateHttpsURLConnection的实例,该实例被强制类型转换为javax.net.ssl.HttpsURLConnection

但是,在一种环境中,此方法不起作用,并给出以下异常:

java.lang.classCastException: com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl cannot be cast to javax.net.ssl.HttpsURLConnection

第2行的urlObject.openConnection()返回一个com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl的实例,该实例无法类型转换为javax.net.ssl.HttpsURLConnection

有人可以帮助我理解为什么urlObject.openConnection()在不同环境中返回不同类的不同实例。与依赖项等有关吗?

其他信息:

  • 我已经阅读了有关此的其他stackoverflow答案。我的目的是了解发生这种情况的根本原因,而在其他答案中却没有传达足够的信息。
  • 我发现一种工作方式是使用com.sun.net.ssl.HttpsURLConnection con = (com.sun.net.ssl.HttpsURLConnection) urlObj.openConnection();代替第2行。但是实际上com.sun.net.ssl.HttpsURLConnection已被弃用。
  • 另一种类似的解决方法是使用Http而不是Https,即使用java.net.HttpURLConnection = (java.net.HttpURLConnection) urlObject.openConnection(); ...但是,这并不能回答我有关问题实际发生原因的问题。
  • 我正在使用openJdk 8

解决方法

您是否有任何特定原因试图将其强制转换为javax.net.ssl.HttpsURLConnection?您可以使用基类URLConnection并执行操作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。