INT-3184: Test HTTP Matrix Variables

JIRA: https://jira.springsource.org/browse/INT-3184

* Change `IntegrationRequestMappingHandlerMapping` to postpone
Handlers detection as late as possible using `ApplicationListener<ContextRefreshedEvent>`.
This is needed, because `RequestMappingInfoHandlerMapping#afterPropertiesSet()`
iterates over beans from `BeanFactory` to detect MVC Handlers. But at the same time
Integration Endpoints require `requestChannel` as dependency and those may be postponed
for `auto-creation` by `ChannelInitializer` - late-binding issue.
This commit is contained in:
Artem Bilan
2013-12-17 13:58:44 +02:00
committed by Gary Russell
parent 075e331dcf
commit 73a104c955
4 changed files with 45 additions and 9 deletions

View File

@@ -13,9 +13,17 @@
http://www.springframework.org/schema/integration/http
http://www.springframework.org/schema/integration/http/spring-integration-http.xsd">
<!-- Allow Matrix Variables -->
<beans:bean id="integrationRequestMappingHandlerMapping"
class="org.springframework.integration.http.inbound.IntegrationRequestMappingHandlerMapping">
<beans:property name="removeSemicolonContent" value="false"/>
</beans:bean>
<int-http:inbound-gateway path="/path1,/path2"
request-channel="multiplePathsChannel"/>
<int:transformer input-channel="multiplePathsChannel"
expression="T(org.springframework.integration.http.inbound.Int2312RequestMappingIntegrationTests).TEST_STRING_MULTIPLE_PATHS"/>

View File

@@ -19,6 +19,7 @@ package org.springframework.integration.http.inbound;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.util.Collections;
@@ -27,6 +28,7 @@ import java.util.Map;
import javax.servlet.http.Cookie;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -100,9 +102,7 @@ public class Int2312RequestMappingIntegrationTests extends AbstractHttpInboundTe
public void testURIVariablesAndHeaders() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("GET");
String testRequest = "aBc";
// TODO test it after upgrade to Spring 4.0
// String testRequest = "aBc;q1=1;q2=2";
String testRequest = "aBc;q1=1;q2=2";
String requestURI = "/test/" + testRequest;
request.setRequestURI(requestURI);
request.setContentType("text/plain");
@@ -129,8 +129,12 @@ public class Int2312RequestMappingIntegrationTests extends AbstractHttpInboundTe
assertNotNull(requestParams);
assertEquals(params, ((MultiValueMap<String, String>) requestParams).toSingleValueMap());
// TODO test it after upgrade to Spring 4.0
// assertEquals(matrixVariables, headers.get("matrixVariables"));
Object matrixVariables = headers.get("matrixVariables");
assertThat(matrixVariables, Matchers.instanceOf(Map.class));
Object value = ((Map) matrixVariables).get("value");
assertThat(value, Matchers.instanceOf(MultiValueMap.class));
assertEquals("1", ((MultiValueMap) value).getFirst("q1"));
assertEquals("2", ((MultiValueMap) value).getFirst("q2"));
Object requestHeaders = headers.get("requestHeaders");
assertNotNull(requestParams);
@@ -149,7 +153,7 @@ public class Int2312RequestMappingIntegrationTests extends AbstractHttpInboundTe
Object handler = this.handlerMapping.getHandler(request).getHandler();
this.handlerAdapter.handle(request, response, handler);
final String testResponse = response.getContentAsString();
assertEquals(testRequest.toLowerCase(), testResponse);
assertEquals(testRequest.split(";")[0].toLowerCase(), testResponse);
RequestContextHolder.resetRequestAttributes();
}