我们在oshi版本6.1.6中的LinuxNetworkParams.getDomainName调用中看到了NPE。虽然我看不出任何原因。有人能帮助我解释为什么这会引发NPE吗?
Caused by: java.lang.NullPointerException
at oshi.software.os.linux.LinuxNetworkParams.getDomainName(LinuxNetworkParams.java:80) ~[oshi-core-6.1.6.jar!/:6.1.6]
at com.airwatch.common.diagnostics.DiagnosticCollector.fetchSystemConfiguration(DiagnosticCollector.java:148) ~[diagnostic-library-2.0.3.jar!/:?]
下面是该方法的代码:https://github.com/oshi/oshi/blob/oshi-parent-6.1.6/oshi-core/src/main/java/oshi/software/os/linux/LinuxNetworkParams.java#L79-L80
2条答案
按热度按时间ukqbszuj1#
info.ai_canonname
看起来像null
,请尝试为ai_canonname
添加空值检查或使用空值安全方式进行修剪,如StringUtils.trim()
lfapxunr2#
正如@Jishnu-Prathap在他们的answer中所说,
info.ai_canonname
是空的。此值通常会传回“主机的正式名称”,以回应
getaddrinfo()
函数,其docs状态为:如果
hints.ai_flags
包括AI_CANONNAME
标志,则返回的列表中第一个addrinfo
结构的ai_canonname
字段被设置为指向主机的正式名称。这可能表示服务器配置中存在错误;如果您保持相同的OSHI版本,修复“主机的正式名称”将阻止NPE。
然而,在OSHI的早期版本中,未能对该值进行空值检查是一个错误,但它是fixed in version 6.2.2,升级也将阻止NPE(但不会给予您一个规范的主机名,因为它不存在!)