Groovy在调用getter方法时抛出MissingPropertyException
我正在为Hybris编写一个小的Groovy脚本 由于未知原因,当我尝试调用.getCronExpression()时,Groovy尝试获取名为getCron的属性Groovy在调用getter方法时抛出MissingPropertyException,groovy,hybris,Groovy,Hybris,我正在为Hybris编写一个小的Groovy脚本 由于未知原因,当我尝试调用.getCronExpression()时,Groovy尝试获取名为getCron的属性 Script execution has failed [reason: groovy.lang.MissingPropertyException: No such property: getCron for class: de.hybris.platform.cronjob.model.TriggerModel] 我试图调用的g
Script execution has failed [reason: groovy.lang.MissingPropertyException: No such property: getCron for class: de.hybris.platform.cronjob.model.TriggerModel]
我试图调用的getter存在于类中
def methods = TriggerModel.declaredMethods.findAll { !it.synthetic }.name
println methods;
//[getDaysOfWeek, getWeekInterval, setDaysOfWeek, setWeekInterval, getRelative, getJob, setActivationTime, setMaxAcceptableDelay, getTimeTable, setActive, setJob, getCronJob, getActivationTime, setDateRange, getDateRange, getMaxAcceptableDelay, getCronExpression, setCronExpression, setCronJob, getActive, setRelative, setDay, setHour, setMinute, setSecond, getHour, getMinute, getSecond, getYear, getMonth, setYear, setMonth, getDay]
代码部分:
def currentDate = new Date();
def query = new FlexibleSearchQuery("SELECT {pk} FROM {cronjob} WHERE {active} IS true");
def result = flexibleSearchService.search(query).getResult();
for (cj in result) {
def activeTriggers = cj.getTriggers().stream().filter{p -> p.getActive()}.collect();
if (activeTriggers){
def at = activeTriggers.get(0);
def activationTS = at.getActivationTime(); // works
if (activationTS.before(currentDate)){
println cj.code + " has invalid next activation date set: " + activationTS;
}
def x = at.getCronExpression(); // error
}
更新:该项目使用hybris 5.7您可以在加载
activeTriggers
的地方共享您的groovy部件吗
我创建了一个示例groovy来加载触发器,并为第一个对象打印CronExpression
,它的工作非常出色
import de.hybris.platform.servicelayer.search.FlexibleSearchQuery;
flexibleQuery = new FlexibleSearchQuery("select {pk} from {Trigger}");
flexibleSearchService = spring.getBean("flexibleSearchService")
activeTriggers = flexibleSearchService.search(flexibleQuery).getResult();
def at = activeTriggers.get(0);
def x = at.getCronExpression();
输出
0 0 0/4 * * ? *
在PO编辑问题后我仍然没有看到getCronExpression
错误,我相信您当时是在另一个对象上调用函数的TriggerModel
。尽管groovy中存在一些语法错误,但副本的工作版本如下所示。(1905年版测试)
用变量名替换getter修复了这个问题
替换-
def x = at.getCronExpression(); // error
与
完全工作槽-
import de.hybris.platform.servicelayer.search.FlexibleSearchQuery;
def currentDate = new Date();
def query = new FlexibleSearchQuery("SELECT {pk} FROM {cronjob} WHERE {active}='1'");
def result = flexibleSearchService.search(query).getResult();
for (cj in result) {
def activeTriggers = cj.getTriggers().stream().filter{p -> p.getActive()}.collect();
if (activeTriggers){
def at = activeTriggers.get(0);
def activationTS = at.getActivationTime(); // works
if (activationTS.before(currentDate)){
println cj.code + " has invalid next activation date set: " + activationTS;
}
def xam = at.cronExpression; // working
}
}
更新了问题。您现在遇到了什么错误?看来你一定没有遇到你之前遇到的问题,也就是说,没有found@www.hybriscx.com您使用的是哪个版本的hybris?事实上,我尝试了我们的代码,但出现了相同的错误,但似乎
at.\u cronExpression
是一种变通方法(groovy似乎跳过了“表达式”这个词),这怎么可能呢?表达式在Groovy中不是保留关键字。它可能与我们正在使用的hybris版本(5.7)有关。我想是的,这似乎是在hybris的最新版本上修复的。是的,这解决了它。但是没有回答为什么Groovy不能正确地调用getter。
def xam = at.cronExpression; // working
import de.hybris.platform.servicelayer.search.FlexibleSearchQuery;
def currentDate = new Date();
def query = new FlexibleSearchQuery("SELECT {pk} FROM {cronjob} WHERE {active}='1'");
def result = flexibleSearchService.search(query).getResult();
for (cj in result) {
def activeTriggers = cj.getTriggers().stream().filter{p -> p.getActive()}.collect();
if (activeTriggers){
def at = activeTriggers.get(0);
def activationTS = at.getActivationTime(); // works
if (activationTS.before(currentDate)){
println cj.code + " has invalid next activation date set: " + activationTS;
}
def xam = at.cronExpression; // working
}
}