From 1706a733f4605ad43f3e4e7629f377c417a20d76 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 7 Jun 2010 22:59:48 +0000 Subject: [PATCH] added XmlAwareFormHttpMessageConverter, taking over the 3.0.2-introduced XML multipart support (avoiding a package cycle) git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3396 50f2f4bb-b051-0410-bef5-90022cba6387 --- .../AnnotationDrivenBeanDefinitionParser.java | 4 +-- .../AnnotationMethodHandlerAdapter.java | 4 +-- ...otationMethodHandlerExceptionResolver.java | 4 +-- .../converter/FormHttpMessageConverter.java | 14 +++++--- .../xml/XmlAwareFormHttpMessageConverter.java | 35 +++++++++++++++++++ .../web/client/RestTemplate.java | 4 +-- 6 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 org.springframework.web/src/main/java/org/springframework/http/converter/xml/XmlAwareFormHttpMessageConverter.java diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java index f344d96138a..77f32922fbb 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java @@ -29,7 +29,6 @@ import org.springframework.beans.factory.xml.ParserContext; import org.springframework.core.convert.ConversionService; import org.springframework.format.support.FormattingConversionServiceFactoryBean; import org.springframework.http.converter.ByteArrayHttpMessageConverter; -import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.feed.AtomFeedHttpMessageConverter; @@ -37,6 +36,7 @@ import org.springframework.http.converter.feed.RssChannelHttpMessageConverter; import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter; import org.springframework.http.converter.xml.SourceHttpMessageConverter; +import org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter; import org.springframework.util.ClassUtils; import org.springframework.validation.Validator; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @@ -173,8 +173,8 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { messageConverters.add(new RootBeanDefinition(ByteArrayHttpMessageConverter.class)); messageConverters.add(new RootBeanDefinition(StringHttpMessageConverter.class)); messageConverters.add(new RootBeanDefinition(ResourceHttpMessageConverter.class)); - messageConverters.add(new RootBeanDefinition(FormHttpMessageConverter.class)); messageConverters.add(new RootBeanDefinition(SourceHttpMessageConverter.class)); + messageConverters.add(new RootBeanDefinition(XmlAwareFormHttpMessageConverter.class)); if (jaxb2Present) { messageConverters.add(new RootBeanDefinition(Jaxb2RootElementHttpMessageConverter.class)); } diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java index 54ec61078a9..d1c556d0e5e 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java @@ -63,10 +63,10 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.ByteArrayHttpMessageConverter; -import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.xml.SourceHttpMessageConverter; +import org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; @@ -175,7 +175,7 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator private HttpMessageConverter[] messageConverters = new HttpMessageConverter[]{new ByteArrayHttpMessageConverter(), new StringHttpMessageConverter(), - new FormHttpMessageConverter(), new SourceHttpMessageConverter()}; + new SourceHttpMessageConverter(), new XmlAwareFormHttpMessageConverter()}; private int order = Ordered.LOWEST_PRECEDENCE; diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.java index 0065ed4a6c6..e59ab38f6b5 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.java @@ -47,10 +47,10 @@ import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.HttpStatus; import org.springframework.http.converter.ByteArrayHttpMessageConverter; -import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.xml.SourceHttpMessageConverter; +import org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpResponse; import org.springframework.ui.Model; @@ -86,7 +86,7 @@ public class AnnotationMethodHandlerExceptionResolver extends AbstractHandlerExc private HttpMessageConverter[] messageConverters = new HttpMessageConverter[] {new ByteArrayHttpMessageConverter(), new StringHttpMessageConverter(), - new FormHttpMessageConverter(), new SourceHttpMessageConverter()}; + new SourceHttpMessageConverter(), new XmlAwareFormHttpMessageConverter()}; /** diff --git a/org.springframework.web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java b/org.springframework.web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java index 35a4717b54a..7bcb4f2a75a 100644 --- a/org.springframework.web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java +++ b/org.springframework.web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java @@ -38,7 +38,6 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; -import org.springframework.http.converter.xml.SourceHttpMessageConverter; import org.springframework.util.Assert; import org.springframework.util.FileCopyUtils; import org.springframework.util.LinkedMultiValueMap; @@ -104,15 +103,22 @@ public class FormHttpMessageConverter implements HttpMessageConverter partConverter) { + Assert.notNull(partConverter, "'partConverter' must not be NULL"); + this.partConverters.add(partConverter); + } + /** * Set the message body converters to use. These converters are used to convert objects to MIME parts. */ - public void setPartConverters(List> partConverters) { - Assert.notEmpty(partConverters, "'messageConverters' must not be empty"); + public final void setPartConverters(List> partConverters) { + Assert.notEmpty(partConverters, "'partConverters' must not be empty"); this.partConverters = partConverters; } diff --git a/org.springframework.web/src/main/java/org/springframework/http/converter/xml/XmlAwareFormHttpMessageConverter.java b/org.springframework.web/src/main/java/org/springframework/http/converter/xml/XmlAwareFormHttpMessageConverter.java new file mode 100644 index 00000000000..0db64e2b879 --- /dev/null +++ b/org.springframework.web/src/main/java/org/springframework/http/converter/xml/XmlAwareFormHttpMessageConverter.java @@ -0,0 +1,35 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.http.converter.xml; + +import org.springframework.http.converter.FormHttpMessageConverter; + +/** + * Extension of {@link org.springframework.http.converter.FormHttpMessageConverter}, + * adding support for XML-based parts through a {@link SourceHttpMessageConverter}. + * + * @author Juergen Hoeller + * @since 3.0.3 + */ +public class XmlAwareFormHttpMessageConverter extends FormHttpMessageConverter { + + public XmlAwareFormHttpMessageConverter() { + super(); + addPartConverter(new SourceHttpMessageConverter()); + } + +} diff --git a/org.springframework.web/src/main/java/org/springframework/web/client/RestTemplate.java b/org.springframework.web/src/main/java/org/springframework/web/client/RestTemplate.java index d6490067901..b8cd0886875 100644 --- a/org.springframework.web/src/main/java/org/springframework/web/client/RestTemplate.java +++ b/org.springframework.web/src/main/java/org/springframework/web/client/RestTemplate.java @@ -35,7 +35,6 @@ import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.support.HttpAccessor; import org.springframework.http.converter.ByteArrayHttpMessageConverter; -import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; @@ -44,6 +43,7 @@ import org.springframework.http.converter.feed.RssChannelHttpMessageConverter; import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter; import org.springframework.http.converter.xml.SourceHttpMessageConverter; +import org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.web.util.UriTemplate; @@ -138,8 +138,8 @@ public class RestTemplate extends HttpAccessor implements RestOperations { this.messageConverters.add(new ByteArrayHttpMessageConverter()); this.messageConverters.add(new StringHttpMessageConverter()); this.messageConverters.add(new ResourceHttpMessageConverter()); - this.messageConverters.add(new FormHttpMessageConverter()); this.messageConverters.add(new SourceHttpMessageConverter()); + this.messageConverters.add(new XmlAwareFormHttpMessageConverter()); if (jaxb2Present) { this.messageConverters.add(new Jaxb2RootElementHttpMessageConverter()); }