Spring XD - 过滤器中 SpEL 表达式中的 instanceof
Spring XD - instanceof in SpEL expression in filter
我正在尝试在流过滤器的 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'
我的问题是有人能告诉我 SpEL 表达式中 instanceof 的正确语法吗?或者如果这是正确的语法那么问题可能是什么?
根据 StackStrace - Type cannot be found
和 StandardTypeLocator
中的逻辑:
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''''
或者将你的 jar 放到 dirt container
类路径中。
从另一方面来说,为消息系统使用 domain-specific 类型总是一个坏主意。您应该考虑如何使用标准支持的类型来克服这个问题,并将检查条件替换为某个值(在标准类型中)到消息 headers.
我正在尝试在流过滤器的 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'
我的问题是有人能告诉我 SpEL 表达式中 instanceof 的正确语法吗?或者如果这是正确的语法那么问题可能是什么?
根据 StackStrace - Type cannot be found
和 StandardTypeLocator
中的逻辑:
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''''
或者将你的 jar 放到 dirt container
类路径中。
从另一方面来说,为消息系统使用 domain-specific 类型总是一个坏主意。您应该考虑如何使用标准支持的类型来克服这个问题,并将检查条件替换为某个值(在标准类型中)到消息 headers.