From 525bc4eeadb8e495001a3ba58b436f97cc78acba Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Thu, 8 Nov 2018 20:04:35 +0100 Subject: [PATCH] Ensures that can parse amqp headers when they are a list; fixes gh-789 --- .../messaging/amqp/SpringAmqpStubMessages.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/SpringAmqpStubMessages.java b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/SpringAmqpStubMessages.java index 6d4a271abd..93c8b6c313 100644 --- a/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/SpringAmqpStubMessages.java +++ b/spring-cloud-contract-verifier/src/main/java/org/springframework/cloud/contract/verifier/messaging/amqp/SpringAmqpStubMessages.java @@ -76,7 +76,7 @@ public class SpringAmqpStubMessages implements .withBody(((String) payload).getBytes()) .andProperties( MessagePropertiesBuilder.newInstance() - .setContentType((String) headers.get("contentType")) + .setContentType(header(headers, "contentType")) .copyHeaders(headers).build()) .build(); if (headers != null && headers.containsKey(DEFAULT_CLASSID_FIELD_NAME)) { @@ -84,11 +84,25 @@ public class SpringAmqpStubMessages implements } if (headers != null && headers.containsKey(AmqpHeaders.RECEIVED_ROUTING_KEY)) { message.getMessageProperties() - .setReceivedRoutingKey((String) headers.get(AmqpHeaders.RECEIVED_ROUTING_KEY)); + .setReceivedRoutingKey(header(headers, AmqpHeaders.RECEIVED_ROUTING_KEY)); } send(message, destination); } + private String header(Map headers, String headerName) { + if (headers == null) { + return ""; + } + Object value = headers.get(headerName); + if (value instanceof String) { + return (String) value; + } else if (value instanceof Iterable) { + Iterable values = ((Iterable) value); + return values.iterator().hasNext() ? (String) values.iterator().next() : ""; + } + return value.toString(); + } + @Override public void send(Message message, String destination) { final String routingKey = message.getMessageProperties().getReceivedRoutingKey();