首页 > 解决方案 > 我正在尝试从 ResourceResolverFactory 获取对 ResourceResolver 的引用,但得到 Null 指针异常

问题描述

      Map<String, Object> param = new HashMap<String, Object>();
      param.put(ResourceResolverFactory.SUBSERVICE,"datawrite");
      log.info("param created."); 
      ResourceResolver resolver = null;  
    try {
         resolver=resolverFactory.getResourceResolver(param);
         log.info("resolveer created.");   
      Session session = resolver.adaptTo(Session.class);
      log.info("Session created.");
        // Create a node that represents the root node
        Node root = session.getRootNode();
        // Get the content node in the JCR
        Node content = root.getNode("/content");        
        Node customerRoot = null;
        int custRec = doesCustExist(content);
                log.info("does Customer Exist : "+ custRec);
        // -1 means that content/customer does not exist
        if (custRec == -1) {
            // content/customer does not exist -- create it
            customerRoot = content.addNode("customer");
        } else {
            // content/customer does exist -- retrieve it
            customerRoot = content.getNode("customer");
        }

        int custId = custRec + 1; // assign a new id to the customer node
    // Store content from the client JSP in the JCR
        Node custNode = customerRoot.addNode("customer" + firstName + lastName + phone+desc);
    // make sure name of node is unique
        custNode.setProperty("id", custId);
        custNode.setProperty("firstName", firstName);
        custNode.setProperty("lastName", lastName);
        custNode.setProperty("phone", phone);
        custNode.setProperty("desc", desc);
        // Save the session changes and log out
        session.save();
        session.logout();
        return custId;
    }
catch (Exception e) {
        log.error("RepositoryException: " + e);
    }

我收到了这个错误:

错误[0:0:0:0:0:0:0:1 [1567433510240] GET /bin/abc HTTP/1.1] aem.community.mf.core.servlets.SaveJcrData RepositoryException: java.lang.NullPointerException

标签: javaaem

解决方案


如果您尝试在 Sling Model 中获取资源解析器,请使用以下注释。

@Inject
  private ResourceResolver resourceResolver;

还要确保您的课程是从 AEM 调用的。为了根据我以前的遭遇进行更多解释,这里有一些例子:

自定义工作流程流程 - 使用 @Reference 注释,您将能够获取资源解析器,因为当工作流程到达步骤时,该流程是直接从 AEM 调用的

从另一个类 B 调用的 A 类 - 在这种情况下,资源解析器在 A 类中将为空,因为该类不是从 AEM 调用的


推荐阅读