我不明白为什么我无法做到这一点:
select * from pattern [every A = EventA -> EventB(myFunction(A.property))]
来自Esper文档:“所有表达式都可以在过滤器中使用,包括返回布尔值的静态方法调用”。
如果我不尝试引用第一个匹配事件(EventA)中的属性,而只是尝试将属性从EventB传递给myFunction,它可以正常工作。
我得到的错误是:
com.espertech.esper.client.EPException: java.lang.ArrayIndexOutOfBoundsException: 1
at com.espertech.esper.core.service.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:464)
at com.espertech.esper.core.service.EPRuntimeImpl.processEvent(EPRuntimeImpl.java:437)
at com.espertech.esper.core.service.EPRuntimeImpl.sendEvent(EPRuntimeImpl.java:196)
.................
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at com.espertech.esper.epl.expression.ExprIdentNodeEvaluatorImpl.evaluate(ExprIdentNodeEvaluatorImpl.java:30)
at com.espertech.esper.epl.expression.ExprDotEvalStaticMethod.get(ExprDotEvalStaticMethod.java:133)
at com.espertech.esper.filter.FilterParamIndexEquals.matchEvent(FilterParamIndexEquals.java:28)
at com.espertech.esper.filter.FilterParamIndexEquals.matchEvent(FilterParamIndexEquals.java:51)
at com.espertech.esper.filter.FilterHandleSetNode.matchEvent(FilterHandleSetNode.java:97)
at com.espertech.esper.filter.EventTypeIndex.matchType(EventTypeIndex.java:171)
at com.espertech.esper.filter.EventTypeIndex.matchEvent(EventTypeIndex.java:109)
at com.espertech.esper.filter.FilterServiceImpl.evaluate(FilterServiceImpl.java:75)
at com.espertech.esper.core.service.EPRuntimeImpl.processMatches(EPRuntimeImpl.java:911)
at com.espertech.esper.core.service.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:459)
... 30 more
答案 0 :(得分:0)
可能EventA的事件类型信息与实际事件对象不匹配,因此Esper无法检索属性值。尝试比较类型信息和发送的实际对象。