/** * Remove headers from the provided map matching to the provided pattens * and only after that copy the result into the target message headers. * @param headersToCopy a map of headers to copy. * @param headerPatternsToFilter an arrays of header patterns to filter before copying. * @return the current {@link AbstractIntegrationMessageBuilder}. * @since 5.1 * @see #copyHeadersIfAbsent(Map) */ public AbstractIntegrationMessageBuilder<T> filterAndCopyHeadersIfAbsent(Map<String, ?> headersToCopy, String... headerPatternsToFilter) { Map<String, ?> headers = headersToCopy; if (!ObjectUtils.isEmpty(headerPatternsToFilter)) { headers = new HashMap<>(headersToCopy); headers.entrySet() .removeIf(entry -> PatternMatchUtils.simpleMatch(headerPatternsToFilter, entry.getKey())); } return copyHeadersIfAbsent(headers); }
@Override public Message<?> toMessage(Object object, @Nullable Map<String, Object> headers) throws Exception { if (object instanceof Message<?>) { return (Message<?>) object; } return object != null ? this.messageBuilderFactory.withPayload(object).copyHeadersIfAbsent(headers).build() : null; }
private Message<?> buildMessage(Map<String, Object> headers, Object messageOrPayload, EvaluationContext methodInvocationEvaluationContext) { AbstractIntegrationMessageBuilder<?> builder = (messageOrPayload instanceof Message) ? this.messageBuilderFactory.fromMessage((Message<?>) messageOrPayload) : this.messageBuilderFactory.withPayload(messageOrPayload); builder.copyHeadersIfAbsent(headers); // Explicit headers in XML override any @Header annotations... if (!CollectionUtils.isEmpty(GatewayMethodInboundMessageMapper.this.headerExpressions)) { Map<String, Object> evaluatedHeaders = evaluateHeaders(methodInvocationEvaluationContext, GatewayMethodInboundMessageMapper.this.headerExpressions); builder.copyHeaders(evaluatedHeaders); } // ...whereas global (default) headers do not... if (!CollectionUtils.isEmpty(GatewayMethodInboundMessageMapper.this.globalHeaderExpressions)) { Map<String, Object> evaluatedHeaders = evaluateHeaders(methodInvocationEvaluationContext, GatewayMethodInboundMessageMapper.this.globalHeaderExpressions); builder.copyHeadersIfAbsent(evaluatedHeaders); } if (GatewayMethodInboundMessageMapper.this.headers != null) { builder.copyHeadersIfAbsent(GatewayMethodInboundMessageMapper.this.headers); } return builder.build(); }
@Nullable @Override public Message<?> toMessage(Object object, @Nullable MessageHeaders messageHeaders) { Assert.isInstanceOf(Map.class, object, "This converter expects a Map"); @SuppressWarnings("unchecked") Map<String, ?> map = (Map<String, ?>) object; Object payload = map.get("payload"); Assert.notNull(payload, "'payload' entry cannot be null"); AbstractIntegrationMessageBuilder<?> messageBuilder = getMessageBuilderFactory().withPayload(payload); @SuppressWarnings("unchecked") Map<String, ?> headers = (Map<String, ?>) map.get("headers"); if (headers != null) { if (this.filterHeadersInToMessage) { headers.keySet().retainAll(Arrays.asList(this.headerNames)); } messageBuilder.copyHeaders(headers); } return messageBuilder .copyHeadersIfAbsent(messageHeaders) .build(); }
@Override public Message<?> toMessage(Object object, @Nullable Map<String, Object> headers) throws Exception { if (object == null) { return null; } if (object instanceof Message<?>) { return (Message<?>) object; } return getMessageBuilderFactory() .withPayload(object) .copyHeadersIfAbsent(headers) .build(); }
@Override protected Message<?> parseWithHeaders(JsonParser parser, String jsonMessage, @Nullable Map<String, Object> headersToAdd) throws Exception { String error = AbstractJsonInboundMessageMapper.MESSAGE_FORMAT_ERROR + jsonMessage; Assert.isTrue(JsonToken.START_OBJECT == parser.nextToken(), error); Map<String, Object> headers = null; Object payload = null; while (JsonToken.END_OBJECT != parser.nextToken()) { Assert.isTrue(JsonToken.FIELD_NAME == parser.getCurrentToken(), error); boolean isHeadersToken = "headers".equals(parser.getCurrentName()); boolean isPayloadToken = "payload".equals(parser.getCurrentName()); Assert.isTrue(isHeadersToken || isPayloadToken, error); if (isHeadersToken) { Assert.isTrue(parser.nextToken() == JsonToken.START_OBJECT, error); headers = readHeaders(parser, jsonMessage); } else if (isPayloadToken) { parser.nextToken(); payload = this.readPayload(parser, jsonMessage); } } Assert.notNull(headers, error); return getMessageBuilderFactory() .withPayload(payload) .copyHeaders(headers) .copyHeadersIfAbsent(headersToAdd) .build(); }
@Override public final Object processMessageGroup(MessageGroup group) { Assert.notNull(group, "MessageGroup must not be null"); Map<String, Object> headers = this.aggregateHeaders(group); Object payload = this.aggregatePayloads(group, headers); AbstractIntegrationMessageBuilder<?> builder; if (payload instanceof Message<?>) { builder = getMessageBuilderFactory().fromMessage((Message<?>) payload); } else if (payload instanceof AbstractIntegrationMessageBuilder) { builder = (AbstractIntegrationMessageBuilder<?>) payload; } else { builder = getMessageBuilderFactory().withPayload(payload); } return builder.copyHeadersIfAbsent(headers); }
.setHeader(IpHeaders.PORT, port) .setHeader(IpHeaders.PACKET_ADDRESS, packet.getSocketAddress()) .copyHeadersIfAbsent(headers) .build();
private AbstractIntegrationMessageBuilder<?> createBuilder(Object item, Map<String, Object> headers, Object correlationId, int sequenceNumber, int sequenceSize) { AbstractIntegrationMessageBuilder<?> builder; if (item instanceof Message) { builder = getMessageBuilderFactory().fromMessage((Message<?>) item); } else if (item instanceof AbstractIntegrationMessageBuilder) { builder = (AbstractIntegrationMessageBuilder<?>) item; } else { builder = getMessageBuilderFactory().withPayload(item); } builder.copyHeadersIfAbsent(headers); if (this.applySequence) { builder.pushSequenceDetails(correlationId, sequenceNumber, sequenceSize); } return builder; }
@SuppressWarnings("unchecked") @Override public Message<?> toMessage(TcpConnection connection, @Nullable Map<String, Object> headers) throws Exception { Message<Object> message = null; Object payload = connection.getPayload(); if (payload != null) { AbstractIntegrationMessageBuilder<Object> messageBuilder; if (this.bytesMessageMapper != null && payload instanceof byte[]) { messageBuilder = (AbstractIntegrationMessageBuilder<Object>) getMessageBuilderFactory() .fromMessage(this.bytesMessageMapper.toMessage((byte[]) payload)); } else { messageBuilder = getMessageBuilderFactory() .withPayload(payload); } MessageHeaders messageHeaders = new MutableMessageHeaders(null); addStandardHeaders(connection, messageHeaders); addCustomHeaders(connection, messageHeaders); message = messageBuilder .copyHeaders(messageHeaders) .copyHeadersIfAbsent(headers) .build(); } else { if (this.logger.isWarnEnabled()) { this.logger.warn("Null payload from connection " + connection.getConnectionId()); } } return message; }
protected AbstractIntegrationMessageBuilder<?> buildReply(MessageConverter converter, org.springframework.amqp.core.Message amqpReplyMessage) { Object replyObject = converter.fromMessage(amqpReplyMessage); AbstractIntegrationMessageBuilder<?> builder = (replyObject instanceof Message) ? this.getMessageBuilderFactory().fromMessage((Message<?>) replyObject) : this.getMessageBuilderFactory().withPayload(replyObject); Map<String, ?> headers = getHeaderMapper().toHeadersFromReply(amqpReplyMessage.getMessageProperties()); builder.copyHeadersIfAbsent(headers); return builder; }
getMessageBuilderFactory() .fromMessage((Message<Object>) payload) .copyHeadersIfAbsent(headers);
? getMessageBuilderFactory().fromMessage((Message<?>) object) : getMessageBuilderFactory().withPayload(object); return builder.copyHeadersIfAbsent(mappedHeaders);
.setSequenceNumber(1) .setSequenceSize(2) .copyHeadersIfAbsent(headers1) .build(); Map<String, Object> headers2 = new HashMap<>(); .setSequenceNumber(2) .setSequenceSize(2) .copyHeadersIfAbsent(headers2) .build(); messages = Arrays.asList(message1, message2);
protected Message<?> buildReturnedMessage(org.springframework.amqp.core.Message message, int replyCode, String replyText, String exchange, String routingKey, MessageConverter converter) { Object returnedObject = converter.fromMessage(message); AbstractIntegrationMessageBuilder<?> builder = (returnedObject instanceof Message) ? this.getMessageBuilderFactory().fromMessage((Message<?>) returnedObject) : this.getMessageBuilderFactory().withPayload(returnedObject); Map<String, ?> headers = getHeaderMapper().toHeadersFromReply(message.getMessageProperties()); if (this.errorMessageStrategy == null) { builder.copyHeadersIfAbsent(headers) .setHeader(AmqpHeaders.RETURN_REPLY_CODE, replyCode) .setHeader(AmqpHeaders.RETURN_REPLY_TEXT, replyText) .setHeader(AmqpHeaders.RETURN_EXCHANGE, exchange) .setHeader(AmqpHeaders.RETURN_ROUTING_KEY, routingKey); } Message<?> returnedMessage = builder.build(); if (this.errorMessageStrategy != null) { returnedMessage = this.errorMessageStrategy.buildErrorMessage(new ReturnedAmqpMessageException( returnedMessage, message, replyCode, replyText, exchange, routingKey), null); } return returnedMessage; }
@Override public Message<?> toMessage(Object object, @Nullable Map<String, Object> headers) throws Exception { if (object instanceof Message<?>) { return (Message<?>) object; } return object != null ? this.messageBuilderFactory.withPayload(object).copyHeadersIfAbsent(headers).build() : null; }
@Override public Message<?> toMessage(Object object, @Nullable Map<String, Object> headers) throws Exception { if (object == null) { return null; } if (object instanceof Message<?>) { return (Message<?>) object; } return getMessageBuilderFactory() .withPayload(object) .copyHeadersIfAbsent(headers) .build(); }
@Override public final Object processMessageGroup(MessageGroup group) { Assert.notNull(group, "MessageGroup must not be null"); Map<String, Object> headers = this.aggregateHeaders(group); Object payload = this.aggregatePayloads(group, headers); AbstractIntegrationMessageBuilder<?> builder; if (payload instanceof Message<?>) { builder = getMessageBuilderFactory().fromMessage((Message<?>) payload); } else if (payload instanceof AbstractIntegrationMessageBuilder) { builder = (AbstractIntegrationMessageBuilder<?>) payload; } else { builder = getMessageBuilderFactory().withPayload(payload); } return builder.copyHeadersIfAbsent(headers); }
protected AbstractIntegrationMessageBuilder<?> buildReply(MessageConverter converter, org.springframework.amqp.core.Message amqpReplyMessage) { Object replyObject = converter.fromMessage(amqpReplyMessage); AbstractIntegrationMessageBuilder<?> builder = (replyObject instanceof Message) ? this.getMessageBuilderFactory().fromMessage((Message<?>) replyObject) : this.getMessageBuilderFactory().withPayload(replyObject); Map<String, ?> headers = getHeaderMapper().toHeadersFromReply(amqpReplyMessage.getMessageProperties()); builder.copyHeadersIfAbsent(headers); return builder; }