INT-3309 Pluggable MessageBuilder
This is still a work in process. There are a bunch of TODOs in classes that are not managed by Spring and so need to have the MessageBuilderFactory injected. But I am looking for feedback on the approach. INT-3309 Resolve TODOs Provide access to the MessageBuilderFactory in all classes. INT-3309 Polishing + Tests * Fallback to 'fromMessage()' if mutating and inbound message is not MutableMessage * Add 'alwaysMutate' boolean to MutableMessageBuilderFactory - coerces 'fromMessage' calls to 'mutateMessage' * Add tests INT-3309 Polishing; PR Comments Also add tests to parent/child contexts where the parent has the default message builder and the child has a mutable message builder. INT-3309 More Polish; PR Comments Also fix removeHeader in MMB.
This commit is contained in:
committed by
Artem Bilan
parent
4c775bce9d
commit
ff845b5069
@@ -55,7 +55,7 @@ import org.springframework.integration.http.converter.MultipartAwareFormHttpMess
|
||||
import org.springframework.integration.http.multipart.MultipartHttpInputMessage;
|
||||
import org.springframework.integration.http.support.DefaultHttpHeaderMapper;
|
||||
import org.springframework.integration.mapping.HeaderMapper;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.integration.support.AbstractIntegrationMessageBuilder;
|
||||
import org.springframework.integration.support.json.JacksonJsonUtils;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageHeaders;
|
||||
@@ -485,13 +485,13 @@ public abstract class HttpRequestHandlingEndpointSupport extends MessagingGatewa
|
||||
}
|
||||
}
|
||||
|
||||
MessageBuilder<?> messageBuilder = null;
|
||||
AbstractIntegrationMessageBuilder<?> messageBuilder = null;
|
||||
|
||||
if (payload instanceof Message<?>) {
|
||||
messageBuilder = MessageBuilder.fromMessage((Message<?>) payload).copyHeadersIfAbsent(headers);
|
||||
messageBuilder = this.getMessageBuilderFactory().fromMessage((Message<?>) payload).copyHeadersIfAbsent(headers);
|
||||
}
|
||||
else {
|
||||
messageBuilder = MessageBuilder.withPayload(payload).copyHeaders(headers);
|
||||
messageBuilder = this.getMessageBuilderFactory().withPayload(payload).copyHeaders(headers);
|
||||
}
|
||||
|
||||
Message<?> message = messageBuilder
|
||||
@@ -519,7 +519,7 @@ public abstract class HttpRequestHandlingEndpointSupport extends MessagingGatewa
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Endpoint is shutting down; returning status " + HttpStatus.SERVICE_UNAVAILABLE);
|
||||
}
|
||||
return MessageBuilder.withPayload("Endpoint is shutting down")
|
||||
return this.getMessageBuilderFactory().withPayload("Endpoint is shutting down")
|
||||
.setHeader(org.springframework.integration.http.HttpHeaders.STATUS_CODE, HttpStatus.SERVICE_UNAVAILABLE)
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ import org.springframework.integration.expression.ExpressionUtils;
|
||||
import org.springframework.integration.handler.AbstractReplyProducingMessageHandler;
|
||||
import org.springframework.integration.http.support.DefaultHttpHeaderMapper;
|
||||
import org.springframework.integration.mapping.HeaderMapper;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.integration.support.AbstractIntegrationMessageBuilder;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.MessageHandler;
|
||||
import org.springframework.messaging.MessageHandlingException;
|
||||
@@ -421,15 +421,15 @@ public class HttpRequestExecutingMessageHandler extends AbstractReplyProducingMe
|
||||
if (this.transferCookies) {
|
||||
this.doConvertSetCookie(headers);
|
||||
}
|
||||
MessageBuilder<?> replyBuilder = null;
|
||||
AbstractIntegrationMessageBuilder<?> replyBuilder = null;
|
||||
if (httpResponse.hasBody()) {
|
||||
Object responseBody = httpResponse.getBody();
|
||||
replyBuilder = (responseBody instanceof Message<?>) ?
|
||||
MessageBuilder.fromMessage((Message<?>) responseBody) : MessageBuilder.withPayload(responseBody);
|
||||
this.getMessageBuilderFactory().fromMessage((Message<?>) responseBody) : this.getMessageBuilderFactory().withPayload(responseBody);
|
||||
|
||||
}
|
||||
else {
|
||||
replyBuilder = MessageBuilder.withPayload(httpResponse);
|
||||
replyBuilder = this.getMessageBuilderFactory().withPayload(httpResponse);
|
||||
}
|
||||
replyBuilder.setHeader(org.springframework.integration.http.HttpHeaders.STATUS_CODE, httpResponse.getStatusCode());
|
||||
return replyBuilder.copyHeaders(headers).build();
|
||||
|
||||
Reference in New Issue
Block a user