2015-11-06 25 views
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 

回答

0

或許EventA和實際事件對象的事件類型信息不匹配,所以艾斯波不能檢索的屬性值。嘗試比較發送的類型信息和實際對象。

+0

使用其他事件而不是EventA不會更改任何內容。它看起來好像你沒有訪問上下文中匹配的事件(過濾器中的靜態方法調用)。 – Mihai

+0

在線正常工作。請參閱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