From 7b264e83f4bdf60a7c79431be722ca010f7ab489 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Thu, 3 Jul 2014 16:23:26 +0300 Subject: [PATCH] INT-3461: Add `rometools` Dependency for SF 4.1 JIRA: https://jira.spring.io/browse/INT-3461 To test it: `gradlew :spring-integration-http:testAll -PspringVersion=4.1.0.BUILD-SNAPSHOT` INT-3461: Add CP condition for `rometools` into the `HttpRequestHandlingEndpointSupport` INT-3461: Add CLASSPATH check for `RequestEntity` to determine the SF 4.1 --- build.gradle | 3 +++ .../HttpRequestHandlingEndpointSupport.java | 14 +++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 164f2a50b3..7920ba6b25 100644 --- a/build.gradle +++ b/build.gradle @@ -102,6 +102,7 @@ subprojects { subproject -> pahoMqttClientVersion = '0.4.0' postgresVersion = '9.1-901-1.jdbc4' reactorVersion = '1.1.2.RELEASE' + romeToolsVersion = '1.5.0' romeVersion = '1.0.0' saajApiVersion = '1.3.5' saajImplVersion = '1.3.23' @@ -340,6 +341,8 @@ project('spring-integration-http') { exclude group: 'junit', module: 'junit' } + compile("com.rometools:rome:$romeToolsVersion", optional) //For spring-web-4.1 + compile("javax.servlet:javax.servlet-api:$servletApiVersion", provided) testCompile "commons-httpclient:commons-httpclient:$httpClientVersion" diff --git a/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/HttpRequestHandlingEndpointSupport.java b/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/HttpRequestHandlingEndpointSupport.java index a9afcf049f..86971a85cf 100644 --- a/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/HttpRequestHandlingEndpointSupport.java +++ b/spring-integration-http/src/main/java/org/springframework/integration/http/inbound/HttpRequestHandlingEndpointSupport.java @@ -110,11 +110,17 @@ import org.springframework.web.servlet.HandlerMapping; public abstract class HttpRequestHandlingEndpointSupport extends MessagingGatewaySupport implements OrderlyShutdownCapable { + private static final boolean spring41Present = ClassUtils.isPresent("org.springframework.http.RequestEntity", + HttpRequestHandlingEndpointSupport.class.getClassLoader()); + private static final boolean jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", HttpRequestHandlingEndpointSupport.class.getClassLoader()); - private static boolean romePresent = ClassUtils.isPresent("com.sun.syndication.feed.WireFeed", - HttpRequestHandlingEndpointSupport.class.getClassLoader()); + private static boolean romePresent = ClassUtils.isPresent("com.sun.syndication.feed.atom.Feed", + HttpRequestHandlingEndpointSupport.class.getClassLoader()); + + private static boolean romeToolsPresent = ClassUtils.isPresent("com.rometools.rome.feed.atom.Feed", + HttpRequestHandlingEndpointSupport.class.getClassLoader()); private static final List nonReadableBodyHttpMethods = Arrays.asList(HttpMethod.GET, HttpMethod.HEAD, HttpMethod.OPTIONS); @@ -173,7 +179,9 @@ public abstract class HttpRequestHandlingEndpointSupport extends MessagingGatewa logger.debug("'MappingJackson2HttpMessageConverter' was added to the 'defaultMessageConverters'."); } } - if (romePresent) { + //The 'rometools' has been introduced since Spring Framework 4.1, hence we should check the version + // of Spring Framework using the class 'org.springframework.http.RequestEntity' from that version. + if ((spring41Present && romeToolsPresent) || romePresent) { this.defaultMessageConverters.add(new AtomFeedHttpMessageConverter()); this.defaultMessageConverters.add(new RssChannelHttpMessageConverter()); if (logger.isDebugEnabled()) {