diff --git a/spring-core/src/main/java/org/springframework/core/Conventions.java b/spring-core/src/main/java/org/springframework/core/Conventions.java index 4eb1422fe40629077e9f0ecef50fbd3f13a8183b..2f84c97631eeea03eff9d556e09230cf2d6b3bad 100644 --- a/spring-core/src/main/java/org/springframework/core/Conventions.java +++ b/spring-core/src/main/java/org/springframework/core/Conventions.java @@ -281,7 +281,7 @@ public abstract class Conventions { /** * Retrieves the {@code Class} of an element in the {@code Collection}. - * The exact element for which the {@code Class} is retreived will depend + * The exact element for which the {@code Class} is retrieved will depend * on the concrete {@code Collection} implementation. */ private static E peekAhead(Collection collection) { diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java index 7537c1c3e0a83623b0e7371258203a79de8b8e74..1cd142fd6180fa77b9b1e4606f78c75f17210bc5 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2016 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. @@ -36,10 +36,12 @@ final class CollectionToStringConverter implements ConditionalGenericConverter { private final ConversionService conversionService; + public CollectionToStringConverter(ConversionService conversionService) { this.conversionService = conversionService; } + @Override public Set getConvertibleTypes() { return Collections.singleton(new ConvertiblePair(Collection.class, String.class)); @@ -47,7 +49,8 @@ final class CollectionToStringConverter implements ConditionalGenericConverter { @Override public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { - return ConversionUtils.canConvertElements(sourceType.getElementTypeDescriptor(), targetType, this.conversionService); + return ConversionUtils.canConvertElements( + sourceType.getElementTypeDescriptor(), targetType, this.conversionService); } @Override @@ -56,7 +59,7 @@ final class CollectionToStringConverter implements ConditionalGenericConverter { return null; } Collection sourceCollection = (Collection) source; - if (sourceCollection.size() == 0) { + if (sourceCollection.isEmpty()) { return ""; } StringBuilder sb = new StringBuilder(); @@ -65,7 +68,8 @@ final class CollectionToStringConverter implements ConditionalGenericConverter { if (i > 0) { sb.append(DELIMITER); } - Object targetElement = this.conversionService.convert(sourceElement, sourceType.elementTypeDescriptor(sourceElement), targetType); + Object targetElement = this.conversionService.convert( + sourceElement, sourceType.elementTypeDescriptor(sourceElement), targetType); sb.append(targetElement); i++; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java index 6bf88279dd70337b01b82bfc4184300c6de1a0f5..08637797e3925b1e2da2815dc7ae820d035bee65 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java @@ -145,14 +145,14 @@ public class GenericConversionService implements ConfigurableConversionService { @Override public boolean canConvert(Class sourceType, Class targetType) { - Assert.notNull(targetType, "targetType to convert to cannot be null"); + Assert.notNull(targetType, "Target type to convert to cannot be null"); return canConvert((sourceType != null ? TypeDescriptor.valueOf(sourceType) : null), TypeDescriptor.valueOf(targetType)); } @Override public boolean canConvert(TypeDescriptor sourceType, TypeDescriptor targetType) { - Assert.notNull(targetType, "targetType to convert to cannot be null"); + Assert.notNull(targetType, "Target type to convert to cannot be null"); if (sourceType == null) { return true; } @@ -161,9 +161,9 @@ public class GenericConversionService implements ConfigurableConversionService { } /** - * Return whether conversion between the sourceType and targetType can be bypassed. + * Return whether conversion between the source type and the target type can be bypassed. *

More precisely, this method will return true if objects of sourceType can be - * converted to the targetType by returning the source object unchanged. + * converted to the target type by returning the source object unchanged. * @param sourceType context about the source type to convert from * (may be {@code null} if source is {@code null}) * @param targetType context about the target type to convert to (required) @@ -172,7 +172,7 @@ public class GenericConversionService implements ConfigurableConversionService { * @since 3.2 */ public boolean canBypassConvert(TypeDescriptor sourceType, TypeDescriptor targetType) { - Assert.notNull(targetType, "targetType to convert to cannot be null"); + Assert.notNull(targetType, "Target type to convert to cannot be null"); if (sourceType == null) { return true; } @@ -183,20 +183,20 @@ public class GenericConversionService implements ConfigurableConversionService { @Override @SuppressWarnings("unchecked") public T convert(Object source, Class targetType) { - Assert.notNull(targetType, "targetType to convert to cannot be null"); + Assert.notNull(targetType, "Target type to convert to cannot be null"); return (T) convert(source, TypeDescriptor.forObject(source), TypeDescriptor.valueOf(targetType)); } @Override public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { - Assert.notNull(targetType, "targetType to convert to cannot be null"); + Assert.notNull(targetType, "Target type to convert to cannot be null"); if (sourceType == null) { - Assert.isTrue(source == null, "source must be [null] if sourceType == [null]"); + Assert.isTrue(source == null, "Source must be [null] if source type == [null]"); return handleResult(null, targetType, convertNullSource(null, targetType)); } if (source != null && !sourceType.getObjectType().isInstance(source)) { - throw new IllegalArgumentException("source to convert from must be an instance of " + - sourceType + "; instead it was a " + source.getClass().getName()); + throw new IllegalArgumentException("Source to convert from must be an instance of [" + + sourceType + "]; instead it was a [" + source.getClass().getName() + "]"); } GenericConverter converter = getConverter(sourceType, targetType); if (converter != null) { @@ -208,9 +208,9 @@ public class GenericConversionService implements ConfigurableConversionService { /** * Convenience operation for converting a source object to the specified targetType, - * where the targetType is a descriptor that provides additional conversion context. + * where the target type is a descriptor that provides additional conversion context. * Simply delegates to {@link #convert(Object, TypeDescriptor, TypeDescriptor)} and - * encapsulates the construction of the sourceType descriptor using + * encapsulates the construction of the source type descriptor using * {@link TypeDescriptor#forObject(Object)}. * @param source the source object * @param targetType the target type @@ -237,8 +237,8 @@ public class GenericConversionService implements ConfigurableConversionService { * {@link java.util.Optional#empty()} instance if the target type is * {@code java.util.Optional}. Subclasses may override this to return * custom {@code null} objects for specific target types. - * @param sourceType the sourceType to convert from - * @param targetType the targetType to convert to + * @param sourceType the source type to convert from + * @param targetType the target type to convert to * @return the converted null object */ protected Object convertNullSource(TypeDescriptor sourceType, TypeDescriptor targetType) { @@ -282,7 +282,7 @@ public class GenericConversionService implements ConfigurableConversionService { /** * Return the default converter if no converter is found for the given sourceType/targetType pair. - *

Returns a NO_OP Converter if the sourceType is assignable to the targetType. + *

Returns a NO_OP Converter if the source type is assignable to the target type. * Returns {@code null} otherwise, indicating no suitable converter could be found. * @param sourceType the source type to convert from * @param targetType the target type to convert to diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToOptionalConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToOptionalConverter.java index 8c7012011090f078ab182f0e67f2535c0535aa4d..6137012b935099bb782ca902721e3487e8f6d31d 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToOptionalConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToOptionalConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -68,13 +68,13 @@ final class ObjectToOptionalConverter implements ConditionalGenericConverter { else if (source instanceof Optional) { return source; } - else if (targetType.getResolvableType() == null) { - return Optional.of(source); - } - else { + else if (targetType.getResolvableType() != null) { Object target = this.conversionService.convert(source, sourceType, new GenericTypeDescriptor(targetType)); return Optional.ofNullable(target); } + else { + return Optional.of(source); + } } diff --git a/spring-core/src/test/java/org/springframework/util/xml/AbstractStaxHandlerTestCase.java b/spring-core/src/test/java/org/springframework/util/xml/AbstractStaxHandlerTestCase.java index e23c92cc0e22937009d553b7cc20abde350aa21c..adabedc346ac3536331e248cd6bd2aae56e7e532 100644 --- a/spring-core/src/test/java/org/springframework/util/xml/AbstractStaxHandlerTestCase.java +++ b/spring-core/src/test/java/org/springframework/util/xml/AbstractStaxHandlerTestCase.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -19,7 +19,6 @@ package org.springframework.util.xml; import java.io.StringReader; import java.io.StringWriter; import java.net.Socket; - import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.stream.XMLStreamException; @@ -30,7 +29,6 @@ import javax.xml.transform.stream.StreamResult; import org.junit.Assume; import org.junit.Before; import org.junit.Test; - import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; @@ -58,11 +56,13 @@ public abstract class AbstractStaxHandlerTestCase { private XMLReader xmlReader; + @Before public void createXMLReader() throws Exception { xmlReader = XMLReaderFactory.createXMLReader(); } + @Test public void noNamespacePrefixes() throws Exception { Assume.assumeTrue(wwwSpringframeworkOrgIsAccessible()); @@ -109,8 +109,7 @@ public abstract class AbstractStaxHandlerTestCase { @Test public void noNamespacePrefixesDom() throws Exception { - DocumentBuilderFactory documentBuilderFactory = - DocumentBuilderFactory.newInstance(); + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setNamespaceAware(true); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); @@ -131,8 +130,7 @@ public abstract class AbstractStaxHandlerTestCase { @Test public void namespacePrefixesDom() throws Exception { - DocumentBuilderFactory documentBuilderFactory = - DocumentBuilderFactory.newInstance(); + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setNamespaceAware(true); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); diff --git a/spring-core/src/test/java/org/springframework/util/xml/StaxEventHandlerTests.java b/spring-core/src/test/java/org/springframework/util/xml/StaxEventHandlerTests.java index d2c44d66b683db743891d4af8209403c262604dc..2ad1ae9a43db4ac67339fea66293441a5ea566b2 100644 --- a/spring-core/src/test/java/org/springframework/util/xml/StaxEventHandlerTests.java +++ b/spring-core/src/test/java/org/springframework/util/xml/StaxEventHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 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. @@ -27,8 +27,7 @@ import javax.xml.transform.Result; public class StaxEventHandlerTests extends AbstractStaxHandlerTestCase { @Override - protected AbstractStaxHandler createStaxHandler(Result result) - throws XMLStreamException { + protected AbstractStaxHandler createStaxHandler(Result result) throws XMLStreamException { XMLOutputFactory outputFactory = XMLOutputFactory.newFactory(); XMLEventWriter eventWriter = outputFactory.createXMLEventWriter(result); return new StaxEventHandler(eventWriter); diff --git a/spring-core/src/test/java/org/springframework/util/xml/StaxStreamHandlerTests.java b/spring-core/src/test/java/org/springframework/util/xml/StaxStreamHandlerTests.java index a039826bed073296afb1efbf93530aabff183e1c..116aec625e79108e10b3bfb23614b2966855eaef 100644 --- a/spring-core/src/test/java/org/springframework/util/xml/StaxStreamHandlerTests.java +++ b/spring-core/src/test/java/org/springframework/util/xml/StaxStreamHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 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. @@ -27,8 +27,7 @@ import javax.xml.transform.Result; public class StaxStreamHandlerTests extends AbstractStaxHandlerTestCase { @Override - protected AbstractStaxHandler createStaxHandler(Result result) - throws XMLStreamException { + protected AbstractStaxHandler createStaxHandler(Result result) throws XMLStreamException { XMLOutputFactory outputFactory = XMLOutputFactory.newFactory(); XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(result); return new StaxStreamHandler(streamWriter); diff --git a/spring-oxm/src/main/java/org/springframework/oxm/Marshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/Marshaller.java index 9dfb7214d2000ae9894880ab5939a87cf1b0435b..2fe594f2e89785c937494db973f2a6334a5636ac 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/Marshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/Marshaller.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2016 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. @@ -35,7 +35,7 @@ import javax.xml.transform.Result; public interface Marshaller { /** - * Indicates whether this marshaller can marshal instances of the supplied type. + * Indicate whether this marshaller can marshal instances of the supplied type. * @param clazz the class that this marshaller is being asked if it can marshal * @return {@code true} if this marshaller can indeed marshal instances of the supplied class; * {@code false} otherwise @@ -43,7 +43,7 @@ public interface Marshaller { boolean supports(Class clazz); /** - * Marshals the object graph with the given root into the provided {@link Result}. + * Marshal the object graph with the given root into the provided {@link Result}. * @param graph the root of the object graph to marshal * @param result the result to marshal to * @throws IOException if an I/O error occurs diff --git a/spring-oxm/src/main/java/org/springframework/oxm/Unmarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/Unmarshaller.java index e5fbb959adca72922f46f9deeee731f9a153ab8f..400cc9bc5df27567741bfa8724d6d44bf2d1dfa4 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/Unmarshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/Unmarshaller.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2016 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. @@ -30,7 +30,7 @@ import javax.xml.transform.Source; public interface Unmarshaller { /** - * Indicates whether this unmarshaller can unmarshal instances of the supplied type. + * Indicate whether this unmarshaller can unmarshal instances of the supplied type. * @param clazz the class that this unmarshaller is being asked if it can marshal * @return {@code true} if this unmarshaller can indeed unmarshal to the supplied class; * {@code false} otherwise @@ -38,7 +38,7 @@ public interface Unmarshaller { boolean supports(Class clazz); /** - * Unmarshals the given {@link Source} into an object graph. + * Unmarshal the given {@link Source} into an object graph. * @param source the source to marshal from * @return the object graph * @throws IOException if an I/O error occurs diff --git a/spring-web/src/main/java/org/springframework/web/client/AsyncRestOperations.java b/spring-web/src/main/java/org/springframework/web/client/AsyncRestOperations.java index 0c4420366e2e7abf1fa8f55e1ea8bd7e123424de..19658f6bb63a051b4c578885412823fc7df8579c 100644 --- a/spring-web/src/main/java/org/springframework/web/client/AsyncRestOperations.java +++ b/spring-web/src/main/java/org/springframework/web/client/AsyncRestOperations.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2016 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. @@ -29,12 +29,14 @@ import org.springframework.http.ResponseEntity; import org.springframework.util.concurrent.ListenableFuture; /** - * Interface specifying a basic set of asynchronous RESTful operations. Implemented by - * {@link AsyncRestTemplate}. Not often used directly, but a useful option to enhance - * testability, as it can easily be mocked or stubbed. + * Interface specifying a basic set of asynchronous RESTful operations. + * Implemented by {@link AsyncRestTemplate}. Not often used directly, but a useful + * option to enhance testability, as it can easily be mocked or stubbed. * * @author Arjen Poutsma * @since 4.0 + * @see AsyncRestTemplate + * @see RestOperations */ public interface AsyncRestOperations { @@ -47,8 +49,8 @@ public interface AsyncRestOperations { // GET /** - * Asynchronously retrieve an entity by doing a GET on the specified URL. The response is - * converted and stored in an {@link ResponseEntity}. + * Asynchronously retrieve an entity by doing a GET on the specified URL. + * The response is converted and stored in an {@link ResponseEntity}. *

URI Template variables are expanded using the given URI variables, if any. * @param url the URL * @param responseType the type of the return value @@ -59,8 +61,8 @@ public interface AsyncRestOperations { Object... uriVariables) throws RestClientException; /** - * Asynchronously retrieve a representation by doing a GET on the URI template. The - * response is converted and stored in an {@link ResponseEntity}. + * Asynchronously retrieve a representation by doing a GET on the URI template. + * The response is converted and stored in an {@link ResponseEntity}. *

URI Template variables are expanded using the given map. * @param url the URL * @param responseType the type of the return value @@ -80,6 +82,7 @@ public interface AsyncRestOperations { ListenableFuture> getForEntity(URI url, Class responseType) throws RestClientException; + // HEAD /** @@ -109,6 +112,7 @@ public interface AsyncRestOperations { */ ListenableFuture headForHeaders(URI url) throws RestClientException; + // POST /** @@ -117,7 +121,7 @@ public interface AsyncRestOperations { * typically indicates where the new resource is stored. *

URI Template variables are expanded using the given URI variables, if any. * @param url the URL - * @param request the Object to be POSTed, may be {@code null} + * @param request the Object to be POSTed (may be {@code null}) * @param uriVariables the variables to expand the template * @return the value for the {@code Location} header wrapped in a {@link Future} * @see org.springframework.http.HttpEntity @@ -131,7 +135,7 @@ public interface AsyncRestOperations { * typically indicates where the new resource is stored. *

URI Template variables are expanded using the given map. * @param url the URL - * @param request the Object to be POSTed, may be {@code null} + * @param request the Object to be POSTed (may be {@code null}) * @param uriVariables the variables to expand the template * @return the value for the {@code Location} header wrapped in a {@link Future} * @see org.springframework.http.HttpEntity @@ -144,7 +148,7 @@ public interface AsyncRestOperations { * returns the value of the {@code Location} header. This header typically indicates * where the new resource is stored. * @param url the URL - * @param request the Object to be POSTed, may be {@code null} + * @param request the Object to be POSTed (may be {@code null}) * @return the value for the {@code Location} header wrapped in a {@link Future} * @see org.springframework.http.HttpEntity */ @@ -155,7 +159,7 @@ public interface AsyncRestOperations { * and asynchronously returns the response as {@link ResponseEntity}. *

URI Template variables are expanded using the given URI variables, if any. * @param url the URL - * @param request the Object to be POSTed, may be {@code null} + * @param request the Object to be POSTed (may be {@code null}) * @param uriVariables the variables to expand the template * @return the entity wrapped in a {@link Future} * @see org.springframework.http.HttpEntity @@ -168,26 +172,26 @@ public interface AsyncRestOperations { * and asynchronously returns the response as {@link ResponseEntity}. *

URI Template variables are expanded using the given map. * @param url the URL - * @param request the Object to be POSTed, may be {@code null} + * @param request the Object to be POSTed (may be {@code null}) * @param uriVariables the variables to expand the template * @return the entity wrapped in a {@link Future} * @see org.springframework.http.HttpEntity */ ListenableFuture> postForEntity(String url, HttpEntity request, - Class responseType, Map uriVariables) - throws RestClientException; + Class responseType, Map uriVariables) throws RestClientException; /** * Create a new resource by POSTing the given object to the URL, * and asynchronously returns the response as {@link ResponseEntity}. * @param url the URL - * @param request the Object to be POSTed, may be {@code null} + * @param request the Object to be POSTed (may be {@code null}) * @return the entity wrapped in a {@link Future} * @see org.springframework.http.HttpEntity */ ListenableFuture> postForEntity(URI url, HttpEntity request, Class responseType) throws RestClientException; + // PUT /** @@ -195,7 +199,7 @@ public interface AsyncRestOperations { *

URI Template variables are expanded using the given URI variables, if any. *

The Future will return a {@code null} result upon completion. * @param url the URL - * @param request the Object to be PUT, may be {@code null} + * @param request the Object to be PUT (may be {@code null}) * @param uriVariables the variables to expand the template * @see HttpEntity */ @@ -207,7 +211,7 @@ public interface AsyncRestOperations { *

URI Template variables are expanded using the given map. *

The Future will return a {@code null} result upon completion. * @param url the URL - * @param request the Object to be PUT, may be {@code null} + * @param request the Object to be PUT (may be {@code null}) * @param uriVariables the variables to expand the template * @see HttpEntity */ @@ -218,11 +222,12 @@ public interface AsyncRestOperations { * Creates a new resource by PUTting the given object to URL. *

The Future will return a {@code null} result upon completion. * @param url the URL - * @param request the Object to be PUT, may be {@code null} + * @param request the Object to be PUT (may be {@code null}) * @see HttpEntity */ ListenableFuture put(URI url, HttpEntity request) throws RestClientException; + // DELETE /** @@ -251,6 +256,7 @@ public interface AsyncRestOperations { */ ListenableFuture delete(URI url) throws RestClientException; + // OPTIONS /** @@ -344,7 +350,7 @@ public interface AsyncRestOperations { * @param url the URL * @param method the HTTP method (GET, POST, etc) * @param requestEntity the entity (headers and/or body) to write to the - * request, may be {@code null} + * request (may be {@code null}) * @param responseType the type of the return value * @param uriVariables the variables to expand in the template * @return the response as entity wrapped in a {@link Future} @@ -364,7 +370,8 @@ public interface AsyncRestOperations { * * @param url the URL * @param method the HTTP method (GET, POST, etc) - * @param requestEntity the entity (headers and/or body) to write to the request, may be {@code null} + * @param requestEntity the entity (headers and/or body) to write to the request + * (may be {@code null}) * @param responseType the type of the return value * @param uriVariables the variables to expand in the template * @return the response as entity wrapped in a {@link Future} @@ -384,7 +391,8 @@ public interface AsyncRestOperations { * * @param url the URL * @param method the HTTP method (GET, POST, etc) - * @param requestEntity the entity (headers and/or body) to write to the request, may be {@code null} + * @param requestEntity the entity (headers and/or body) to write to the request + * (may be {@code null}) * @param responseType the type of the return value * @return the response as entity wrapped in a {@link Future} */ diff --git a/spring-web/src/main/java/org/springframework/web/client/AsyncRestTemplate.java b/spring-web/src/main/java/org/springframework/web/client/AsyncRestTemplate.java index cd0df5ba02ffd6fe62eb6aabb332ce3efc615f9a..bcf7cfdeb2e449cf86c32e53710fe68d03fd2e6c 100644 --- a/spring-web/src/main/java/org/springframework/web/client/AsyncRestTemplate.java +++ b/spring-web/src/main/java/org/springframework/web/client/AsyncRestTemplate.java @@ -53,10 +53,8 @@ import org.springframework.web.util.UriTemplateHandler; * wrappers as opposed to concrete results. * *

The {@code AsyncRestTemplate} exposes a synchronous {@link RestTemplate} via the - * {@link #getRestOperations()} method, and it shares its - * {@linkplain #setErrorHandler(ResponseErrorHandler) error handler} and - * {@linkplain #setMessageConverters(List) message converters} with this - * {@code RestTemplate}. + * {@link #getRestOperations()} method and shares its {@linkplain #setErrorHandler error handler} + * and {@linkplain #setMessageConverters message converters} with that {@code RestTemplate}. * *

Note: by default {@code AsyncRestTemplate} relies on * standard JDK facilities to establish HTTP connections. You can switch to use diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/ModelFactory.java b/spring-web/src/main/java/org/springframework/web/method/annotation/ModelFactory.java index be4472d3e9a8242450ac141ee887137709e77815..960d0f72b5deae313b3960c2ebf9d8c52e186fc9 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/ModelFactory.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/ModelFactory.java @@ -250,10 +250,8 @@ public final class ModelFactory { List keyNames = new ArrayList(model.keySet()); for (String name : keyNames) { Object value = model.get(name); - if (isBindingCandidate(name, value)) { String bindingResultKey = BindingResult.MODEL_KEY_PREFIX + name; - if (!model.containsAttribute(bindingResultKey)) { WebDataBinder dataBinder = this.dataBinderFactory.createBinder(request, value, name); model.put(bindingResultKey, dataBinder.getBindingResult()); @@ -270,7 +268,7 @@ public final class ModelFactory { return false; } - Class attrType = (value != null) ? value.getClass() : null; + Class attrType = (value != null ? value.getClass() : null); if (this.sessionAttributesHandler.isHandlerSessionAttribute(attributeName, attrType)) { return true; } @@ -286,7 +284,7 @@ public final class ModelFactory { private final Set dependencies = new HashSet(); - private ModelMethod(InvocableHandlerMethod handlerMethod) { + public ModelMethod(InvocableHandlerMethod handlerMethod) { this.handlerMethod = handlerMethod; for (MethodParameter parameter : handlerMethod.getMethodParameters()) { if (parameter.hasParameterAnnotation(ModelAttribute.class)) { diff --git a/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java b/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java index 2aceca89a5ee611cb2ff8c710b918bfdf7d78961..dd86dc59e44601d929cd037bccb6b76a624389eb 100644 --- a/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java +++ b/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java @@ -194,7 +194,7 @@ final class HierarchicalUriComponents extends UriComponents { String hostTo = encodeUriComponent(this.host, encoding, getHostType()); PathComponent pathTo = this.path.encode(encoding); MultiValueMap paramsTo = encodeQueryParams(encoding); - String fragmentTo = encodeUriComponent(this.getFragment(), encoding, Type.FRAGMENT); + String fragmentTo = encodeUriComponent(getFragment(), encoding, Type.FRAGMENT); return new HierarchicalUriComponents(schemeTo, userInfoTo, hostTo, this.port, pathTo, paramsTo, fragmentTo, true, false); } @@ -328,7 +328,7 @@ final class HierarchicalUriComponents extends UriComponents { String portTo = expandUriComponent(this.port, uriVariables); PathComponent pathTo = this.path.expand(uriVariables); MultiValueMap paramsTo = expandQueryParams(uriVariables); - String fragmentTo = expandUriComponent(this.getFragment(), uriVariables); + String fragmentTo = expandUriComponent(getFragment(), uriVariables); return new HierarchicalUriComponents(schemeTo, userInfoTo, hostTo, portTo, pathTo, paramsTo, fragmentTo, false, false); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java index c05101720e99cc7189d2c0ec0ad7b53b9eb6ebc7..947ddc3ebb8b3b6fdbd346018f0b8819f78205ae 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java @@ -90,7 +90,6 @@ public abstract class AbstractMessageConverterMethodProcessor extends AbstractMe private final Set safeExtensions = new HashSet(); - /** * Constructor with list of converters only. */ @@ -348,9 +347,7 @@ public abstract class AbstractMessageConverterMethodProcessor extends AbstractMe * header with a safe attachment file name ("f.txt") is added to prevent * RFD exploits. */ - private void addContentDispositionHeader(ServletServerHttpRequest request, - ServletServerHttpResponse response) { - + private void addContentDispositionHeader(ServletServerHttpRequest request, ServletServerHttpResponse response) { HttpHeaders headers = response.getHeaders(); if (headers.containsKey(HttpHeaders.CONTENT_DISPOSITION)) { return; @@ -363,7 +360,7 @@ public abstract class AbstractMessageConverterMethodProcessor extends AbstractMe } } catch (Throwable ex) { - // Ignore + // ignore } HttpServletRequest servletRequest = request.getServletRequest(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java index 8151822b9669f250f05c2a9017ccb6af96dea5a5..4858f18b442b883cf5ab90a0c16bb9969b674ba5 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java @@ -69,11 +69,7 @@ import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.json.MappingJackson2JsonView; import org.springframework.web.util.WebUtils; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; /** * Test fixture for a {@link RequestResponseBodyMethodProcessor} with @@ -732,7 +728,6 @@ public class RequestResponseBodyMethodProcessorTests { } - String handle( @RequestBody List list, @RequestBody SimpleBean simpleBean, @@ -751,15 +746,18 @@ public class RequestResponseBodyMethodProcessorTests { return null; } + private static abstract class MyParameterizedController { @SuppressWarnings("unused") public void handleDto(@RequestBody DTO dto) {} } + private static class MySimpleParameterizedController extends MyParameterizedController { } + private interface Identifiable extends Serializable { Long getId(); @@ -767,6 +765,7 @@ public class RequestResponseBodyMethodProcessorTests { void setId(Long id); } + @SuppressWarnings("unused") private static abstract class MyParameterizedControllerWithList { @@ -774,6 +773,7 @@ public class RequestResponseBodyMethodProcessorTests { } } + @SuppressWarnings("unused") private static class MySimpleParameterizedControllerWithList extends MyParameterizedControllerWithList { } @@ -843,9 +843,12 @@ public class RequestResponseBodyMethodProcessorTests { } } + private interface MyJacksonView1 {} + private interface MyJacksonView2 {} + private static class JacksonViewBean { @JsonView(MyJacksonView1.class) @@ -881,6 +884,7 @@ public class RequestResponseBodyMethodProcessorTests { } } + @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") public static class ParentClass { @@ -902,6 +906,7 @@ public class RequestResponseBodyMethodProcessorTests { } } + @JsonTypeName("foo") public static class Foo extends ParentClass { @@ -913,6 +918,7 @@ public class RequestResponseBodyMethodProcessorTests { } } + @JsonTypeName("bar") public static class Bar extends ParentClass { @@ -924,6 +930,7 @@ public class RequestResponseBodyMethodProcessorTests { } } + private static class JacksonController { @RequestMapping @@ -996,9 +1003,9 @@ public class RequestResponseBodyMethodProcessorTests { public String defaultCharset() { return "foo"; } - } + private static class EmptyRequestBodyAdvice implements RequestBodyAdvice { @Override @@ -1030,12 +1037,15 @@ public class RequestResponseBodyMethodProcessorTests { } } + interface MappingInterface { + default A handle(@RequestBody A arg) { return arg; } } + static class MyControllerImplementingInterface implements MappingInterface { }