1

我正在制作一个自定义 sql 应用程序。我创建了一个服务构建器,创建了查找器列,构建并部署了它。表创建成功。现在我手动创建了一个*FinderImpl类和一个包含必要详细信息的 custom-sql 文件夹并重建了服务。*Finder界面生成成功。我在*FinderImpl类中实现了*Finder接口,然后重建了服务,但没有生成*FinderUtil 。我忽略了它,因为我可以轻松地直接调用*FinderImpl类的方法。我在*FinderImpl类中创建了一个自定义方法并重建了服务。我在*LocalServiceImpl中调用此方法并调用*LocalServiceImpl通过*LocalServiceUtil。但令我惊讶的是,我得到了最常见的错误——“ NullPointerException ”。我调试并发现*LocalServiceUtil的getService()方法的值为 null。请告诉我如何消除此错误,因为我整天都被卡住但无法解决。所以,请帮忙。提前谢谢。

4

2 回答 2

1

当我向我的服务生成器NullPointerException添加一个类时,我遇到了同样的问题。EntityFinderImpl

我刚刚发现我需要在我的EntityFinderImpl类中添加一个 Component 注释:

@Component(
        service = EntityFinder.class
)
public class EntityFinderImpl extends EntityFinderBaseImpl implements EntityFinder {
    public List<Entity> findByDate(Date date) {
        ...
        return dates;
    }
}

这似乎发生在 EntityLocalServiceBaseImpl 类获得了一个指向 的@Reference添加点EntityFinder,但由于没有要引用的组件,因此无法满足该引用。

您可以使用以下命令诊断这是否是 Gogo shell 中的问题:

ds:unsatistied

或可选:

ds:unsatisfied <bundleid>

您还可以使用 Gogo 命令查看包中的组件和引用:

scr:list <bundleid>

最后,另请参阅Liferay 的 Detecting Unresolved OSGi Components文档。

于 2019-07-01T05:29:09.907 回答
0

你的类查找器声明必须是

public class CustomUser2FinderImpl extends CustomUser2BaseFinderImpl implements CustomUser2Finder

构建服务时,build.gradle 中有一些属性,因此如果要生成 FinderUtil 类,必须将 osgiModule 设置为 false。

buildService {
    osgiModule = false
}

否则,如果您想使用 osgi,您可以通过这种方式检索 finder

@Reference
private volatile CustomUser2Finder customUser2Finder;
于 2016-11-30T18:24:45.227 回答