INT-2412-maint backport

added validation for 'priority' header, added tests
This commit is contained in:
Oleg Zhurakousky
2012-02-01 09:41:33 -05:00
committed by Mark Fisher
parent 1d405ac46b
commit dad420c6ac
7 changed files with 64 additions and 33 deletions

View File

@@ -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.)");
}
}
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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);
}
}

View File

@@ -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() {