【问题标题】:Spring Integration Java DSL - How to invoke int-http:outbound-gateway?Spring Integration Java DSL - 如何调用 int-http:outbound-gateway?
【发布时间】:2015-10-27 19:34:59
【问题描述】:

我在流程中有一段进行了 ReST API 调用:

<int:channel id="requestChannel"/>

<int-http:outbound-gateway request-channel="requestChannel"
                           reply-channel="logger"
                           url="${api.base.uri}/data"
                           http-method="PUT"
                           expected-response-type="java.lang.String"/>

<int:logging-channel-adapter id="logger"
                             logger-name="logger"
                             expression="payload"
                             level="INFO"/>

我正在尝试使用 Java DSL 复制此内容,但找不到足够的文档。任何帮助将不胜感激。

【问题讨论】:

标签: java spring http spring-integration dsl


【解决方案1】:

没错,Spring Integration Java DSL 还没有为 HTTP 提供命名空间工厂。

无论如何,我们可以继续使用它的通用组件来做到这一点:

    @Bean
    public MessageHandler logger() {
        LoggingHandler loggingHandler = new LoggingHandler("INFO");
        loggingHandler.setLoggerName("logger");
        // This is redundant because the default expression is exactly "payload"
        // loggingHandler.setExpression("payload");
        return loggingHandler;
    }

    @Bean
    public MessageHandler httpGateway(@Value("${api.base.uri}/data") URI uri) {
        HttpRequestExecutingMessageHandler httpHandler = new HttpRequestExecutingMessageHandler(uri);
        httpHandler.setExpectedResponseType(String.class);
        httpHandler.setHttpMethod(HttpMethod.PUT);
        return httpHandler;
    }

    @Bean
    public IntegrationFlow httpFlow(MessageHandler httpGateway) {
        return IntegrationFlows.from("requestChannel")
                .handle(httpGateway)
                .handle(logger())
                .get();
    }

从另一方面来看,所提到的文档完全演示了HttpRequestHandlingMessagingGateway...的示例...

更新

顺便说一句:请随时提出JIRA 票,以向 Java DSL 添加 HTTP 支持。

【讨论】:

  • 感谢您,完美运行。我会提出 JIRA 票 :) 在发布问题之前,我确实尝试使用 HttpRequestExecutingMessageHandler (参考 HttpRequestHandlingMessagingGateway 的记录用法).. 但是,我无法清楚地了解如何使用它。是否有关于集成组件/通道的各种命名空间解析/基于 java 的实现的良好文档?这样我就可以将它们与 DSL 一起使用(以防 DSL 不支持它们)。
  • 是的......这有点棘手:1)每个模块都有自己的AbstractIntegrationNamespaceHandler,例如HttpNamespaceHandler。 2) 每个命名空间组件(xml 标签)都有自己的解析器,例如HttpOutboundGatewayParser。 3) 每个解析器为应用程序上下文生成一个或多个 bean,例如HttpRequestExecutingMessageHandler。我认为我们将在下一个版本中做一些“艰苦”的工作,在 XSD 中提到目标类是特定的 XML 标记。
  • 再次感谢,这是非常有用的信息。是的,如果这些信息可以包含在 XSD 中,那就太好了。
  • 我看到票已经解决了。有没有地方可以看到如何在 Java DSL 中使用新的HTTP support?我找不到单元/集成测试或任何文档。
  • 这对你有用吗:github.com/spring-projects/spring-integration-java-dsl/blob/… ?顺便说一句,请随时在单独的 SO 线程中提出任何其他问题!
猜你喜欢
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多