Не удается создать конфигурацию Kotlin для Spring Integration 5.0.4 (Spring 5.0.5) - PullRequest
0 голосов
/ 26 апреля 2018

котлин 1.2.40 пружинная интеграция 5.0.4

(работал с 1.2.30 + 4. * пружинная интеграция)

попробуйте создать конфигурацию потока интеграции (несколькими способами):

 ...
 .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 - все работает.

Одна вещь состоит в том, что лямбды Котлина не являются синтетическим классом, в то время как Java, поэтому Spring Integration не видит их как лямбды.

С другой стороны, он работал раньше, и некоторые вещи DSL, такие как transform, а некоторые другие все еще работают с лямбдами Котлина.

Этого можно избежать с помощью явного имени метода:

   .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 голосов
/ 27 апреля 2018

Я думаю, что это работает с transform(), потому что GenericTransformer имеет только один метод для выбора. Он работал ранее, потому что интерфейс Function был скопирован из Java 8 в базу кода Java 7 и только с одним методом apply().

Пока я вижу, что у вас есть обходной путь. В качестве исправления я могу предложить изменить все EI-методы Java DSL на основе Function, чтобы явно указать метод apply и не допустить двусмысленности.

Хотя я думаю, что на самом деле проблема Котлина в том, что она не соблюдает Java ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...