自从我更新到Java 11之后,我得到了一个异常,这是不可能确定下来的。
请注意:异常提到的类在我自己的代码中是找不到的。
堆栈跟踪只显示我的代码中哪些部分遇到了问题,但是没有给出导致问题的实际代码(第三方)的上下文。
以前在Stackoverflow中已经问过这个异常,但是我只能在找到造成这种情况的第三方代码并对其进行升级时才能解决这个问题,这(希望)意味着我可以看到它的背面。
例外情况如下:
java.lang.ClassCastException: class sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to class com.sun.net.ssl.HttpsURLConnection (sun.net.www.protocol.https.HttpsURLConnectionImpl and com.sun.net.ssl.HttpsURLConnection are in module java.base of loader 'bootstrap')
我非常怀疑一些非常老的apache类,并将它们替换为java.net.http类(自Java 11以来就可以使用),但没有效果。
问题是:有什么方法可以找到哪个.jar包含使用HttpsURLConnectionImpl
和HttpsURLConnection
的代码?
有谁知道他们的are in module java.base of loader 'bootstrap'
意味着什么呢?
发布于 2022-03-24 17:32:14
错误来自pd4ml,这是一个用于生成pdfs的java库。
我更新了最新版本(3.11.5),它解决了这个问题。
发布于 2022-02-21 11:40:45
在加载程序‘引导’的模块java.base中
这意味着类sun.net.www.protocol.https.HttpsURLConnectionImpl
由引导加载程序加载,并作为模块base
的一部分加载。这是完全无用的信息:该模块是核心的java组件(java.lang.String
也在其中),而加载器是加载这些内容的那个模块。难怪;sun.*
类是实现细节的一部分,是所有JDK都不需要的一部分。它对解决这个问题没有任何帮助。
例外情况如下:
只有两种选择。
我猜这是选项2--这是一件很常见的事情,并通过手工教程来延续。修复是不幸的:遍历all您的代码并修复坏代码。对.getMessage()
的搜索应该会让你走得很远。听起来你确实是在做这样的事:
try {
.. code here ..
} catch (Exception e) {
log.warn(e.getClass() + ": " + e.getMessage());
}
或者类似的。这总是很糟糕的--不要仅仅是“日志/打印”,而要忘记一个异常:您希望处理任何异常,或者继续抛出。当您编写代码时,您永远不想接受一个含义不明确的异常,而只是“吞下”它。更新IDE的模板设置以生成try/catch子句;编写代码的正确方法是:“异常?嗯.我现在不想考虑它们/我不知道它们意味着什么/我知道它们意味着什么,但是现在我无法对它们做任何有用的事情,或者我无法弄清楚它们是如何发生的”,它涵盖了您需要处理异常的大部分时间,如下所示:
try {
.. stuff ..
} catch (SomethingIDoNotWantToHandleException e) {
throw new RuntimeException("unhandled", e);
}
这将确保您现在看到该错误的位置具有实际的堆栈跟踪,然后让您知道需要更新哪个库。
https://stackoverflow.com/questions/71205583
复制相似问题