You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复AEM6.5中SonarQube提示的「不应捕获NullPointerException」错误

修复SonarQube的「NullPointerException should not be caught」错误

SonarQube提示这个错误的核心原因是:NullPointerException属于可以提前通过代码避免的编程错误,而非需要捕获处理的异常。你的修改没解决问题,是因为还有多个潜在的NPE风险点没覆盖,且用了生产环境不生效的assert。

你的代码存在的问题

  1. assert pageManager != null:assert在生产环境默认是禁用的,不会执行,等于没做校验
  2. requestedPage = pageManager.getPage(rootvalue):getPage()方法找不到对应页面时会返回null,直接调用listChildren()会触发NPE
  3. siblingPage.getProperties():部分场景下getProperties()可能返回null,后续调用get("hideInNav")会触发NPE

修复后的代码

@PostConstruct
protected void init() {
    if (resourceResolver == null) {
        log.error("resourceResolver is null in SideNavigation");
        return;
    }

    pageManager = resourceResolver.adaptTo(PageManager.class);
    if (pageManager == null) {
        log.error("Failed to adapt resourceResolver to PageManager in SideNavigation");
        return;
    }

    requestedPage = pageManager.getPage(rootvalue);
    if (requestedPage == null) {
        log.error("Requested page not found for root value: {}", rootvalue);
        return;
    }

    Iterator<Page> siblingPages = requestedPage.listChildren();
    if (siblingPages == null) {
        log.debug("No sibling pages found for requested page: {}", requestedPage.getPath());
        return;
    }

    while (siblingPages.hasNext()) {
        Page siblingPage = siblingPages.next();
        if (siblingPage == null) {
            continue;
        }

        ValueMap properties = siblingPage.getProperties();
        if (properties == null) {
            continue;
        }

        if (properties.get("hideInNav") == null) {
            siblingItems.add(siblingPage);
        }
    }
}

修复说明

  • 对每个可能返回null的对象(resourceResolver、pageManager、requestedPage、siblingPages、siblingPage、properties)都做了非空校验
  • 每个校验分支都添加了针对性的日志,便于排查问题
  • 移除了assert和NPE捕获逻辑,完全通过前置校验避免NPE
  • 循环中遇到null的siblingPage直接跳过,不影响后续处理

内容的提问来源于stack exchange,提问作者Naveen Rapelly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:25:21