INT-2412-maint backport
added validation for 'priority' header, added tests
This commit is contained in:
committed by
Mark Fisher
parent
1d405ac46b
commit
dad420c6ac
@@ -324,6 +324,10 @@ public final class MessageBuilder<T> {
|
||||
Assert.isTrue(Integer.class.isAssignableFrom(headerValue.getClass()), "The '" + headerName
|
||||
+ "' header value must be an Integer.");
|
||||
}
|
||||
else if (MessageHeaders.PRIORITY.equals(headerName)) {
|
||||
Assert.isTrue(Integer.class.isAssignableFrom(headerValue.getClass()), "The '" + headerName
|
||||
+ "' header value must be an Integer.)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1422,14 +1422,16 @@ endpoint itself is a Polling Consumer for a channel with a queue.
|
||||
<xsd:element name="priority">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Shortcut to specify value for 'priority' header when using PriotityChannel
|
||||
Shortcut to specify value for 'priority' header when using PriorityChannel
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="value">
|
||||
<xsd:simpleType>
|
||||
<xsd:union memberTypes="priorityEnumeration xsd:string" />
|
||||
</xsd:simpleType>
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
Integer value identifying the value of the 'priority' header.
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="overwrite">
|
||||
<xsd:annotation>
|
||||
@@ -1524,16 +1526,6 @@ endpoint itself is a Polling Consumer for a channel with a queue.
|
||||
</xsd:attribute>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:simpleType name="priorityEnumeration">
|
||||
<xsd:restriction base="xsd:token">
|
||||
<xsd:enumeration value="HIGHEST" />
|
||||
<xsd:enumeration value="HIGH" />
|
||||
<xsd:enumeration value="NORMAL" />
|
||||
<xsd:enumeration value="LOW" />
|
||||
<xsd:enumeration value="LOWEST" />
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
|
||||
<xsd:complexType name="userDefinedHeaderType">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
|
||||
@@ -22,5 +22,13 @@
|
||||
<header-enricher id="headerEnricherWithShouldSkipNullsFalse" input-channel="input" should-skip-nulls="false">
|
||||
<header name="foo" value="bar"/>
|
||||
</header-enricher>
|
||||
|
||||
<header-enricher id="headerEnricherWithPriorityAsString" input-channel="input" >
|
||||
<header name="priority" value="1"/>
|
||||
</header-enricher>
|
||||
|
||||
<header-enricher id="headerEnricherWithPriorityAsStringAndType" input-channel="input" >
|
||||
<header name="priority" value="1" type="java.lang.Integer"/>
|
||||
</header-enricher>
|
||||
|
||||
</beans:beans>
|
||||
|
||||
@@ -16,17 +16,25 @@
|
||||
|
||||
package org.springframework.integration.config.xml;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.channel.QueueChannel;
|
||||
import org.springframework.integration.core.MessageHandler;
|
||||
import org.springframework.integration.message.GenericMessage;
|
||||
import org.springframework.integration.support.MessageBuilder;
|
||||
import org.springframework.integration.test.util.TestUtils;
|
||||
import org.springframework.integration.transformer.MessageTransformationException;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* @author Mark Fisher
|
||||
* @since 2.0
|
||||
@@ -73,5 +81,26 @@ public class HeaderEnricherParserTests {
|
||||
Boolean shouldSkipNulls = TestUtils.getPropertyValue(endpoint, "handler.transformer.shouldSkipNulls", Boolean.class);
|
||||
assertEquals(Boolean.TRUE, shouldSkipNulls);
|
||||
}
|
||||
|
||||
|
||||
@Test(expected=MessageTransformationException.class)
|
||||
public void testStringPriorityHeader() {
|
||||
MessageHandler messageHandler =
|
||||
TestUtils.getPropertyValue(context.getBean("headerEnricherWithPriorityAsString"), "handler", MessageHandler.class);
|
||||
Message<?> message = new GenericMessage<String>("hello");
|
||||
messageHandler.handleMessage(message);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStringPriorityHeaderWithType() {
|
||||
MessageHandler messageHandler =
|
||||
TestUtils.getPropertyValue(context.getBean("headerEnricherWithPriorityAsStringAndType"), "handler", MessageHandler.class);
|
||||
QueueChannel replyChannel = new QueueChannel();
|
||||
Message<?> message = MessageBuilder.withPayload("foo").setReplyChannel(replyChannel).build();
|
||||
messageHandler.handleMessage(message);
|
||||
Message<?> transformed = replyChannel.receive(1000);
|
||||
assertNotNull(transformed);
|
||||
Object priority = transformed.getHeaders().get("priority");
|
||||
assertNotNull(priority);
|
||||
assertTrue(priority instanceof Integer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,11 @@ public class MessageBuilderTests {
|
||||
Message<String> message = MessageBuilder.withPayload("foo").build();
|
||||
assertEquals("foo", message.getPayload());
|
||||
}
|
||||
|
||||
@Test(expected= IllegalArgumentException.class) // priority must be an Integer
|
||||
public void testPriorityHeader(){
|
||||
MessageBuilder.withPayload("ha").setHeader("priority", "10").build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHeaderValues() {
|
||||
|
||||
Reference in New Issue
Block a user