0
我不明白爲什麼我不能做到這一點:艾斯波 - 在模式過濾器表達式中使用用戶定義的函數
select * from pattern [every A = EventA -> EventB(myFunction(A.property))]
從艾斯波文檔:「所有的表達式可以在過濾器中使用,包括靜態方法調用返回一個布爾值「。
如果我不嘗試從第一個匹配事件(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
使用其他事件而不是EventA不會更改任何內容。它看起來好像你沒有訪問上下文中匹配的事件(過濾器中的靜態方法調用)。 – Mihai
在線正常工作。請參閱http://esper-epl-tryout.appspot.com/epltryout/mainform.html。複製並粘貼:創建模式EventA(屬性字符串);創建模式EventB(屬性字符串); @Name('Out')select * from pattern [every A = EventA - > EventB(Boolean.parseBoolean(A.property))] .......和序列EventA = {property =「true」} EventB = {property =「true」} – user650839