- 
                Notifications
    You must be signed in to change notification settings 
- Fork 1.1k
Closed
Labels
Milestone
Description
Victor Romero opened INT-2344 and commented
When receiving a message AmqpInboundChannelAdapter will :
public void onMessage(Message message) {
	Object payload = messageConverter.fromMessage(message);
	Map<String, ?> headers = headerMapper.toHeadersFromRequest(message.getMessageProperties());
	sendMessage(MessageBuilder.withPayload(payload).copyHeaders(headers).build());
}
That headerMapper, usually DefaultAmqpHeaderMapper, will through AbstractHeaderMapper :
private Map<String, Object> toHeaders(T source, List<String> headerPatterns) {
	Map<String, Object> headers = new HashMap<String, Object>();
	Map<String, Object> standardHeaders = this.extractStandardHeaders(source);
	this.copyHeaders(this.standardHeaderPrefix, standardHeaders, headers, headerPatterns);
	Map<String, Object> userDefinedHeaders = this.extractUserDefinedHeaders(source);
	this.copyHeaders(this.userDefinedHeaderPrefix, userDefinedHeaders, headers, headerPatterns);
	return headers;
}
this.extractUserDefinedHeaders(source); extracts them correctly but this.copyHeaders(this.userDefinedHeaderPrefix, userDefinedHeaders, headers, headerPatterns); :
private <V> void copyHeaders(String prefix, Map<String, Object> source, Map<String, Object> target, List<String> headerPatterns) {
	if (!CollectionUtils.isEmpty(source)) {
		for (Map.Entry<String, Object> entry : source.entrySet()) {
			try {
				String headerName = this.addPrefixIfNecessary(prefix, entry.getKey());
				if (this.shouldMapHeader(headerName, headerPatterns)){
					target.put(headerName, entry.getValue());
	
will only copy the headers that matches the headerPatterns (amqp_appId, amqp_clusterId, amqp_contentEncoding, amqp_contentLength, amqp_contentType, amqp_correlationId, amqp_deliveryMode, amqp_deliveryTag, amqp_expiration, amqp_messageCount, amqp_messageId, amqp_receivedExchange, amqp_receivedRoutingKey, amqp_redelivered, amqp_replyTo, amqp_timestamp, amqp_type, amqp_userId)
private volatile List<String> requestHeaderNames = new ArrayList<String>();
private volatile List<String> replyHeaderNames = new ArrayList<String>();
protected AbstractHeaderMapper() {
	...
	this.requestHeaderNames.addAll(this.getStandardRequestHeaderNames());
	...
}
Affects: 2.0.5