2015-03-02 43 views
1

我想在過濾器中的SpEL表達式中使用instanceof運算符作爲流。我正在嘗試以下操作:Spring XD - 過濾器中SpEL表達式中的instanceof

stream create myStream --definition "tap:job:jobName > filter --expression='payload instanceof T(com.package.name.event.SomeEvent)' | log --deploy 

我將自己的活動發佈到xd.job.aggregatedEvents頻道。我的意圖是通過使用instanceof運算符進行篩選來僅記錄我的SomeEvent。

的問題是我收到以下錯誤:

org.springframework.expression.spel.SpelEvaluationException: EL1005E:(pos 0): Type cannot be found 'com.package.name.event.SomeEvent' 

我的問題是任何人都可以告訴我,在規劃環境地政司表達式的instanceof正確的語法?或者如果這是正確的語法,那麼問題可能是什麼?

回答

1

按照StackStrace - Type cannot be foundStandardTypeLocator邏輯:

try { 
    return ClassUtils.forName(nameToLookup, this.classLoader); 
} 
catch (ClassNotFoundException ey) { 
    // try any registered prefixes before giving up 
.... 
throw new SpelEvaluationException(SpelMessage.TYPE_NOT_FOUND, typeName); 

你剛剛結束了與像ClassNotFoundException問題。因此,您的具有com.package.name.event.SomeEvent的jar不在XD CLASSPATH中。

您可以使用文字進行比較:

--expression='payload.class.name == '''com.package.name.event.SomeEvent'''' 

或者只是把你的罐子到類路徑dirt container

從另一方面來說,爲郵件系統使用特定於域的類型總是一個壞主意。您應該考慮如何使用標準支持的類型來克服該問題,並將檢查條件替換爲郵件標題中的某些值(標準類型)。

+0

謝謝阿爾喬姆。我最終遵循了你的建議,並將消息製作成字符串並添加了一個我用來過濾的標題。因此,流現在看起來像:stream create myStream --definition「tap:job:jobName> filter --expression ='headers [\」custom_event \「]!= null'| log --deploy – Stuart 2015-03-03 08:49:44