首页 > 解决方案 > Groovy 在调用 getter 方法时抛出 MissingPropertyException

问题描述

我正在为 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]

我尝试调用的吸气剂存在于课堂上。

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

标签: groovyhybris

解决方案


变量名替换getter解决了这个问题。

代替-

def x = at.getCronExpression(); // error

def xam = at.cronExpression; // working

完整的工作groovy-

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
  }
}

推荐阅读