diff --git a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java index 6e6bcf5ab3c..ce0f5bdf6e9 100644 --- a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java +++ b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java @@ -149,6 +149,10 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat this.messageConverters.add(new ResourceHttpMessageConverter()); this.messageConverters.add(new SourceHttpMessageConverter()); this.messageConverters.add(new XmlAwareFormHttpMessageConverter()); + if (romePresent) { + this.messageConverters.add(new AtomFeedHttpMessageConverter()); + this.messageConverters.add(new RssChannelHttpMessageConverter()); + } if (jaxb2Present) { this.messageConverters.add(new Jaxb2RootElementHttpMessageConverter()); } @@ -158,10 +162,6 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat else if (jacksonPresent) { this.messageConverters.add(new MappingJacksonHttpMessageConverter()); } - if (romePresent) { - this.messageConverters.add(new AtomFeedHttpMessageConverter()); - this.messageConverters.add(new RssChannelHttpMessageConverter()); - } } /** diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java index 080565ea16a..cf0dafb584a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java @@ -302,14 +302,17 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { messageConverters.setSource(source); messageConverters.add(createConverterBeanDefinition(ByteArrayHttpMessageConverter.class, source)); - RootBeanDefinition stringConverterDef = createConverterBeanDefinition(StringHttpMessageConverter.class, - source); + RootBeanDefinition stringConverterDef = createConverterBeanDefinition(StringHttpMessageConverter.class, source); stringConverterDef.getPropertyValues().add("writeAcceptCharset", false); messageConverters.add(stringConverterDef); messageConverters.add(createConverterBeanDefinition(ResourceHttpMessageConverter.class, source)); messageConverters.add(createConverterBeanDefinition(SourceHttpMessageConverter.class, source)); messageConverters.add(createConverterBeanDefinition(XmlAwareFormHttpMessageConverter.class, source)); + if (romePresent) { + messageConverters.add(createConverterBeanDefinition(AtomFeedHttpMessageConverter.class, source)); + messageConverters.add(createConverterBeanDefinition(RssChannelHttpMessageConverter.class, source)); + } if (jaxb2Present) { messageConverters .add(createConverterBeanDefinition(Jaxb2RootElementHttpMessageConverter.class, source)); @@ -320,16 +323,13 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { else if (jacksonPresent) { messageConverters.add(createConverterBeanDefinition(MappingJacksonHttpMessageConverter.class, source)); } - if (romePresent) { - messageConverters.add(createConverterBeanDefinition(AtomFeedHttpMessageConverter.class, source)); - messageConverters.add(createConverterBeanDefinition(RssChannelHttpMessageConverter.class, source)); - } } return messageConverters; } - private RootBeanDefinition createConverterBeanDefinition(Class converterClass, - Object source) { + private RootBeanDefinition createConverterBeanDefinition( + Class converterClass, Object source) { + RootBeanDefinition beanDefinition = new RootBeanDefinition(converterClass); beanDefinition.setSource(source); beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java index be25fcdd6d8..44a75784fc7 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java @@ -138,6 +138,20 @@ import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolv */ public class WebMvcConfigurationSupport implements ApplicationContextAware, ServletContextAware { + private static final boolean jaxb2Present = + ClassUtils.isPresent("javax.xml.bind.Binder", WebMvcConfigurationSupport.class.getClassLoader()); + + private static final boolean jackson2Present = + ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", WebMvcConfigurationSupport.class.getClassLoader()) && + ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", WebMvcConfigurationSupport.class.getClassLoader()); + + private static final boolean jacksonPresent = + ClassUtils.isPresent("org.codehaus.jackson.map.ObjectMapper", WebMvcConfigurationSupport.class.getClassLoader()) && + ClassUtils.isPresent("org.codehaus.jackson.JsonGenerator", WebMvcConfigurationSupport.class.getClassLoader()); + + private static boolean romePresent = + ClassUtils.isPresent("com.sun.syndication.feed.WireFeed", WebMvcConfigurationSupport.class.getClassLoader()); + private ServletContext servletContext; private ApplicationContext applicationContext; @@ -435,21 +449,19 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv messageConverters.add(new ResourceHttpMessageConverter()); messageConverters.add(new SourceHttpMessageConverter()); messageConverters.add(new XmlAwareFormHttpMessageConverter()); - - ClassLoader classLoader = getClass().getClassLoader(); - if (ClassUtils.isPresent("javax.xml.bind.Binder", classLoader)) { + if (romePresent) { + messageConverters.add(new AtomFeedHttpMessageConverter()); + messageConverters.add(new RssChannelHttpMessageConverter()); + } + if (jaxb2Present) { messageConverters.add(new Jaxb2RootElementHttpMessageConverter()); } - if (ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader)) { + if (jackson2Present) { messageConverters.add(new MappingJackson2HttpMessageConverter()); } - else if (ClassUtils.isPresent("org.codehaus.jackson.map.ObjectMapper", classLoader)) { + else if (jacksonPresent) { messageConverters.add(new MappingJacksonHttpMessageConverter()); } - if (ClassUtils.isPresent("com.sun.syndication.feed.WireFeed", classLoader)) { - messageConverters.add(new AtomFeedHttpMessageConverter()); - messageConverters.add(new RssChannelHttpMessageConverter()); - } } /** diff --git a/src/dist/changelog.txt b/src/dist/changelog.txt index 7c9e6dd11b1..cc0bcca8c78 100644 --- a/src/dist/changelog.txt +++ b/src/dist/changelog.txt @@ -20,6 +20,7 @@ Changes in version 3.2 M2 (2012-08-xx) * DispatcherPortlet does not forward event exceptions to the render phase by default (SPR-9287) * add defaultCharset property to StringHttpMessageConverter * add @ExceptionResolver annotation to detect classes with @ExceptionHandler methods +* move RSS/Atom message converter registration ahead of jackson/jaxb2 Changes in version 3.2 M1 (2012-05-28)