Groovy在调用getter方法时抛出MissingPropertyException

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

我正在为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]
我试图调用的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
  }
}