From 9273d2243dc91233c0f6b775313fbc15038a1538 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Tue, 27 Jul 2010 03:16:17 +0000 Subject: [PATCH] INT-1245, INT-1256 moved namespace support from old HttpInboundEndpoint to new HttpRequestHandlingMessagingGateway or, if the 'view-name' is present, HttpRequestHandlingController --- .../config/HttpInboundEndpointParser.java | 17 +++-- .../config/spring-integration-http-2.0.xsd | 70 ++++++++++++------- ...boundChannelAdapterParserTests-context.xml | 2 +- .../HttpInboundChannelAdapterParserTests.java | 24 +++---- .../HttpInboundGatewayParserTests-context.xml | 15 ++-- .../config/HttpInboundGatewayParserTests.java | 41 ++++++----- 6 files changed, 99 insertions(+), 70 deletions(-) diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpInboundEndpointParser.java b/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpInboundEndpointParser.java index 6b339f64a1..8054f54db1 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpInboundEndpointParser.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/config/HttpInboundEndpointParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2010 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. @@ -46,7 +46,9 @@ public class HttpInboundEndpointParser extends AbstractSingleBeanDefinitionParse @Override protected String getBeanClassName(Element element) { - return "org.springframework.integration.http.HttpInboundEndpoint"; + return element.hasAttribute("view-name") + ? "org.springframework.integration.http.HttpRequestHandlingController" + : "org.springframework.integration.http.HttpRequestHandlingMessagingGateway"; } @Override @@ -64,6 +66,7 @@ public class HttpInboundEndpointParser extends AbstractSingleBeanDefinitionParse @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + builder.addConstructorArgValue(this.expectReply); String inputChannelAttributeName = this.getInputChannelAttributeName(); String inputChannelRef = element.getAttribute(inputChannelAttributeName); if (!StringUtils.hasText(inputChannelRef)) { @@ -71,7 +74,6 @@ public class HttpInboundEndpointParser extends AbstractSingleBeanDefinitionParse "a '" + inputChannelAttributeName + "' reference is required", element); } builder.addPropertyReference("requestChannel", inputChannelRef); - builder.addPropertyValue("expectReply", this.expectReply); if (this.expectReply) { IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "reply-channel"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "request-timeout"); @@ -83,10 +85,11 @@ public class HttpInboundEndpointParser extends AbstractSingleBeanDefinitionParse IntegrationNamespaceUtils.setValueIfAttributeDefined( builder, element, "send-timeout", "requestTimeout"); } - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "supported-methods"); - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "view"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "request-key"); - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "request-mapper"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "supported-methods", "supportedMethodNames"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "conversion-target-type"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "view-name"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "message-converters"); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "header-mapper"); } private String getInputChannelAttributeName() { diff --git a/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd b/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd index b6b65e085a..78ee5fac5b 100644 --- a/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd +++ b/spring-integration-http/src/main/resources/org/springframework/integration/http/config/spring-integration-http-2.0.xsd @@ -34,27 +34,38 @@ + + + + Target type for payload that is the conversion result of the request. + + + - + + + + View name to be resolved when rendering a response. + + + + + + + List of HttpMessageConverters for this Channel Adapter. + + + + - + - - - - - - - - - - @@ -70,25 +81,36 @@ - + + + + View name to be resolved when rendering a response. + + + + + + + Target type for payload that is the conversion result of the request. + + + + + + + List of HttpMessageConverters for this Gateway. + + + + - + - - - - - - - - - - diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests-context.xml b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests-context.xml index b95f7cdf8d..f07aaa81aa 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests-context.xml +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests-context.xml @@ -8,7 +8,7 @@ http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd http://www.springframework.org/schema/integration/http - http://www.springframework.org/schema/integration/http/spring-integration-http.xsd"> + http://www.springframework.org/schema/integration/http/spring-integration-http.xsd"> diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests.java index 323c9e3dec..d99e9d9fdb 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundChannelAdapterParserTests.java @@ -33,11 +33,11 @@ import org.junit.runner.RunWith; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.HttpMethod; import org.springframework.integration.channel.PollableChannel; import org.springframework.integration.core.Message; -import org.springframework.integration.http.HttpInboundEndpoint; -import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.integration.http.HttpRequestHandlingMessagingGateway; +import org.springframework.integration.http.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -50,17 +50,17 @@ import org.springframework.util.MultiValueMap; @ContextConfiguration public class HttpInboundChannelAdapterParserTests { - @Autowired @Qualifier("requests") + @Autowired private PollableChannel requests; - @Autowired @Qualifier("defaultAdapter") - private HttpInboundEndpoint defaultAdapter; + @Autowired + private HttpRequestHandlingMessagingGateway defaultAdapter; - @Autowired @Qualifier("postOnlyAdapter") - private HttpInboundEndpoint postOnlyAdapter; + @Autowired + private HttpRequestHandlingMessagingGateway postOnlyAdapter; - @Autowired @Qualifier("putOrDeleteAdapter") - private HttpInboundEndpoint putOrDeleteAdapter; + @Autowired + private HttpRequestHandlingMessagingGateway putOrDeleteAdapter; @Test @@ -133,8 +133,8 @@ public class HttpInboundChannelAdapterParserTests { DirectFieldAccessor accessor = new DirectFieldAccessor(putOrDeleteAdapter); List supportedMethods = (List) accessor.getPropertyValue("supportedMethods"); assertEquals(2, supportedMethods.size()); - assertTrue(supportedMethods.contains("PUT")); - assertTrue(supportedMethods.contains("DELETE")); + assertTrue(supportedMethods.contains(HttpMethod.PUT)); + assertTrue(supportedMethods.contains(HttpMethod.DELETE)); } diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests-context.xml b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests-context.xml index ea1a57dbe5..f98dc5e77d 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests-context.xml +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests-context.xml @@ -10,12 +10,13 @@ http://www.springframework.org/schema/integration/http/spring-integration-http.xsd"> - - - - - - + + + + + + + + diff --git a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests.java b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests.java index e328361734..9824d18241 100644 --- a/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests.java +++ b/spring-integration-http/src/test/java/org/springframework/integration/http/config/HttpInboundGatewayParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2010 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. @@ -20,23 +20,24 @@ import static org.hamcrest.CoreMatchers.any; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.integration.channel.SubscribableChannel; -import org.springframework.integration.core.Message; -import org.springframework.integration.core.MessageChannel; -import org.springframework.integration.http.HttpInboundEndpoint; import static org.springframework.integration.test.util.TestUtils.getPropertyValue; import static org.springframework.integration.test.util.TestUtils.handlerExpecting; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.servlet.http.HttpServletResponse; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.integration.channel.PollableChannel; +import org.springframework.integration.channel.SubscribableChannel; +import org.springframework.integration.core.Message; +import org.springframework.integration.http.HttpRequestHandlingMessagingGateway; +import org.springframework.integration.http.MockHttpServletRequest; +import org.springframework.integration.http.MockHttpServletResponse; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + /** * @author Mark Fisher * @author Iwein Fuld @@ -46,20 +47,20 @@ import javax.servlet.http.HttpServletResponse; public class HttpInboundGatewayParserTests { @Autowired - private HttpInboundEndpoint gateway; + private HttpRequestHandlingMessagingGateway gateway; - @Qualifier("responses") @Autowired - MessageChannel responses; + private SubscribableChannel requests; - @Qualifier("requests") @Autowired - SubscribableChannel requests; - + private PollableChannel responses; + + @Test public void checkConfig() { assertNotNull(gateway); assertThat((Boolean) getPropertyValue(gateway, "expectReply"), is(true)); + assertThat((PollableChannel) getPropertyValue(gateway, "replyChannel"), is(responses)); } @Test(timeout=1000) @@ -67,10 +68,12 @@ public class HttpInboundGatewayParserTests { requests.subscribe(handlerExpecting(any(Message.class))); MockHttpServletRequest request = new MockHttpServletRequest(); request.setMethod("GET"); + request.addHeader("Accept", "application/x-java-serialized-object"); request.setParameter("foo", "bar"); MockHttpServletResponse response = new MockHttpServletResponse(); gateway.handleRequest(request, response); assertThat(response.getStatus(), is(HttpServletResponse.SC_OK)); assertThat(response.getContentType(), is("application/x-java-serialized-object")); } + }