Hybris本地测试报NPE:Item.getImplementation()返回空值问题
Hybris单元/集成测试空指针异常(Item实现类为null)解决方案
问题现象
本地运行Hybris单元测试或集成测试时,抛出以下空指针异常:
java.lang.NullPointerException: Cannot invoke "de.hybris.platform.jalo.Item$ItemImpl.isLocalCachingSupported()" because the return value of "de.hybris.platform.jalo.Item.getImplementation()" is null
异常触发在ProductData类的setCode方法调用setProperty处。此前使用ant yunitinit可解决同类问题,但本次执行ant clean all、ant initialize均无效。
根因分析
- 最初通过
items.xml定义了自定义Item类型ProductData,系统生成了对应数据库表与类,测试运行正常 - 后续修改
ProductData的声明方式(移除items.xml中的定义,改用普通Java类),但数据库中仍保留了原ProductData类型的历史数据 - 类型声明变更后,Hybris无法匹配数据库中旧数据对应的Item实现类,导致调用
getImplementation()返回null,触发空指针
解决步骤
清理数据库冲突数据
直接操作数据库删除ProductData对应表的所有数据(表名通常为productdata或带项目前缀的对应表);或通过ImpEx脚本批量删除:REMOVE ProductData;code[unique=true]执行命令导入ImpEx:
ant import -Dimport.file=path/to/your-delete-impex.impex彻底清理缓存与编译文件
执行ant clean all清理项目编译产物,手动删除Hybris安装目录下的temp文件夹,确保残留缓存完全清除同步类型与数据库Schema
执行ant initialize重新初始化系统,让数据库Schema与当前代码中的类型声明完全匹配;若无需全量初始化,可使用ant updatesystem进行增量更新验证测试结果
重新运行单元/集成测试,确认空指针异常已解决
内容的提问来源于stack exchange,提问作者Hero Hamada
相关产品推荐
相关产品推荐

