From d2cc97af47cce39a41bac4b4d73c6f8e76f26cbd Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 21 Feb 2017 22:41:40 +0100 Subject: [PATCH] Polishing --- .../broker/AbstractSubscriptionRegistry.java | 42 ++++++++++++------- .../broker/DefaultSubscriptionRegistry.java | 18 +++----- .../messaging/tcp/ReconnectStrategy.java | 3 +- .../AbstractNioBufferReactorNettyCodec.java | 8 ++-- .../MonoToListenableFutureAdapter.java | 4 +- .../tcp/reactor/ReactorNettyTcpClient.java | 14 +++---- .../reactor/ReactorNettyTcpConnection.java | 3 +- .../web/cors/CorsConfiguration.java | 16 +++---- .../web/reactive/function/BodyExtractor.java | 5 +-- .../web/reactive/function/BodyInserter.java | 5 +-- .../server/HandlerFilterFunction.java | 4 +- .../function/server/HandlerFunction.java | 5 ++- .../function/server/RouterFunction.java | 2 +- .../config/annotation/CorsRegistration.java | 11 +++-- .../config/annotation/CorsRegistry.java | 13 ++++-- .../WebMvcConfigurationSupport.java | 8 ++-- 16 files changed, 82 insertions(+), 79 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java index cbaa802131..7a8903e091 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2017 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. @@ -38,8 +38,7 @@ import org.springframework.util.MultiValueMap; public abstract class AbstractSubscriptionRegistry implements SubscriptionRegistry { private static MultiValueMap EMPTY_MAP = - CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap(0)); - + CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<>(0)); protected final Log logger = LogFactory.getLog(getClass()); @@ -55,19 +54,25 @@ public abstract class AbstractSubscriptionRegistry implements SubscriptionRegist String sessionId = SimpMessageHeaderAccessor.getSessionId(headers); if (sessionId == null) { - logger.error("No sessionId in " + message); + if (logger.isErrorEnabled()) { + logger.error("No sessionId in " + message); + } return; } String subscriptionId = SimpMessageHeaderAccessor.getSubscriptionId(headers); if (subscriptionId == null) { - logger.error("No subscriptionId in " + message); + if (logger.isErrorEnabled()) { + logger.error("No subscriptionId in " + message); + } return; } String destination = SimpMessageHeaderAccessor.getDestination(headers); if (destination == null) { - logger.error("No destination in " + message); + if (logger.isErrorEnabled()) { + logger.error("No destination in " + message); + } return; } @@ -85,13 +90,17 @@ public abstract class AbstractSubscriptionRegistry implements SubscriptionRegist String sessionId = SimpMessageHeaderAccessor.getSessionId(headers); if (sessionId == null) { - logger.error("No sessionId in " + message); + if (logger.isErrorEnabled()) { + logger.error("No sessionId in " + message); + } return; } String subscriptionId = SimpMessageHeaderAccessor.getSubscriptionId(headers); if (subscriptionId == null) { - logger.error("No subscriptionId " + message); + if (logger.isErrorEnabled()) { + logger.error("No subscriptionId " + message); + } return; } @@ -109,7 +118,9 @@ public abstract class AbstractSubscriptionRegistry implements SubscriptionRegist String destination = SimpMessageHeaderAccessor.getDestination(headers); if (destination == null) { - logger.error("No destination in " + message); + if (logger.isErrorEnabled()) { + logger.error("No destination in " + message); + } return EMPTY_MAP; } @@ -117,14 +128,13 @@ public abstract class AbstractSubscriptionRegistry implements SubscriptionRegist } - protected abstract void addSubscriptionInternal(String sessionId, String subscriptionId, - String destination, Message message); + protected abstract void addSubscriptionInternal( + String sessionId, String subscriptionId, String destination, Message message); - protected abstract void removeSubscriptionInternal(String sessionId, String subscriptionId, Message message); + protected abstract void removeSubscriptionInternal( + String sessionId, String subscriptionId, Message message); - @Override - public abstract void unregisterAllSubscriptions(String sessionId); - - protected abstract MultiValueMap findSubscriptionsInternal(String destination, Message message); + protected abstract MultiValueMap findSubscriptionsInternal( + String destination, Message message); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java index 140ad83f71..254384c2cd 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java @@ -136,8 +136,8 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry { @Override - protected void addSubscriptionInternal(String sessionId, String subsId, String destination, - Message message) { + protected void addSubscriptionInternal( + String sessionId, String subsId, String destination, Message message) { Expression expression = null; MessageHeaders headers = message.getHeaders(); @@ -478,13 +478,14 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry { } - private static class Subscription { + private static final class Subscription { private final String id; private final Expression selectorExpression; public Subscription(String id, Expression selector) { + Assert.notNull(id, "Subscription id must not be null"); this.id = id; this.selectorExpression = selector; } @@ -499,19 +500,12 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry { @Override public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - return getId().equals(((Subscription) other).getId()); - + return (this == other || (other instanceof Subscription && this.id.equals(((Subscription) other).id))); } @Override public int hashCode() { - return getId().hashCode(); + return this.id.hashCode(); } @Override diff --git a/spring-messaging/src/main/java/org/springframework/messaging/tcp/ReconnectStrategy.java b/spring-messaging/src/main/java/org/springframework/messaging/tcp/ReconnectStrategy.java index 54f2f69661..e5a6c4fe18 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/tcp/ReconnectStrategy.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/tcp/ReconnectStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -16,7 +16,6 @@ package org.springframework.messaging.tcp; - /** * A contract to determine the frequency of reconnect attempts after connection failure. * diff --git a/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/AbstractNioBufferReactorNettyCodec.java b/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/AbstractNioBufferReactorNettyCodec.java index aeef66482a..e49bded1f1 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/AbstractNioBufferReactorNettyCodec.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/AbstractNioBufferReactorNettyCodec.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.messaging.tcp.reactor; import java.nio.ByteBuffer; @@ -41,13 +42,14 @@ public abstract class AbstractNioBufferReactorNettyCodec

implements ReactorNe return messages; } - protected abstract List> decodeInternal(ByteBuffer nioBuffer); - @Override public void encode(Message

message, ByteBuf outputBuffer) { outputBuffer.writeBytes(encodeInternal(message)); } + + protected abstract List> decodeInternal(ByteBuffer nioBuffer); + protected abstract ByteBuffer encodeInternal(Message

message); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/MonoToListenableFutureAdapter.java b/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/MonoToListenableFutureAdapter.java index ad82d685a3..2f83d78932 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/MonoToListenableFutureAdapter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/MonoToListenableFutureAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -28,12 +28,10 @@ import reactor.core.publisher.Mono; */ class MonoToListenableFutureAdapter extends AbstractMonoToListenableFutureAdapter { - public MonoToListenableFutureAdapter(Mono mono) { super(mono); } - @Override protected T adapt(T result) { return result; diff --git a/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/ReactorNettyTcpClient.java b/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/ReactorNettyTcpClient.java index 529fc23a37..f5c19a57c4 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/ReactorNettyTcpClient.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/ReactorNettyTcpClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -115,6 +115,7 @@ public class ReactorNettyTcpClient

implements TcpOperations

{ @Override public ListenableFuture connect(final TcpConnectionHandler

handler) { Assert.notNull(handler, "TcpConnectionHandler is required"); + if (this.stopping) { return handleShuttingDownConnectFailure(handler); } @@ -131,6 +132,7 @@ public class ReactorNettyTcpClient

implements TcpOperations

{ public ListenableFuture connect(TcpConnectionHandler

handler, ReconnectStrategy strategy) { Assert.notNull(handler, "TcpConnectionHandler is required"); Assert.notNull(strategy, "ReconnectStrategy is required"); + if (this.stopping) { return handleShuttingDownConnectFailure(handler); } @@ -189,7 +191,6 @@ public class ReactorNettyTcpClient

implements TcpOperations

{ ChannelGroupFuture close = this.channelGroup.close(); Mono completion = FutureMono.from(close) .doAfterTerminate((x, e) -> { - // TODO: https://github.com/reactor/reactor-netty/issues/24 shutdownGlobalResources(); @@ -211,14 +212,14 @@ public class ReactorNettyTcpClient

implements TcpOperations

{ return new MonoToListenableFutureAdapter<>(completion); } - private static void shutdownGlobalResources() { + private void shutdownGlobalResources() { try { Method method = TcpResources.class.getDeclaredMethod("_dispose"); ReflectionUtils.makeAccessible(method); ReflectionUtils.invokeMethod(method, TcpResources.get()); } catch (NoSuchMethodException ex) { - ex.printStackTrace(); + // ignore } } @@ -227,15 +228,13 @@ public class ReactorNettyTcpClient

implements TcpOperations

{ private final TcpConnectionHandler

connectionHandler; - ReactorNettyHandler(TcpConnectionHandler

handler) { this.connectionHandler = handler; } - @SuppressWarnings("unchecked") @Override + @SuppressWarnings("unchecked") public Publisher apply(NettyInbound inbound, NettyOutbound outbound) { - DirectProcessor completion = DirectProcessor.create(); TcpConnection

connection = new ReactorNettyTcpConnection<>(inbound, outbound, codec, completion); scheduler.schedule(() -> connectionHandler.afterConnected(connection)); @@ -254,6 +253,7 @@ public class ReactorNettyTcpClient

implements TcpOperations

{ } } + private static class StompMessageDecoder

extends ByteToMessageDecoder { private final ReactorNettyCodec

codec; diff --git a/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/ReactorNettyTcpConnection.java b/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/ReactorNettyTcpConnection.java index 13245c1e2d..c4107f7e9e 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/ReactorNettyTcpConnection.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/tcp/reactor/ReactorNettyTcpConnection.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -66,7 +66,6 @@ public class ReactorNettyTcpConnection

implements TcpConnection

{ @Override @SuppressWarnings("deprecation") public void onReadInactivity(Runnable runnable, long inactivityDuration) { - // TODO: workaround for https://github.com/reactor/reactor-netty/issues/22 ChannelPipeline pipeline = this.inbound.context().channel().pipeline(); String name = NettyPipeline.OnChannelReadIdle; diff --git a/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java b/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java index cdebc9db2a..1a7a368da9 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java +++ b/spring-web/src/main/java/org/springframework/web/cors/CorsConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -112,7 +112,7 @@ public class CorsConfiguration { } /** - * Return the configured origins to allow, possibly {@code null}. + * Return the configured origins to allow, or {@code null} if none. * @see #addAllowedOrigin(String) * @see #setAllowedOrigins(List) */ @@ -155,7 +155,7 @@ public class CorsConfiguration { } /** - * Return the allowed HTTP methods, possibly {@code null} in which case + * Return the allowed HTTP methods, or {@code null} in which case * only {@code "GET"} and {@code "HEAD"} allowed. * @see #addAllowedMethod(HttpMethod) * @see #addAllowedMethod(String) @@ -208,7 +208,7 @@ public class CorsConfiguration { } /** - * Return the allowed actual request headers, possibly {@code null}. + * Return the allowed actual request headers, or {@code null} if none. * @see #addAllowedHeader(String) * @see #setAllowedHeaders(List) */ @@ -242,7 +242,7 @@ public class CorsConfiguration { } /** - * Return the configured response headers to expose, possibly {@code null}. + * Return the configured response headers to expose, or {@code null} if none. * @see #addExposedHeader(String) * @see #setExposedHeaders(List) */ @@ -273,7 +273,7 @@ public class CorsConfiguration { } /** - * Return the configured {@code allowCredentials} flag, possibly {@code null}. + * Return the configured {@code allowCredentials} flag, or {@code null} if none. * @see #setAllowCredentials(Boolean) */ public Boolean getAllowCredentials() { @@ -290,7 +290,7 @@ public class CorsConfiguration { } /** - * Return the configured {@code maxAge} value, possibly {@code null}. + * Return the configured {@code maxAge} value, or {@code null} if none. * @see #setMaxAge(Long) */ public Long getMaxAge() { @@ -378,7 +378,7 @@ public class CorsConfiguration { /** * Check the origin of the request against the configured allowed origins. * @param requestOrigin the origin to check - * @return the origin to use for the response, possibly {@code null} which + * @return the origin to use for the response, or {@code null} which * means the request origin is not allowed */ public String checkOrigin(String requestOrigin) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/BodyExtractor.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/BodyExtractor.java index bde7599fc6..5b492d766a 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/BodyExtractor.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/BodyExtractor.java @@ -26,11 +26,10 @@ import org.springframework.http.codec.HttpMessageReader; /** * A function that can extract data from a {@link ReactiveHttpInputMessage} body. * - * @param the type of data to extract - * @param the type of {@link ReactiveHttpInputMessage} this extractor can be applied to - * * @author Arjen Poutsma * @since 5.0 + * @param the type of data to extract + * @param the type of {@link ReactiveHttpInputMessage} this extractor can be applied to * @see BodyExtractors */ @FunctionalInterface diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/BodyInserter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/BodyInserter.java index 8ec058e88a..9401ab935a 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/BodyInserter.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/BodyInserter.java @@ -28,11 +28,10 @@ import org.springframework.http.codec.HttpMessageWriter; /** * A combination of functions that can populate a {@link ReactiveHttpOutputMessage} body. * - * @param the type of data to insert - * @param the type of {@link ReactiveHttpOutputMessage} this inserter can be applied to - * * @author Arjen Poutsma * @since 5.0 + * @param the type of data to insert + * @param the type of {@link ReactiveHttpOutputMessage} this inserter can be applied to * @see BodyInserters */ @FunctionalInterface diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerFilterFunction.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerFilterFunction.java index 9023a7c11c..5f4fed51f5 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerFilterFunction.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerFilterFunction.java @@ -26,10 +26,10 @@ import org.springframework.web.reactive.function.server.support.ServerRequestWra /** * Represents a function that filters a {@linkplain HandlerFunction handler function}. * - * @param the type of the {@linkplain HandlerFunction handler function} to filter - * @param the type of the response of the function * @author Arjen Poutsma * @since 5.0 + * @param the type of the {@linkplain HandlerFunction handler function} to filter + * @param the type of the response of the function * @see RouterFunction#filter(HandlerFilterFunction) */ @FunctionalInterface diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerFunction.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerFunction.java index f314179ec0..29ce12600a 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerFunction.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/HandlerFunction.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -21,9 +21,10 @@ import reactor.core.publisher.Mono; /** * Represents a function that handles a {@linkplain ServerRequest request}. * - * @param the type of the response of the function * @author Arjen Poutsma * @since 5.0 + * @param the type of the response of the function + * @see RouterFunction */ @FunctionalInterface public interface HandlerFunction { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RouterFunction.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RouterFunction.java index 80342f3e5c..73f3ca1cd0 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RouterFunction.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RouterFunction.java @@ -21,9 +21,9 @@ import reactor.core.publisher.Mono; /** * Represents a function that routes to a {@linkplain HandlerFunction handler function}. * - * @param the type of the {@linkplain HandlerFunction handler function} to route to * @author Arjen Poutsma * @since 5.0 + * @param the type of the {@linkplain HandlerFunction handler function} to route to * @see RouterFunctions */ @FunctionalInterface diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/CorsRegistration.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/CorsRegistration.java index 495a216414..4367c31719 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/CorsRegistration.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/CorsRegistration.java @@ -16,7 +16,6 @@ package org.springframework.web.servlet.config.annotation; -import java.util.ArrayList; import java.util.Arrays; import org.springframework.web.cors.CorsConfiguration; @@ -45,7 +44,6 @@ public class CorsRegistration { * Create a new {@link CorsRegistration} that allows all origins, headers, and * credentials for {@code GET}, {@code HEAD}, and {@code POST} requests with * max age set to 1800 seconds (30 minutes) for the specified path. - * * @param pathPattern the path that the CORS configuration should apply to; * exact path mapping URIs (such as {@code "/admin"}) are supported as well * as Ant-style path patterns (such as {@code "/admin/**"}). @@ -56,13 +54,14 @@ public class CorsRegistration { this.config = new CorsConfiguration().applyPermitDefaultValues(); } + /** * Set the origins to allow, e.g. {@code "http://domain1.com"}. *

The special value {@code "*"} allows all domains. *

By default, all origins are allowed. */ public CorsRegistration allowedOrigins(String... origins) { - this.config.setAllowedOrigins(new ArrayList<>(Arrays.asList(origins))); + this.config.setAllowedOrigins(Arrays.asList(origins)); return this; } @@ -74,7 +73,7 @@ public class CorsRegistration { * are allowed. */ public CorsRegistration allowedMethods(String... methods) { - this.config.setAllowedMethods(new ArrayList<>(Arrays.asList(methods))); + this.config.setAllowedMethods(Arrays.asList(methods)); return this; } @@ -88,7 +87,7 @@ public class CorsRegistration { *

By default all headers are allowed. */ public CorsRegistration allowedHeaders(String... headers) { - this.config.setAllowedHeaders(new ArrayList<>(Arrays.asList(headers))); + this.config.setAllowedHeaders(Arrays.asList(headers)); return this; } @@ -101,7 +100,7 @@ public class CorsRegistration { *

By default this is not set. */ public CorsRegistration exposedHeaders(String... headers) { - this.config.setExposedHeaders(new ArrayList<>(Arrays.asList(headers))); + this.config.setExposedHeaders(Arrays.asList(headers)); return this; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/CorsRegistry.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/CorsRegistry.java index 366d3a4e05..6fb5e19c46 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/CorsRegistry.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/CorsRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 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. @@ -37,14 +37,15 @@ public class CorsRegistry { /** - * Enable cross origin request handling for the specified path pattern. - * + * Enable cross-origin request handling for the specified path pattern. *

Exact path mapping URIs (such as {@code "/admin"}) are supported as * well as Ant-style path patterns (such as {@code "/admin/**"}). - * *

By default, all origins, all headers, credentials and {@code GET}, * {@code HEAD}, and {@code POST} methods are allowed, and the max age * is set to 30 minutes. + * @param pathPattern the path pattern to enable CORS handling for + * @return CorsRegistration the corresponding registration object, + * allowing for further fine-tuning */ public CorsRegistration addMapping(String pathPattern) { CorsRegistration registration = new CorsRegistration(pathPattern); @@ -52,6 +53,10 @@ public class CorsRegistry { return registration; } + /** + * Return the registered {@link CorsConfiguration} objects, + * keyed by path pattern. + */ protected Map getCorsConfigurations() { Map configs = new LinkedHashMap<>(this.registrations.size()); for (CorsRegistration registration : this.registrations) { 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 1f83e3e653..9ac1891058 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 @@ -22,7 +22,6 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; - import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; @@ -629,12 +628,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv String className = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean"; clazz = ClassUtils.forName(className, WebMvcConfigurationSupport.class.getClassLoader()); } - catch (ClassNotFoundException ex) { + catch (ClassNotFoundException | LinkageError ex) { throw new BeanInitializationException("Could not find default validator class", ex); } - catch (LinkageError ex) { - throw new BeanInitializationException("Could not load default validator class", ex); - } validator = (Validator) BeanUtils.instantiateClass(clazz); } else { @@ -961,6 +957,8 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** + * Return the registered {@link CorsConfiguration} objects, + * keyed by path pattern. * @since 4.2 */ protected final Map getCorsConfigurations() {