@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2013 the original author or authors .
* Copyright 2002 - 2014 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -30,6 +30,7 @@ import org.springframework.messaging.Message;
@@ -30,6 +30,7 @@ import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHandlingException ;
import org.springframework.messaging.handler.annotation.Header ;
import org.springframework.messaging.support.MessageBuilder ;
import org.springframework.messaging.support.NativeMessageHeaderAccessor ;
import static org.junit.Assert.* ;
@ -47,6 +48,7 @@ public class HeaderMethodArgumentResolverTests {
@@ -47,6 +48,7 @@ public class HeaderMethodArgumentResolverTests {
private MethodParameter paramNamedDefaultValueStringHeader ;
private MethodParameter paramSystemProperty ;
private MethodParameter paramNotAnnotated ;
private MethodParameter paramNativeHeader ;
@Before
@ -57,11 +59,12 @@ public class HeaderMethodArgumentResolverTests {
@@ -57,11 +59,12 @@ public class HeaderMethodArgumentResolverTests {
this . resolver = new HeaderMethodArgumentResolver ( new DefaultConversionService ( ) , cxt . getBeanFactory ( ) ) ;
Method method = getClass ( ) . getDeclaredMethod ( "handleMessage" ,
String . class , String . class , String . class , String . class ) ;
String . class , String . class , String . class , String . class , String . class ) ;
this . paramRequired = new MethodParameter ( method , 0 ) ;
this . paramNamedDefaultValueStringHeader = new MethodParameter ( method , 1 ) ;
this . paramSystemProperty = new MethodParameter ( method , 2 ) ;
this . paramNotAnnotated = new MethodParameter ( method , 3 ) ;
this . paramNativeHeader = new MethodParameter ( method , 4 ) ;
this . paramRequired . initParameterNameDiscovery ( new DefaultParameterNameDiscoverer ( ) ) ;
GenericTypeResolver . resolveParameterType ( this . paramRequired , HeaderMethodArgumentResolver . class ) ;
@ -76,7 +79,33 @@ public class HeaderMethodArgumentResolverTests {
@@ -76,7 +79,33 @@ public class HeaderMethodArgumentResolverTests {
@Test
public void resolveArgument ( ) throws Exception {
Message < byte [ ] > message = MessageBuilder . withPayload ( new byte [ 0 ] ) . setHeader ( "param1" , "foo" ) . build ( ) ;
this . resolver . resolveArgument ( this . paramRequired , message ) ;
Object result = this . resolver . resolveArgument ( this . paramRequired , message ) ;
assertEquals ( "foo" , result ) ;
}
// SPR-11326
@Test
public void resolveArgumentNativeHeader ( ) throws Exception {
TestMessageHeaderAccessor headers = new TestMessageHeaderAccessor ( ) ;
headers . setNativeHeader ( "param1" , "foo" ) ;
Message < byte [ ] > message = MessageBuilder . withPayload ( new byte [ 0 ] ) . setHeaders ( headers ) . build ( ) ;
assertEquals ( "foo" , this . resolver . resolveArgument ( this . paramRequired , message ) ) ;
}
@Test
public void resolveArgumentNativeHeaderAmbiguity ( ) throws Exception {
TestMessageHeaderAccessor headers = new TestMessageHeaderAccessor ( ) ;
headers . setHeader ( "param1" , "foo" ) ;
headers . setNativeHeader ( "param1" , "native-foo" ) ;
Message < byte [ ] > message = MessageBuilder . withPayload ( new byte [ 0 ] ) . setHeaders ( headers ) . build ( ) ;
assertEquals ( "foo" , this . resolver . resolveArgument ( this . paramRequired , message ) ) ;
assertEquals ( "native-foo" , this . resolver . resolveArgument ( this . paramNativeHeader , message ) ) ;
}
@Test ( expected = MessageHandlingException . class )
@ -112,7 +141,16 @@ public class HeaderMethodArgumentResolverTests {
@@ -112,7 +141,16 @@ public class HeaderMethodArgumentResolverTests {
@Header String param1 ,
@Header ( value = "name" , defaultValue = "bar" ) String param2 ,
@Header ( value = "name" , defaultValue = "#{systemProperties.systemProperty}" ) String param3 ,
String param4 ) {
String param4 ,
@Header ( "nativeHeaders.param1" ) String nativeHeaderParam1 ) {
}
public static class TestMessageHeaderAccessor extends NativeMessageHeaderAccessor {
protected TestMessageHeaderAccessor ( ) {
super ( ( Message < ? > ) null ) ;
}
}
}