如何解决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 举报,一经查实,本站将立刻删除。