【问题标题】:No signature of method error while using Groovy in Bonita在 Bonita 中使用 Groovy 时没有方法错误的签名
【发布时间】:2019-05-15 06:03:50
【问题描述】:

我正在使用 Bonita 7.7.4。 Groovy 脚本可以在 Bonita 中使用。 我写了下面的脚本,它可以工作,但是当“状态”字段不退出时,它有错误。

String status = apiAccessor.identityAPI.getCustomUserInfo(startedById, 0, 1000).stream().filter({ row ->
        "status" == row.getDefinition().getName() 
}).findFirst().orElse("").getValue();

错误:

Possible solutions: getClass(), getAt(int), getAt(groovy.lang.Range), getAt(java.lang.String), getAt(groovy.lang.Range), getAt(java.util.Collection) ( ). ( )
at org.bonitasoft.engine.execution.ProcessExecutorImpl.start(ProcessExecutorImpl.java:839)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.start(ProcessExecutorImpl.java:782)
at org.bonitasoft.engine.api.impl.ProcessStarter.start(ProcessStarter.java:132)
at org.bonitasoft.engine.api.impl.ProcessStarter.start(ProcessStarter.java:103)
at ... 44 more. ( )
at  Caused by: org.bonitasoft.engine.expression.exception.SExpressionEvaluationException.: groovy.lang.MissingMethodException: No signature of method: java.lang.String.getValue() is applicable for argument types: () values: []
 Possible solutions: getClass(), getAt(int), getAt(groovy.lang.Range), getAt(java.lang.String), getAt(groovy.lang.Range), getAt(java.util.Collection) ( ). ( )
at org.bonitasoft.engine.expression.impl.GroovyScriptExpressionExecutorCacheStrategy.evaluate(GroovyScriptExpressionExecutorCacheStrategy.java:147)
at org.bonitasoft.engine.expression.impl.ExpressionServiceImpl.evaluate(ExpressionServiceImpl.java:86)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluateExpressionWithResolvedDependencies(ExpressionResolverServiceImpl.java:213)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluateExpressionsFlatten(ExpressionResolverServiceImpl.java:120)
at org.bonitasoft.engine.core.expression.control.api.impl.ExpressionResolverServiceImpl.evaluate(ExpressionResolverServiceImpl.java:83)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.initializeSingleBusinessData(ProcessExecutorImpl.java:448)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.initializeBusinessData(ProcessExecutorImpl.java:435)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.initialize(ProcessExecutorImpl.java:387)
at org.bonitasoft.engine.execution.ProcessExecutorImpl.start(ProcessExecutorImpl.java:824)
at ... 47 more. ( )
at  Caused by: groovy.lang.MissingMethodException.: No signature of method: java.lang.String.getValue() is applicable for argument types: () values: []
  Possible solutions: getClass(), getAt(int), getAt(groovy.lang.Range),   getAt(java.lang.String), getAt(groovy.lang.Range), getAt(java.util.Collection) ( ). ( )
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
at BScript83.run(BScript83.groovy:47)
at org.bonitasoft.engine.expression.impl.GroovyScriptExpressionExecutorCacheStrategy.evaluate(GroovyScriptExpressionExecutorCacheStrategy.java:141)
at ... 55 more. ( )

【问题讨论】:

  • No signature of method: java.lang.String.getValue() ....orElse("").getValue() 似乎是最有可能发生的地方。
  • 因为你有 .orElse("") 返回字符串。而且字符串没有getValue()方法
  • 是的,你说得对,我改变了它并且它有效:.orElse(null)?.getValue();

标签: groovy bonita


【解决方案1】:

问题来了

.findFirst().orElse("").getValue();

改用这个

.findFirst().orElse("");

说明

findFirst()Stream<String> 上调用,因此它返回Optional<String>。如果流为空.orElse("") 确保将返回一个空字符串而不是流的第一个元素。显然,如果您宁愿在流为空时返回null,请使用以下

.findFirst().orElse(null);

【讨论】:

    【解决方案2】:

    您正在编写 Java 8 代码,您可以选择 Groovy 语法:

    def status = apiAccessor.identityAPI
                     .getCustomUserInfo(startedById, 0, 1000)
                     .find { "status" == it.getDefinition().getName() }
                     ?.getValue()
    

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2018-12-26
      • 2012-10-03
      • 2021-04-28
      • 2014-10-16
      相关资源
      最近更新 更多