简体   繁体   中英

Spring Integration Java DSL - How to invoke int-http:outbound-gateway?

I have a piece in the flow where a ReST API call is made:

<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"/>

I'm trying to replicate this using Java DSL but could not find adequate documentation. Any help would be much appreciated.

Right, Spring Integration Java DSL doesn't provide the Namespace Factory for HTTP, yet.

Anyway we can go ahead and do that using its generic components:

    @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();
    }

From other side the mentioned documentation demonstrate the sample exactly for the HttpRequestHandlingMessagingGateway ...

UPDATE

By the way: feel free to raise a JIRA ticket for adding HTTP support to the Java DSL.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM