Polishing
This commit is contained in:
parent
a4b2ae583e
commit
efce7902c4
|
|
@ -91,7 +91,7 @@ public class ReaderContext {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Raise a fatal error.
|
* Raise a regular error.
|
||||||
*/
|
*/
|
||||||
public void error(String message, @Nullable Object source) {
|
public void error(String message, @Nullable Object source) {
|
||||||
error(message, source, null, null);
|
error(message, source, null, null);
|
||||||
|
|
|
||||||
|
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,6 @@ public class NoOpCache implements Cache {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return this.name;
|
return this.name;
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,6 @@ public class GenericApplicationListenerAdapter implements GenericApplicationList
|
||||||
ResolvableType declaredEventType = resolveDeclaredEventType(listener.getClass());
|
ResolvableType declaredEventType = resolveDeclaredEventType(listener.getClass());
|
||||||
if (declaredEventType == null || declaredEventType.isAssignableFrom(
|
if (declaredEventType == null || declaredEventType.isAssignableFrom(
|
||||||
ResolvableType.forClass(ApplicationEvent.class))) {
|
ResolvableType.forClass(ApplicationEvent.class))) {
|
||||||
|
|
||||||
Class<?> targetClass = AopUtils.getTargetClass(listener);
|
Class<?> targetClass = AopUtils.getTargetClass(listener);
|
||||||
if (targetClass != listener.getClass()) {
|
if (targetClass != listener.getClass()) {
|
||||||
declaredEventType = resolveDeclaredEventType(targetClass);
|
declaredEventType = resolveDeclaredEventType(targetClass);
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,6 @@ public class KeyNamingStrategy implements ObjectNamingStrategy, InitializingBean
|
||||||
* Merges the {@code Properties} configured in the {@code mappings} and
|
* Merges the {@code Properties} configured in the {@code mappings} and
|
||||||
* {@code mappingLocations} into the final {@code Properties} instance
|
* {@code mappingLocations} into the final {@code Properties} instance
|
||||||
* used for {@code ObjectName} resolution.
|
* used for {@code ObjectName} resolution.
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() throws IOException {
|
public void afterPropertiesSet() throws IOException {
|
||||||
|
|
|
||||||
|
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -142,7 +142,7 @@ public class DefaultMessageCodesResolver implements MessageCodesResolver, Serial
|
||||||
* object/field-specific code, a field-specific code, a plain error code.
|
* object/field-specific code, a field-specific code, a plain error code.
|
||||||
* <p>Arrays, Lists and Maps are resolved both for specific elements and
|
* <p>Arrays, Lists and Maps are resolved both for specific elements and
|
||||||
* the whole collection.
|
* the whole collection.
|
||||||
* <p>See the {@link DefaultMessageCodesResolver class level Javadoc} for
|
* <p>See the {@link DefaultMessageCodesResolver class level javadoc} for
|
||||||
* details on the generated codes.
|
* details on the generated codes.
|
||||||
* @return the list of codes
|
* @return the list of codes
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ public abstract class VfsUtils {
|
||||||
Class<?> visitorAttributesClass = loader.loadClass(VFS3_PKG + "VisitorAttributes");
|
Class<?> visitorAttributesClass = loader.loadClass(VFS3_PKG + "VisitorAttributes");
|
||||||
VISITOR_ATTRIBUTES_FIELD_RECURSE = visitorAttributesClass.getField("RECURSE");
|
VISITOR_ATTRIBUTES_FIELD_RECURSE = visitorAttributesClass.getField("RECURSE");
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Throwable ex) {
|
||||||
throw new IllegalStateException("Could not detect JBoss VFS infrastructure", ex);
|
throw new IllegalStateException("Could not detect JBoss VFS infrastructure", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@ public abstract class TemplateAwareExpressionParser implements ExpressionParser
|
||||||
String prefix = context.getExpressionPrefix();
|
String prefix = context.getExpressionPrefix();
|
||||||
String suffix = context.getExpressionSuffix();
|
String suffix = context.getExpressionSuffix();
|
||||||
int startIdx = 0;
|
int startIdx = 0;
|
||||||
|
|
||||||
while (startIdx < expressionString.length()) {
|
while (startIdx < expressionString.length()) {
|
||||||
int prefixIndex = expressionString.indexOf(prefix, startIdx);
|
int prefixIndex = expressionString.indexOf(prefix, startIdx);
|
||||||
if (prefixIndex >= startIdx) {
|
if (prefixIndex >= startIdx) {
|
||||||
|
|
@ -104,22 +105,18 @@ public abstract class TemplateAwareExpressionParser implements ExpressionParser
|
||||||
"No ending suffix '" + suffix + "' for expression starting at character " +
|
"No ending suffix '" + suffix + "' for expression starting at character " +
|
||||||
prefixIndex + ": " + expressionString.substring(prefixIndex));
|
prefixIndex + ": " + expressionString.substring(prefixIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (suffixIndex == afterPrefixIndex) {
|
if (suffixIndex == afterPrefixIndex) {
|
||||||
throw new ParseException(expressionString, prefixIndex,
|
throw new ParseException(expressionString, prefixIndex,
|
||||||
"No expression defined within delimiter '" + prefix + suffix +
|
"No expression defined within delimiter '" + prefix + suffix +
|
||||||
"' at character " + prefixIndex);
|
"' at character " + prefixIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
String expr = expressionString.substring(prefixIndex + prefix.length(), suffixIndex);
|
String expr = expressionString.substring(prefixIndex + prefix.length(), suffixIndex);
|
||||||
expr = expr.trim();
|
expr = expr.trim();
|
||||||
|
|
||||||
if (expr.isEmpty()) {
|
if (expr.isEmpty()) {
|
||||||
throw new ParseException(expressionString, prefixIndex,
|
throw new ParseException(expressionString, prefixIndex,
|
||||||
"No expression defined within delimiter '" + prefix + suffix +
|
"No expression defined within delimiter '" + prefix + suffix +
|
||||||
"' at character " + prefixIndex);
|
"' at character " + prefixIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
expressions.add(doParseExpression(expr, context));
|
expressions.add(doParseExpression(expr, context));
|
||||||
startIdx = suffixIndex + suffix.length();
|
startIdx = suffixIndex + suffix.length();
|
||||||
}
|
}
|
||||||
|
|
@ -129,6 +126,7 @@ public abstract class TemplateAwareExpressionParser implements ExpressionParser
|
||||||
startIdx = expressionString.length();
|
startIdx = expressionString.length();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return expressions.toArray(new Expression[expressions.size()]);
|
return expressions.toArray(new Expression[expressions.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ public class FunctionReference extends SpelNodeImpl {
|
||||||
|
|
||||||
|
|
||||||
public FunctionReference(String functionName, int pos, SpelNodeImpl... arguments) {
|
public FunctionReference(String functionName, int pos, SpelNodeImpl... arguments) {
|
||||||
super(pos,arguments);
|
super(pos, arguments);
|
||||||
this.name = functionName;
|
this.name = functionName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2014 the original author or authors.
|
* Copyright 2002-2017 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
|
||||||
|
|
@ -196,9 +196,9 @@ public abstract class SpelNodeImpl implements SpelNode, Opcodes {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate code that handles building the argument values for the specified method. This method will take account
|
* Generate code that handles building the argument values for the specified method.
|
||||||
* of whether the invoked method is a varargs method and if it is then the argument values will be appropriately
|
* This method will take account of whether the invoked method is a varargs method
|
||||||
* packaged into an array.
|
* and if it is then the argument values will be appropriately packaged into an array.
|
||||||
* @param mv the method visitor where code should be generated
|
* @param mv the method visitor where code should be generated
|
||||||
* @param cf the current codeflow
|
* @param cf the current codeflow
|
||||||
* @param member the method or constructor for which arguments are being setup
|
* @param member the method or constructor for which arguments are being setup
|
||||||
|
|
@ -208,7 +208,7 @@ public abstract class SpelNodeImpl implements SpelNode, Opcodes {
|
||||||
String[] paramDescriptors = null;
|
String[] paramDescriptors = null;
|
||||||
boolean isVarargs = false;
|
boolean isVarargs = false;
|
||||||
if (member instanceof Constructor) {
|
if (member instanceof Constructor) {
|
||||||
Constructor<?> ctor = (Constructor<?>)member;
|
Constructor<?> ctor = (Constructor<?>) member;
|
||||||
paramDescriptors = CodeFlow.toDescriptors(ctor.getParameterTypes());
|
paramDescriptors = CodeFlow.toDescriptors(ctor.getParameterTypes());
|
||||||
isVarargs = ctor.isVarArgs();
|
isVarargs = ctor.isVarArgs();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ public class ReflectiveMethodExecutor implements MethodExecutor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Method getMethod() {
|
public Method getMethod() {
|
||||||
return this.method;
|
return this.method;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ import static org.mockito.BDDMockito.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link JmsMessagingTemplate}.
|
* Tests for {@link JmsMessagingTemplate}.
|
||||||
*
|
*
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
*/
|
*/
|
||||||
public class JmsMessagingTemplateTests {
|
public class JmsMessagingTemplateTests {
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,7 @@ public interface ContentTypeResolver {
|
||||||
* Determine the {@link MimeType} of a message from the given MessageHeaders.
|
* Determine the {@link MimeType} of a message from the given MessageHeaders.
|
||||||
* @param headers the headers to use for the resolution
|
* @param headers the headers to use for the resolution
|
||||||
* @return the resolved {@code MimeType}, or {@code null} if none found
|
* @return the resolved {@code MimeType}, or {@code null} if none found
|
||||||
* @throws org.springframework.util.InvalidMimeTypeException if the content type
|
* @throws InvalidMimeTypeException if the content type is a String that cannot be parsed
|
||||||
* is a String that cannot be parsed
|
|
||||||
* @throws IllegalArgumentException if there is a content type but its type is unknown
|
* @throws IllegalArgumentException if there is a content type but its type is unknown
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2013 the original author or authors.
|
* Copyright 2002-2017 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
|
||||||
|
|
@ -70,11 +70,15 @@ public class ChannelRegistration {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Configure interceptors for the message channel.
|
||||||
* @deprecated as of 4.3.12, in favor of {@link #interceptors(ChannelInterceptor...)}
|
* @deprecated as of 4.3.12, in favor of {@link #interceptors(ChannelInterceptor...)}
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public ChannelRegistration setInterceptors(ChannelInterceptor... interceptors) {
|
public ChannelRegistration setInterceptors(@Nullable ChannelInterceptor... interceptors) {
|
||||||
return interceptors(interceptors);
|
if (interceptors != null) {
|
||||||
|
this.interceptors.addAll(Arrays.asList(interceptors));
|
||||||
|
}
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,7 @@ public interface StompSession {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the headers used on the SUBSCRIBE frame.
|
* Return the headers used on the SUBSCRIBE frame.
|
||||||
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
StompHeaders getSubscriptionHeaders();
|
StompHeaders getSubscriptionHeaders();
|
||||||
|
|
||||||
|
|
@ -160,6 +161,7 @@ public interface StompSession {
|
||||||
* Alternative to {@link #unsubscribe()} with additional custom headers
|
* Alternative to {@link #unsubscribe()} with additional custom headers
|
||||||
* to send to the server.
|
* to send to the server.
|
||||||
* <p><strong>Note:</strong> There is no need to set the subscription id.
|
* <p><strong>Note:</strong> There is no need to set the subscription id.
|
||||||
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
void unsubscribe(@Nullable StompHeaders stompHeaders);
|
void unsubscribe(@Nullable StompHeaders stompHeaders);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -102,4 +102,5 @@ public class UserDestinationResult {
|
||||||
return "UserDestinationResult [source=" + this.sourceDestination + ", target=" + this.targetDestinations +
|
return "UserDestinationResult [source=" + this.sourceDestination + ", target=" + this.targetDestinations +
|
||||||
", subscribeDestination=" + this.subscribeDestination + ", user=" + this.user + "]";
|
", subscribeDestination=" + this.subscribeDestination + ", user=" + this.user + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@ description = "Spring Object/XML Marshalling"
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
castor
|
castor
|
||||||
xjc
|
|
||||||
jibx
|
jibx
|
||||||
|
xjc
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
|
||||||
|
|
@ -96,13 +96,15 @@ class TransactionContext {
|
||||||
void startTransaction() {
|
void startTransaction() {
|
||||||
Assert.state(this.transactionStatus == null,
|
Assert.state(this.transactionStatus == null,
|
||||||
"Cannot start a new transaction without ending the existing transaction first.");
|
"Cannot start a new transaction without ending the existing transaction first.");
|
||||||
|
|
||||||
this.flaggedForRollback = this.defaultRollback;
|
this.flaggedForRollback = this.defaultRollback;
|
||||||
this.transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition);
|
this.transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition);
|
||||||
++this.transactionsStarted;
|
++this.transactionsStarted;
|
||||||
|
|
||||||
if (logger.isInfoEnabled()) {
|
if (logger.isInfoEnabled()) {
|
||||||
logger.info(String.format(
|
logger.info(String.format(
|
||||||
"Began transaction (%s) for test context %s; transaction manager [%s]; rollback [%s]",
|
"Began transaction (%s) for test context %s; transaction manager [%s]; rollback [%s]",
|
||||||
this.transactionsStarted, this.testContext, this.transactionManager, flaggedForRollback));
|
this.transactionsStarted, this.testContext, this.transactionManager, flaggedForRollback));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -113,14 +115,14 @@ class TransactionContext {
|
||||||
void endTransaction() {
|
void endTransaction() {
|
||||||
if (logger.isTraceEnabled()) {
|
if (logger.isTraceEnabled()) {
|
||||||
logger.trace(String.format(
|
logger.trace(String.format(
|
||||||
"Ending transaction for test context %s; transaction status [%s]; rollback [%s]", this.testContext,
|
"Ending transaction for test context %s; transaction status [%s]; rollback [%s]",
|
||||||
this.transactionStatus, flaggedForRollback));
|
this.testContext, this.transactionStatus, this.flaggedForRollback));
|
||||||
}
|
}
|
||||||
Assert.state(this.transactionStatus != null, () -> String.format(
|
Assert.state(this.transactionStatus != null, () -> String.format(
|
||||||
"Failed to end transaction for test context %s: transaction does not exist.", this.testContext));
|
"Failed to end transaction for test context %s: transaction does not exist.", this.testContext));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (flaggedForRollback) {
|
if (this.flaggedForRollback) {
|
||||||
this.transactionManager.rollback(this.transactionStatus);
|
this.transactionManager.rollback(this.transactionStatus);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -132,8 +134,8 @@ class TransactionContext {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (logger.isInfoEnabled()) {
|
if (logger.isInfoEnabled()) {
|
||||||
logger.info(String.format("%s transaction for test context %s.", (flaggedForRollback ? "Rolled back"
|
logger.info(String.format("%s transaction for test context %s.",
|
||||||
: "Committed"), this.testContext));
|
(this.flaggedForRollback ? "Rolled back" : "Committed"), this.testContext));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -51,6 +51,7 @@ import org.springframework.util.ObjectUtils;
|
||||||
* return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
|
* return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
|
||||||
* }
|
* }
|
||||||
* </pre>
|
* </pre>
|
||||||
|
*
|
||||||
* Or, by using a builder accessible via static methods:
|
* Or, by using a builder accessible via static methods:
|
||||||
* <pre class="code">
|
* <pre class="code">
|
||||||
* @RequestMapping("/handle")
|
* @RequestMapping("/handle")
|
||||||
|
|
|
||||||
|
|
@ -106,12 +106,12 @@ class InterceptingAsyncClientHttpRequest extends AbstractBufferingAsyncClientHtt
|
||||||
return interceptor.intercept(request, body, this);
|
return interceptor.intercept(request, body, this);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
URI theUri = request.getURI();
|
URI uri = request.getURI();
|
||||||
HttpMethod method = request.getMethod();
|
HttpMethod method = request.getMethod();
|
||||||
HttpHeaders headers = request.getHeaders();
|
HttpHeaders headers = request.getHeaders();
|
||||||
|
|
||||||
Assert.state(method != null, "No standard HTTP method");
|
Assert.state(method != null, "No standard HTTP method");
|
||||||
AsyncClientHttpRequest delegate = requestFactory.createAsyncRequest(theUri, method);
|
AsyncClientHttpRequest delegate = requestFactory.createAsyncRequest(uri, method);
|
||||||
delegate.getHeaders().putAll(headers);
|
delegate.getHeaders().putAll(headers);
|
||||||
if (body.length > 0) {
|
if (body.length > 0) {
|
||||||
StreamUtils.copy(body, delegate.getBody());
|
StreamUtils.copy(body, delegate.getBody());
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ public class ServletPathExtensionContentNegotiationStrategy extends PathExtensio
|
||||||
* {@link PathExtensionContentNegotiationStrategy#getMediaTypeForResource}
|
* {@link PathExtensionContentNegotiationStrategy#getMediaTypeForResource}
|
||||||
* with the ability to also look up through the ServletContext.
|
* with the ability to also look up through the ServletContext.
|
||||||
* @param resource the resource to look up
|
* @param resource the resource to look up
|
||||||
* @return the MediaType for the extension or {@code null}.
|
* @return the MediaType for the extension, or {@code null} if none found
|
||||||
* @since 4.3
|
* @since 4.3
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -289,11 +289,11 @@ public class ServletWebRequest extends ServletRequestAttributes implements Nativ
|
||||||
etag = padEtagIfNecessary(etag);
|
etag = padEtagIfNecessary(etag);
|
||||||
while (ifNoneMatch.hasMoreElements()) {
|
while (ifNoneMatch.hasMoreElements()) {
|
||||||
String clientETags = ifNoneMatch.nextElement();
|
String clientETags = ifNoneMatch.nextElement();
|
||||||
Matcher eTagMatcher = ETAG_HEADER_VALUE_PATTERN.matcher(clientETags);
|
Matcher etagMatcher = ETAG_HEADER_VALUE_PATTERN.matcher(clientETags);
|
||||||
// Compare weak/strong ETags as per https://tools.ietf.org/html/rfc7232#section-2.3
|
// Compare weak/strong ETags as per https://tools.ietf.org/html/rfc7232#section-2.3
|
||||||
while (eTagMatcher.find()) {
|
while (etagMatcher.find()) {
|
||||||
if (StringUtils.hasLength(eTagMatcher.group()) &&
|
if (StringUtils.hasLength(etagMatcher.group()) &&
|
||||||
etag.replaceFirst("^W/", "").equals(eTagMatcher.group(3))) {
|
etag.replaceFirst("^W/", "").equals(etagMatcher.group(3))) {
|
||||||
this.notModified = true;
|
this.notModified = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ public class DelegatingFilterProxy extends GenericFilterBean {
|
||||||
* @see #setEnvironment(org.springframework.core.env.Environment)
|
* @see #setEnvironment(org.springframework.core.env.Environment)
|
||||||
*/
|
*/
|
||||||
public DelegatingFilterProxy(String targetBeanName, @Nullable WebApplicationContext wac) {
|
public DelegatingFilterProxy(String targetBeanName, @Nullable WebApplicationContext wac) {
|
||||||
Assert.hasText(targetBeanName, "target Filter bean name must not be null or empty");
|
Assert.hasText(targetBeanName, "Target Filter bean name must not be null or empty");
|
||||||
this.setTargetBeanName(targetBeanName);
|
this.setTargetBeanName(targetBeanName);
|
||||||
this.webApplicationContext = wac;
|
this.webApplicationContext = wac;
|
||||||
if (wac != null) {
|
if (wac != null) {
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ import org.springframework.web.context.request.WebRequest;
|
||||||
* {@link SessionStatus#setComplete()}.
|
* {@link SessionStatus#setComplete()}.
|
||||||
*
|
*
|
||||||
* @author Rossen Stoyanchev
|
* @author Rossen Stoyanchev
|
||||||
|
* @author Juergen Hoeller
|
||||||
* @since 3.1
|
* @since 3.1
|
||||||
*/
|
*/
|
||||||
public class SessionAttributesHandler {
|
public class SessionAttributesHandler {
|
||||||
|
|
@ -154,7 +155,7 @@ public class SessionAttributesHandler {
|
||||||
* A pass-through call to the underlying {@link SessionAttributeStore}.
|
* A pass-through call to the underlying {@link SessionAttributeStore}.
|
||||||
* @param request the current request
|
* @param request the current request
|
||||||
* @param attributeName the name of the attribute of interest
|
* @param attributeName the name of the attribute of interest
|
||||||
* @return the attribute value or {@code null}
|
* @return the attribute value, or {@code null} if none
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
Object retrieveAttribute(WebRequest request, String attributeName) {
|
Object retrieveAttribute(WebRequest request, String attributeName) {
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ abstract class MvcNamespaceUtils {
|
||||||
/**
|
/**
|
||||||
* Find the {@code ContentNegotiationManager} bean created by or registered
|
* Find the {@code ContentNegotiationManager} bean created by or registered
|
||||||
* with the {@code annotation-driven} element.
|
* with the {@code annotation-driven} element.
|
||||||
* @return a bean definition, bean reference, or null.
|
* @return a bean definition, bean reference, or {@code null}
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public static Object getContentNegotiationManager(ParserContext context) {
|
public static Object getContentNegotiationManager(ParserContext context) {
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,9 @@ import org.springframework.web.servlet.view.RedirectView;
|
||||||
* {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that
|
* {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that
|
||||||
* parses the following MVC namespace elements:
|
* parses the following MVC namespace elements:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>{@code <view-controller>}
|
* <li>{@code <view-controller>}
|
||||||
* <li>{@code <redirect-view-controller>}
|
* <li>{@code <redirect-view-controller>}
|
||||||
* <li>{@code <status-controller>}
|
* <li>{@code <status-controller>}
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* <p>All elements result in the registration of a
|
* <p>All elements result in the registration of a
|
||||||
|
|
@ -56,7 +56,7 @@ import org.springframework.web.servlet.view.RedirectView;
|
||||||
class ViewControllerBeanDefinitionParser implements BeanDefinitionParser {
|
class ViewControllerBeanDefinitionParser implements BeanDefinitionParser {
|
||||||
|
|
||||||
private static final String HANDLER_MAPPING_BEAN_NAME =
|
private static final String HANDLER_MAPPING_BEAN_NAME =
|
||||||
"org.springframework.web.servlet.config.viewControllerHandlerMapping";
|
"org.springframework.web.servlet.config.viewControllerHandlerMapping";
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
|
||||||
|
|
@ -42,11 +42,11 @@ public class InterceptorRegistration {
|
||||||
|
|
||||||
private final List<String> excludePatterns = new ArrayList<>();
|
private final List<String> excludePatterns = new ArrayList<>();
|
||||||
|
|
||||||
private int order = 0;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private PathMatcher pathMatcher;
|
private PathMatcher pathMatcher;
|
||||||
|
|
||||||
|
private int order = 0;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an {@link InterceptorRegistration} instance.
|
* Creates an {@link InterceptorRegistration} instance.
|
||||||
|
|
@ -72,18 +72,6 @@ public class InterceptorRegistration {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* An order position to be used, default is 0.
|
|
||||||
*/
|
|
||||||
public InterceptorRegistration order(int order){
|
|
||||||
this.order = order;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected int getOrder() {
|
|
||||||
return this.order;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A PathMatcher implementation to use with this interceptor. This is an optional,
|
* A PathMatcher implementation to use with this interceptor. This is an optional,
|
||||||
* advanced property required only if using custom PathMatcher implementations
|
* advanced property required only if using custom PathMatcher implementations
|
||||||
|
|
@ -95,6 +83,23 @@ public class InterceptorRegistration {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify an order position to be used. Default is 0.
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
public InterceptorRegistration order(int order){
|
||||||
|
this.order = order;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the order position to be used.
|
||||||
|
* @since 5.0
|
||||||
|
*/
|
||||||
|
protected int getOrder() {
|
||||||
|
return this.order;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the underlying interceptor. If URL patterns are provided the returned type is
|
* Returns the underlying interceptor. If URL patterns are provided the returned type is
|
||||||
* {@link MappedInterceptor}; otherwise {@link HandlerInterceptor}.
|
* {@link MappedInterceptor}; otherwise {@link HandlerInterceptor}.
|
||||||
|
|
|
||||||
|
|
@ -134,4 +134,5 @@ abstract class AbstractNameValueExpression<T> implements NameValueExpression<T>
|
||||||
}
|
}
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -144,8 +144,8 @@ public final class ParamsRequestCondition extends AbstractRequestCondition<Param
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean matchName(HttpServletRequest request) {
|
protected boolean matchName(HttpServletRequest request) {
|
||||||
return WebUtils.hasSubmitParameter(request, this.name) ||
|
return (WebUtils.hasSubmitParameter(request, this.name) ||
|
||||||
request.getParameterMap().containsKey(this.name);
|
request.getParameterMap().containsKey(this.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -113,55 +113,55 @@ public final class RequestMappingInfo implements RequestCondition<RequestMapping
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the URL patterns of this {@link RequestMappingInfo};
|
* Return the URL patterns of this {@link RequestMappingInfo};
|
||||||
* or instance with 0 patterns, never {@code null}.
|
* or instance with 0 patterns (never {@code null}).
|
||||||
*/
|
*/
|
||||||
public PatternsRequestCondition getPatternsCondition() {
|
public PatternsRequestCondition getPatternsCondition() {
|
||||||
return this.patternsCondition;
|
return this.patternsCondition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the HTTP request methods of this {@link RequestMappingInfo};
|
* Return the HTTP request methods of this {@link RequestMappingInfo};
|
||||||
* or instance with 0 request methods, never {@code null}.
|
* or instance with 0 request methods (never {@code null}).
|
||||||
*/
|
*/
|
||||||
public RequestMethodsRequestCondition getMethodsCondition() {
|
public RequestMethodsRequestCondition getMethodsCondition() {
|
||||||
return this.methodsCondition;
|
return this.methodsCondition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the "parameters" condition of this {@link RequestMappingInfo};
|
* Return the "parameters" condition of this {@link RequestMappingInfo};
|
||||||
* or instance with 0 parameter expressions, never {@code null}.
|
* or instance with 0 parameter expressions (never {@code null}).
|
||||||
*/
|
*/
|
||||||
public ParamsRequestCondition getParamsCondition() {
|
public ParamsRequestCondition getParamsCondition() {
|
||||||
return this.paramsCondition;
|
return this.paramsCondition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the "headers" condition of this {@link RequestMappingInfo};
|
* Return the "headers" condition of this {@link RequestMappingInfo};
|
||||||
* or instance with 0 header expressions, never {@code null}.
|
* or instance with 0 header expressions (never {@code null}).
|
||||||
*/
|
*/
|
||||||
public HeadersRequestCondition getHeadersCondition() {
|
public HeadersRequestCondition getHeadersCondition() {
|
||||||
return this.headersCondition;
|
return this.headersCondition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the "consumes" condition of this {@link RequestMappingInfo};
|
* Return the "consumes" condition of this {@link RequestMappingInfo};
|
||||||
* or instance with 0 consumes expressions, never {@code null}.
|
* or instance with 0 consumes expressions (never {@code null}).
|
||||||
*/
|
*/
|
||||||
public ConsumesRequestCondition getConsumesCondition() {
|
public ConsumesRequestCondition getConsumesCondition() {
|
||||||
return this.consumesCondition;
|
return this.consumesCondition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the "produces" condition of this {@link RequestMappingInfo};
|
* Return the "produces" condition of this {@link RequestMappingInfo};
|
||||||
* or instance with 0 produces expressions, never {@code null}.
|
* or instance with 0 produces expressions (never {@code null}).
|
||||||
*/
|
*/
|
||||||
public ProducesRequestCondition getProducesCondition() {
|
public ProducesRequestCondition getProducesCondition() {
|
||||||
return this.producesCondition;
|
return this.producesCondition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the "custom" condition of this {@link RequestMappingInfo}; or {@code null}.
|
* Return the "custom" condition of this {@link RequestMappingInfo}, or {@code null}.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public RequestCondition<?> getCustomCondition() {
|
public RequestCondition<?> getCustomCondition() {
|
||||||
|
|
@ -170,7 +170,7 @@ public final class RequestMappingInfo implements RequestCondition<RequestMapping
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Combines "this" request mapping info (i.e. the current instance) with another request mapping info instance.
|
* Combine "this" request mapping info (i.e. the current instance) with another request mapping info instance.
|
||||||
* <p>Example: combine type- and method-level request mappings.
|
* <p>Example: combine type- and method-level request mappings.
|
||||||
* @return a new request mapping info instance; never {@code null}
|
* @return a new request mapping info instance; never {@code null}
|
||||||
*/
|
*/
|
||||||
|
|
@ -199,7 +199,7 @@ public final class RequestMappingInfo implements RequestCondition<RequestMapping
|
||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return (other.name != null ? other.name : null);
|
return other.name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ public class HttpHeadersReturnValueHandler implements HandlerMethodReturnValueHa
|
||||||
Assert.state(servletResponse != null, "No HttpServletResponse");
|
Assert.state(servletResponse != null, "No HttpServletResponse");
|
||||||
ServletServerHttpResponse outputMessage = new ServletServerHttpResponse(servletResponse);
|
ServletServerHttpResponse outputMessage = new ServletServerHttpResponse(servletResponse);
|
||||||
outputMessage.getHeaders().putAll(headers);
|
outputMessage.getHeaders().putAll(headers);
|
||||||
outputMessage.getBody(); // flush headers
|
outputMessage.getBody(); // flush headers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -250,7 +250,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public List<HandlerMethodArgumentResolver> getInitBinderArgumentResolvers() {
|
public List<HandlerMethodArgumentResolver> getInitBinderArgumentResolvers() {
|
||||||
return (this.initBinderArgumentResolvers != null) ? this.initBinderArgumentResolvers.getResolvers() : null;
|
return (this.initBinderArgumentResolvers != null ? this.initBinderArgumentResolvers.getResolvers() : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -427,6 +427,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
|
||||||
/**
|
/**
|
||||||
* Configure the registry for reactive library types to be supported as
|
* Configure the registry for reactive library types to be supported as
|
||||||
* return values from controller methods.
|
* return values from controller methods.
|
||||||
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public void setReactiveRegistry(ReactiveAdapterRegistry reactiveRegistry) {
|
public void setReactiveRegistry(ReactiveAdapterRegistry reactiveRegistry) {
|
||||||
Assert.notNull(reactiveRegistry, "ReactiveAdapterRegistry is required");
|
Assert.notNull(reactiveRegistry, "ReactiveAdapterRegistry is required");
|
||||||
|
|
@ -435,6 +436,7 @@ public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the configured reactive type registry of adapters.
|
* Return the configured reactive type registry of adapters.
|
||||||
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public ReactiveAdapterRegistry getReactiveAdapterRegistry() {
|
public ReactiveAdapterRegistry getReactiveAdapterRegistry() {
|
||||||
return this.reactiveRegistry;
|
return this.reactiveRegistry;
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ public class Param {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the raw name of the parameter
|
* Set the raw name of the parameter.
|
||||||
*/
|
*/
|
||||||
public void setName(@Nullable String name) {
|
public void setName(@Nullable String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
@ -54,14 +54,14 @@ public class Param {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the raw value of the parameter
|
* Set the raw value of the parameter.
|
||||||
*/
|
*/
|
||||||
public void setValue(@Nullable String value) {
|
public void setValue(@Nullable String value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the raw parameter value
|
* Return the raw parameter value.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public String getValue() {
|
public String getValue() {
|
||||||
|
|
|
||||||
|
|
@ -203,7 +203,6 @@ public class UrlTag extends HtmlEscapingAwareTag implements ParamAware {
|
||||||
/**
|
/**
|
||||||
* Build the URL for the tag from the tag attributes and parameters.
|
* Build the URL for the tag from the tag attributes and parameters.
|
||||||
* @return the URL value as a String
|
* @return the URL value as a String
|
||||||
* @throws JspException
|
|
||||||
*/
|
*/
|
||||||
String createUrl() throws JspException {
|
String createUrl() throws JspException {
|
||||||
Assert.state(this.value != null, "No value set");
|
Assert.state(this.value != null, "No value set");
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2009 the original author or authors.
|
* Copyright 2002-2017 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -33,7 +33,7 @@ import freemarker.template.Configuration;
|
||||||
public interface FreeMarkerConfig {
|
public interface FreeMarkerConfig {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the FreeMarker Configuration object for the current
|
* Return the FreeMarker {@link Configuration} object for the current
|
||||||
* web application context.
|
* web application context.
|
||||||
* <p>A FreeMarker Configuration object may be used to set FreeMarker
|
* <p>A FreeMarker Configuration object may be used to set FreeMarker
|
||||||
* properties and shared objects, and allows to retrieve templates.
|
* properties and shared objects, and allows to retrieve templates.
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,6 @@ public class HttpEntityMethodProcessorMockTests {
|
||||||
@Before
|
@Before
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void setup() throws Exception {
|
public void setup() throws Exception {
|
||||||
|
|
||||||
stringHttpMessageConverter = mock(HttpMessageConverter.class);
|
stringHttpMessageConverter = mock(HttpMessageConverter.class);
|
||||||
given(stringHttpMessageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN));
|
given(stringHttpMessageConverter.getSupportedMediaTypes()).willReturn(Collections.singletonList(MediaType.TEXT_PLAIN));
|
||||||
resourceMessageConverter = mock(HttpMessageConverter.class);
|
resourceMessageConverter = mock(HttpMessageConverter.class);
|
||||||
|
|
|
||||||
|
|
@ -110,8 +110,7 @@ public class WebMvcStompWebSocketEndpointRegistration implements StompWebSocketE
|
||||||
this.registration.setTransportHandlerOverrides(handler);
|
this.registration.setTransportHandlerOverrides(handler);
|
||||||
}
|
}
|
||||||
if (!this.allowedOrigins.isEmpty()) {
|
if (!this.allowedOrigins.isEmpty()) {
|
||||||
this.registration.setAllowedOrigins(
|
this.registration.setAllowedOrigins(this.allowedOrigins.toArray(new String[this.allowedOrigins.size()]));
|
||||||
this.allowedOrigins.toArray(new String[this.allowedOrigins.size()]));
|
|
||||||
}
|
}
|
||||||
return this.registration;
|
return this.registration;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ public class ServletServerContainerFactoryBean
|
||||||
private ServerContainer serverContainer;
|
private ServerContainer serverContainer;
|
||||||
|
|
||||||
|
|
||||||
public void setAsyncSendTimeout(long timeoutInMillis) {
|
public void setAsyncSendTimeout(Long timeoutInMillis) {
|
||||||
this.asyncSendTimeout = timeoutInMillis;
|
this.asyncSendTimeout = timeoutInMillis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ public class ServletServerContainerFactoryBean
|
||||||
return this.asyncSendTimeout;
|
return this.asyncSendTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMaxSessionIdleTimeout(long timeoutInMillis) {
|
public void setMaxSessionIdleTimeout(Long timeoutInMillis) {
|
||||||
this.maxSessionIdleTimeout = timeoutInMillis;
|
this.maxSessionIdleTimeout = timeoutInMillis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -84,7 +84,7 @@ public class ServletServerContainerFactoryBean
|
||||||
return this.maxSessionIdleTimeout;
|
return this.maxSessionIdleTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMaxTextMessageBufferSize(int bufferSize) {
|
public void setMaxTextMessageBufferSize(Integer bufferSize) {
|
||||||
this.maxTextMessageBufferSize = bufferSize;
|
this.maxTextMessageBufferSize = bufferSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,7 +93,7 @@ public class ServletServerContainerFactoryBean
|
||||||
return this.maxTextMessageBufferSize;
|
return this.maxTextMessageBufferSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMaxBinaryMessageBufferSize(int bufferSize) {
|
public void setMaxBinaryMessageBufferSize(Integer bufferSize) {
|
||||||
this.maxBinaryMessageBufferSize = bufferSize;
|
this.maxBinaryMessageBufferSize = bufferSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -226,9 +226,7 @@ class DefaultTransportRequest implements TransportRequest {
|
||||||
fallbackRequest.connect(this.handler, this.future);
|
fallbackRequest.connect(this.handler, this.future);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (logger.isErrorEnabled()) {
|
logger.error("No more fallback transports after " + DefaultTransportRequest.this, ex);
|
||||||
logger.error("No more fallback transports after " + DefaultTransportRequest.this, ex);
|
|
||||||
}
|
|
||||||
if (ex != null) {
|
if (ex != null) {
|
||||||
this.future.setException(ex);
|
this.future.setException(ex);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7951,7 +7951,7 @@ Alternatively for XML configuration use the `context:load-time-weaver` element:
|
||||||
Once configured for the `ApplicationContext`. Any bean within that `ApplicationContext`
|
Once configured for the `ApplicationContext`. Any bean within that `ApplicationContext`
|
||||||
may implement `LoadTimeWeaverAware`, thereby receiving a reference to the load-time
|
may implement `LoadTimeWeaverAware`, thereby receiving a reference to the load-time
|
||||||
weaver instance. This is particularly useful in combination with
|
weaver instance. This is particularly useful in combination with
|
||||||
<<data-acess.adoc#orm-jpa,Spring's JPA support>> where load-time weaving may be necessary
|
<<data-access.adoc#orm-jpa,Spring's JPA support>> where load-time weaving may be necessary
|
||||||
for JPA class transformation.
|
for JPA class transformation.
|
||||||
Consult the `LocalContainerEntityManagerFactoryBean` javadocs for more detail. For more on
|
Consult the `LocalContainerEntityManagerFactoryBean` javadocs for more detail. For more on
|
||||||
AspectJ load-time weaving, see <<aop-aj-ltw>>.
|
AspectJ load-time weaving, see <<aop-aj-ltw>>.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue