spring-integration-dsl-groovy-http return null 当我使用 httpGet 方法时

spring-integration-dsl-groovy-http return null when i use httpGet method

我使用 spring 集成 4.1.4 和 spring 集成 dsl groovy 1.1.0

我包括 spring 集成核心,http 依赖。

当我执行 spring 集成 dsl groovy http 示例时,它在控制台中抛出空值。我不确定我错过了什么。

这是我的代码

IntegrationBuilder builder = new IntegrationBuilder("http");

def flow = builder.messageFlow {
        transform {"http://www.google.com/finance/info?q=$it"}          
        httpGet(url:{"${it}"},responseType:String)
    }

Object result = flow.sendAndReceive("vmw");

有人可以帮我吗?

什么版本的 DSL?您需要从 master 构建才能与 Spring 集成 4.1.x.

一起使用

我要警告你,groovy DSL 多年来很少受到关注;它从未真正在社区中获得任何吸引力。

Java DSL者优先;它得到积极维护和增强。

我刚刚测试了你的情况,没有发现任何问题 null value,但是还有一个错误是这样的:

Caused by: java.lang.IllegalStateException: 'uriExpression' evaluation must result in a 'String' or 'URI' instance, not: class org.codehaus.groovy.runtime.GStringImpl

所以,这确实是一个错误,请随时提出 JIRA 票,我们会尽快处理。

从另一方面来说,让我问你一个问题:当我们已经 Java DSL 时,为什么要使用这个不稳定、未维护的东西。另一方面,我们可以使用来自常规 Spring Groovy 配置支持的任何 Spring 集成命名空间,例如:

beans {
    xmlns([si: 'http://www.springframework.org/schema/integration'])

    def headers = environment.getProperty('headers')
    def parser = new JsonSlurper()
    def result = parser.parseText(headers)

    si.channel(id:'input')
    si.channel(id:'output')

    si.'header-enricher'('input-channel':'input','output-channel':'output') {
        result.each {k,v->
            si.'header'(name:k,expression:v)
        }
    }
}

这已在 master 分支上修复。同时,一个简单的解决方法是

url:{"http://www.google.com/finance/info?q=$it".toString()}

url:{"http://www.google.com/finance/info?q=$it" as String}