问题
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.
回答1:
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.
来源:https://stackoverflow.com/questions/31825508/spring-integration-java-dsl-how-to-invoke-int-httpoutbound-gateway