使用Lambdas进行Java跟踪会产生笨拙的行为

使用Lambdas进行Java跟踪会产生笨拙的行为,java,lambda,java-8,spring-integration,spring-integration-dsl,Java,Lambda,Java 8,Spring Integration,Spring Integration Dsl,我在Spring集成库中使用DSL和Lambdas,遇到了一个奇怪的问题 我试图构建一个IntegrationFlow,它将在换行符处分割文件数据。当我将lambda表达式内联到生成器时,它工作得很好: return IntegrationFlows.from(this.inboundStreamingMessageSource()) .transform(new StreamTransformer("UTF-8")) .split(s->s.applySe

我在Spring集成库中使用DSL和Lambdas,遇到了一个奇怪的问题

我试图构建一个IntegrationFlow,它将在换行符处分割文件数据。当我将lambda表达式内联到生成器时,它工作得很好:

return IntegrationFlows.from(this.inboundStreamingMessageSource())
        .transform(new StreamTransformer("UTF-8"))
        .split(s->s.applySequence(true).get().getT2().setDelimiters("\n"))
在上面的示例中,split方法接收SplitterEndpointSpec的使用者。在这一点上,为了可读性,我将lambda分解到自己的字段中:

return IntegrationFlows.from(this.inboundStreamingMessageSource())
        .transform(new StreamTransformer("UTF-8"))
        .split(NewlineSplitter)
        ...

final Consumer<SplitterEndpointSpec<DefaultMessageSplitter>> NewlineSplitter = 
    s -> s.applySequence(true).get().getT2().setDelimiters("\n");
返回IntegrationFlows.from(this.inboundStreamingMessageSource())
.transform(新的StreamTransformer(“UTF-8”))
.split(newlinespliter)
...
最终使用者换行拆分器=
s->s.applySequence(true).get().getT2().setDelimiters(“\n”);
但是,我得到一个stacktrace异常运行这个。目前:

org.springframework.messaging.MessageHandlingException:嵌套异常为java.lang.IllegalArgumentException:未找到消息的候选方法

另一次,我得到了一个Classcast异常,指出String.class类型无法转换为SplitterEndpointSpec。如果您查看我从中调用的
split
IntegrationFlowDefinition的API文档,您可以看到该方法被严重隐藏:大约有12种不同参数长度的变体。编译器是否误解了我调用的split的哪个版本


我根本看不出是什么导致了这种行为,也不确定这是Java8错误还是Spring集成实现的问题。我使用的是spring integration dsl 1.2.3.RELEASE,由于为其构建的另一个库中定义的依赖关系,我目前可能无法使用该版本。

首先,您不需要练习
get().getT2().setDelimiters(“\n”)
-已经有一个
分隔符()
SplitterEndpointSpec上的
选项

s.applySequence(true).delimiters("\n")
其次,它看起来更像是您使用的编译器的问题。我们刚刚使用以下工具测试了您的用例:

java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
工作正常,没有任何抱怨和运行时错误


另一方面,我使用最新的Spring集成。你呢?正在使用哪个版本?

感谢您提供有关分隔符选项的提示。我没有使用最新的spring集成,因为aws集成没有很好地使用它。我正在使用spring integration dsl 1.2.3,并更新了我的问题,因为它很重要。spring integration AWS将于下周发布
2.0 GA
:。是时候考虑升级到最新版本了!此外,我一直在浏览这里的源代码,在split and filter中,似乎有很多基于类类型的奇怪逻辑,如果输入是lambda表达式等,我认为这是造成这种情况的原因。很高兴了解新版本,在我工作的公司环境中,升级方面的进展有点慢,但是,我更喜欢先让它与此设置一起工作。可能是。。。不幸的是,如果有解决办法,我们不支持该项目。如果你真的可以用最新版本复制,我们会考虑修复,如果可能的话。