无法为Spring Integration 5.0.4创建Kotlin配置(Spring 5.0.5)

时间:2018-04-26 19:52:10

标签: java spring kotlin spring-integration

kotlin 1.2.40 spring integration 5.0.4

(正在使用1.2.30 + 4. * spring integration)

尝试创建集成流配置(多种方式):

 ...
 .route { m : MyClass -> m.key } 
 ...
 .route ( MyClass::class.java, { m : MyClass -> m.key })
 ...
 //even
 .route<MyClass,String>( object:java.lang.functions.Function<MyClass,String> ...)

所有这些符号编译但在Spring Integration时在运行时失败 找不到用作路线的方法。

如果用Java重写配置 - 全部工作。

有一点是Kotlins lambdas不是合成类,而Java是, 所以Spring Integration不会将它们视为lambda。

另一方面它起作用,一些DSL的东西如transform和其他一些仍然与Kotlin lambdas一起工作。

使用显式方法名称可以避免:

   .route ({ m : MyClass -> m.key },"apply") 

虽然这很难看。

除了“应用”或将@Configuration与Sp Int转移到Java之外,有没有人知道解决方案?

GITHUB上的工作示例https://github.com/comdiv/kotlin-spring-issue/blob/master/src/test/kotlin/comdiv/TryCreateIntegrationFlowTest.kt

1 个答案:

答案 0 :(得分:1)

我认为它适用于transform(),因为GenericTransformer只有一种方法可供选择。它之前有效,因为Function接口已从Java 8复制到Java 7代码库,并且只有一个apply()方法。

到目前为止,我看到你有一个解决方法。作为修复,我可以建议修改所有基于Function的Java DSL EI方法,明确指定apply方法,不要陷入歧义。

虽然我认为这确实是Kotlin问题,但它并不尊重Java ......