提交 07068892 编写于 作者: J Juergen Hoeller

Polishing

(cherry picked from commit 058714b0)
上级 25644dbd
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2015 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.
......@@ -394,6 +394,8 @@ public class ResourceBundleMessageSource extends AbstractMessageSource implement
@Override
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException {
// Special handling of default encoding
if (format.equals("java.properties")) {
String bundleName = toBundleName(baseName, locale);
final String resourceName = toResourceName(bundleName, "properties");
......@@ -441,6 +443,7 @@ public class ResourceBundleMessageSource extends AbstractMessageSource implement
}
}
else {
// Delegate handling of "java.class" format to standard Control
return super.newBundle(baseName, locale, format, loader, reload);
}
}
......
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2015 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.
......@@ -22,11 +22,10 @@ import java.util.Random;
import java.util.UUID;
/**
* An {@link org.springframework.util.IdGenerator IdGenerator} that uses
* {@link SecureRandom} for the initial seed and {@link Random} thereafter
* instead of calling {@link UUID#randomUUID()} every time as
* {@link org.springframework.util.JdkIdGenerator JdkIdGenerator} does.
* This provides a better balance between securely random id's and performance.
* An {@link IdGenerator} that uses {@link SecureRandom} for the initial seed and
* {@link Random} thereafter, instead of calling {@link UUID#randomUUID()} every
* time as {@link org.springframework.util.JdkIdGenerator JdkIdGenerator} does.
* This provides a better balance between securely random ids and performance.
*
* @author Rossen Stoyanchev
* @author Rob Winch
......@@ -45,8 +44,8 @@ public class AlternativeJdkIdGenerator implements IdGenerator {
}
@Override
public UUID generateId() {
byte[] randomBytes = new byte[16];
this.random.nextBytes(randomBytes);
......
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2015 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,14 +19,14 @@ package org.springframework.util;
import java.util.UUID;
/**
* An IdGenerator that calls {@link java.util.UUID#randomUUID()}.
* An {@link IdGenerator} that calls {@link java.util.UUID#randomUUID()}.
*
* @author Rossen Stoyanchev
* @since 4.2
* @since 4.1.5
*/
public class JdkIdGenerator implements IdGenerator {
@Override
public UUID generateId() {
return UUID.randomUUID();
}
......
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2015 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.
......@@ -20,10 +20,10 @@ import java.util.UUID;
import java.util.concurrent.atomic.AtomicLong;
/**
* An simple IdGenerator that starts at 1 and increments by 1 with each call.
* A simple {@link IdGenerator} that starts at 1 and increments by 1 with each call.
*
* @author Rossen Stoyanchev
* @since 4.2
* @since 4.1.5
*/
public class SimpleIdGenerator implements IdGenerator {
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 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.
......@@ -42,23 +42,23 @@ public abstract class AbstractMethodArgumentResolutionException extends Messagin
/**
* Create a new instance providing the invalid {@code MethodParameter} and
* a prepared description. Sub-classes should prepend the description with
* a prepared description. Subclasses should prepend the description with
* the help of {@link #getMethodParamMessage(org.springframework.core.MethodParameter)}.
*/
protected AbstractMethodArgumentResolutionException(Message<?> message,
MethodParameter parameter, String description) {
protected AbstractMethodArgumentResolutionException(Message<?> message, MethodParameter param, String description) {
super(message, description);
this.parameter = parameter;
this.parameter = param;
}
/**
* Return the MethodParameter that was rejected.
*/
public MethodParameter getMethodParameter() {
public final MethodParameter getMethodParameter() {
return this.parameter;
}
protected static String getMethodParamMessage(MethodParameter param) {
return new StringBuilder("Could not resolve method parameter at index ")
.append(param.getParameterIndex()).append(" in method: ")
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 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.
......@@ -49,22 +49,21 @@ public class MethodArgumentNotValidException extends AbstractMethodArgumentResol
public MethodArgumentNotValidException(Message<?> message, MethodParameter parameter,
BindingResult bindingResult) {
super(message, parameter, getMethodParamMessage(parameter) +
getValidationErrorMessage(parameter, bindingResult));
super(message, parameter, getMethodParamMessage(parameter) + getValidationErrorMessage(bindingResult));
this.bindingResult = bindingResult;
}
/**
* Return the BindingResult if the failure is validation-related or {@code null}.
* Return the BindingResult if the failure is validation-related,
* or {@code null} if none.
*/
public BindingResult getBindingResult() {
public final BindingResult getBindingResult() {
return this.bindingResult;
}
private static String getValidationErrorMessage(MethodParameter parameter, BindingResult bindingResult) {
private static String getValidationErrorMessage(BindingResult bindingResult) {
if (bindingResult != null) {
StringBuilder sb = new StringBuilder();
sb.append(", with ").append(bindingResult.getErrorCount()).append(" error(s): ");
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 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,11 +29,11 @@ import org.springframework.messaging.Message;
@SuppressWarnings("serial")
public class MethodArgumentTypeMismatchException extends AbstractMethodArgumentResolutionException {
/**
* Create a new instance with the invalid {@code MethodParameter}.
*/
public MethodArgumentTypeMismatchException(Message<?> message, MethodParameter parameter, String description) {
super(message, parameter, getMethodParamMessage(parameter) + description);
public MethodArgumentTypeMismatchException(Message<?> message, MethodParameter param, String description) {
super(message, param, getMethodParamMessage(param) + description);
}
}
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2015 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.
......@@ -20,8 +20,8 @@ import org.springframework.core.MethodParameter;
import org.springframework.messaging.Message;
/**
* Strategy interface for resolving method parameters into argument values in
* the context of a given {@link Message}.
* Strategy interface for resolving method parameters into argument values
* in the context of a given {@link Message}.
*
* @author Rossen Stoyanchev
* @since 4.0
......@@ -39,12 +39,12 @@ public interface HandlerMethodArgumentResolver {
/**
* Resolves a method parameter into an argument value from a given message.
* @param parameter the method parameter to resolve. This parameter must
* have previously been passed to
* @param parameter the method parameter to resolve.
* This parameter must have previously been passed to
* {@link #supportsParameter(org.springframework.core.MethodParameter)}
* and it must have returned {@code true}
* which must have returned {@code true}.
* @param message the currently processed message
* @return the resolved argument value, or {@code null}.
* @return the resolved argument value, or {@code null}
* @throws Exception in case of errors with the preparation of argument values
*/
Object resolveArgument(MethodParameter parameter, Message<?> message) throws Exception;
......
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 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,7 +68,6 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
/**
* Configure a custom SubscriptionRegistry to use for storing subscriptions.
*
* <p><strong>Note</strong> that when a custom PathMatcher is configured via
* {@link #setPathMatcher}, if the custom registry is not an instance of
* {@link DefaultSubscriptionRegistry}, the provided PathMatcher is not used
......@@ -102,9 +101,8 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
}
/**
* Configure a {@link MessageHeaderInitializer} to apply to the headers of all
* messages sent to the client outbound channel.
*
* Configure a {@link MessageHeaderInitializer} to apply to the headers
* of all messages sent to the client outbound channel.
* <p>By default this property is not set.
*/
public void setHeaderInitializer(MessageHeaderInitializer headerInitializer) {
......@@ -112,7 +110,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
}
/**
* @return the configured header initializer.
* Return the configured header initializer.
*/
public MessageHeaderInitializer getHeaderInitializer() {
return this.headerInitializer;
......@@ -131,7 +129,6 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
@Override
protected void handleMessageInternal(Message<?> message) {
MessageHeaders headers = message.getHeaders();
SimpMessageType messageType = SimpMessageHeaderAccessor.getMessageType(headers);
String destination = SimpMessageHeaderAccessor.getDestination(headers);
......@@ -197,7 +194,7 @@ public class SimpleBrokerMessageHandler extends AbstractBrokerMessageHandler {
protected void sendMessageToSubscribers(String destination, Message<?> message) {
MultiValueMap<String,String> subscriptions = this.subscriptionRegistry.findSubscriptions(message);
if ((subscriptions.size() > 0) && logger.isDebugEnabled()) {
if (!subscriptions.isEmpty() && logger.isDebugEnabled()) {
logger.debug("Broadcasting to " + subscriptions.size() + " sessions.");
}
for (String sessionId : subscriptions.keySet()) {
......
......@@ -232,7 +232,7 @@ public class Jackson2ObjectMapperBuilder {
* @see com.fasterxml.jackson.databind.ObjectMapper#addMixInAnnotations(Class, Class)
*/
public Jackson2ObjectMapperBuilder mixIn(Class<?> target, Class<?> mixinSource) {
if (mixIns != null) {
if (mixinSource != null) {
this.mixIns.put(target, mixinSource);
}
return this;
......
/*
* Copyright 2002-2015 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.web.client;
import java.io.IOException;
......@@ -9,32 +25,33 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpResponse;
/**
* Implementation of {@link ClientHttpResponse} that can not only check if the response
* has a message body, but also if its length is 0 (i.e. empty) by actually reading the input stream.
* Implementation of {@link ClientHttpResponse} that can not only check if
* the response has a message body, but also if its length is 0 (i.e. empty)
* by actually reading the input stream.
*
* @author Brian Clozel
* @since 4.1
* @since 4.1.5
* @see <a href="http://tools.ietf.org/html/rfc7230#section-3.3.3">rfc7230 Section 3.3.3</a>
*/
class MessageBodyClientHttpResponseWrapper implements ClientHttpResponse {
private final ClientHttpResponse response;
private PushbackInputStream pushbackInputStream;
private final ClientHttpResponse response;
public MessageBodyClientHttpResponseWrapper(ClientHttpResponse response) throws IOException {
this.response = response;
}
/**
* Indicates whether the response has a message body.
*
* <p>Implementation returns {@code false} for:
* <ul>
* <li>a response status of {@code 1XX}, {@code 204} or {@code 304}</li>
* <li>a {@code Content-Length} header of {@code 0}</li>
* <li>a response status of {@code 1XX}, {@code 204} or {@code 304}</li>
* <li>a {@code Content-Length} header of {@code 0}</li>
* </ul>
*
* @return {@code true} if the response has a message body, {@code false} otherwise
* @throws IOException in case of I/O errors
*/
......@@ -52,13 +69,11 @@ class MessageBodyClientHttpResponseWrapper implements ClientHttpResponse {
/**
* Indicates whether the response has an empty message body.
*
* <p>Implementation tries to read the first bytes of the response stream:
* <ul>
* <li>if no bytes are available, the message body is empty</li>
* <li>otherwise it is not empty and the stream is reset to its start for further reading</li>
* <li>if no bytes are available, the message body is empty</li>
* <li>otherwise it is not empty and the stream is reset to its start for further reading</li>
* </ul>
*
* @return {@code true} if the response has a zero-length message body, {@code false} otherwise
* @throws IOException in case of I/O errors
*/
......@@ -79,44 +94,46 @@ class MessageBodyClientHttpResponseWrapper implements ClientHttpResponse {
}
else {
this.pushbackInputStream = new PushbackInputStream(body);
int b = pushbackInputStream.read();
int b = this.pushbackInputStream.read();
if (b == -1) {
return true;
}
else {
pushbackInputStream.unread(b);
this.pushbackInputStream.unread(b);
return false;
}
}
}
@Override
public HttpStatus getStatusCode() throws IOException {
return response.getStatusCode();
public HttpHeaders getHeaders() {
return this.response.getHeaders();
}
@Override
public int getRawStatusCode() throws IOException {
return response.getRawStatusCode();
public InputStream getBody() throws IOException {
return (this.pushbackInputStream != null ? this.pushbackInputStream : this.response.getBody());
}
@Override
public String getStatusText() throws IOException {
return response.getStatusText();
public HttpStatus getStatusCode() throws IOException {
return this.response.getStatusCode();
}
@Override
public void close() {
response.close();
public int getRawStatusCode() throws IOException {
return this.response.getRawStatusCode();
}
@Override
public InputStream getBody() throws IOException {
return this.pushbackInputStream != null ? this.pushbackInputStream : response.getBody();
public String getStatusText() throws IOException {
return this.response.getStatusText();
}
@Override
public HttpHeaders getHeaders() {
return response.getHeaders();
public void close() {
this.response.close();
}
}
......@@ -18,9 +18,6 @@ package org.springframework.web.servlet.mvc.method.annotation;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
......@@ -37,8 +34,6 @@ import org.springframework.web.method.ControllerAdviceBean;
*/
class ResponseBodyAdviceChain {
private static final Log logger = LogFactory.getLog(ResponseBodyAdviceChain.class);
private final List<Object> advice;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册