mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-07-15 01:07:30 +08:00
Merge branch '1.5.x' into 2.0.x
This commit is contained in:
commit
2e2f91d4a0
@ -20,7 +20,6 @@ import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@ -145,6 +144,17 @@ final class BeanTypeRegistry implements SmartInitializingSingleton {
|
||||
this.beanDefinitions.clear();
|
||||
}
|
||||
|
||||
private void updateTypesIfNecessary() {
|
||||
this.beanFactory.getBeanNamesIterator().forEachRemaining((name) -> {
|
||||
if (!this.beanTypes.containsKey(name)) {
|
||||
addBeanType(name);
|
||||
}
|
||||
else {
|
||||
updateBeanType(name);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void addBeanType(String name) {
|
||||
if (this.beanFactory.containsSingleton(name)) {
|
||||
this.beanTypes.put(name, this.beanFactory.getType(name));
|
||||
@ -161,13 +171,17 @@ final class BeanTypeRegistry implements SmartInitializingSingleton {
|
||||
}
|
||||
}
|
||||
|
||||
private RootBeanDefinition getBeanDefinition(String name) {
|
||||
try {
|
||||
return (RootBeanDefinition) this.beanFactory.getMergedBeanDefinition(name);
|
||||
private void updateBeanType(String name) {
|
||||
if (this.beanFactory.isAlias(name) || this.beanFactory.containsSingleton(name)) {
|
||||
return;
|
||||
}
|
||||
catch (BeanDefinitionStoreException ex) {
|
||||
logIgnoredError("unresolvable metadata in bean definition", name, ex);
|
||||
return null;
|
||||
RootBeanDefinition beanDefinition = getBeanDefinition(name);
|
||||
if (beanDefinition == null) {
|
||||
return;
|
||||
}
|
||||
RootBeanDefinition previous = this.beanDefinitions.put(name, beanDefinition);
|
||||
if (previous != null && !beanDefinition.equals(previous)) {
|
||||
addBeanTypeForNonAliasDefinition(name, beanDefinition);
|
||||
}
|
||||
}
|
||||
|
||||
@ -196,6 +210,16 @@ final class BeanTypeRegistry implements SmartInitializingSingleton {
|
||||
}
|
||||
}
|
||||
|
||||
private RootBeanDefinition getBeanDefinition(String name) {
|
||||
try {
|
||||
return (RootBeanDefinition) this.beanFactory.getMergedBeanDefinition(name);
|
||||
}
|
||||
catch (BeanDefinitionStoreException ex) {
|
||||
logIgnoredError("unresolvable metadata in bean definition", name, ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void logIgnoredError(String message, String name, Exception ex) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Ignoring " + message + " '" + name + "'", ex);
|
||||
@ -207,30 +231,6 @@ final class BeanTypeRegistry implements SmartInitializingSingleton {
|
||||
&& !this.beanFactory.containsSingleton(factoryBeanName));
|
||||
}
|
||||
|
||||
private void updateTypesIfNecessary() {
|
||||
Iterator<String> names = this.beanFactory.getBeanNamesIterator();
|
||||
while (names.hasNext()) {
|
||||
String name = names.next();
|
||||
if (!this.beanTypes.containsKey(name)) {
|
||||
addBeanType(name);
|
||||
}
|
||||
else {
|
||||
if (!this.beanFactory.isAlias(name)
|
||||
&& !this.beanFactory.containsSingleton(name)) {
|
||||
RootBeanDefinition beanDefinition = getBeanDefinition(name);
|
||||
if (beanDefinition != null) {
|
||||
RootBeanDefinition existingDefinition = this.beanDefinitions
|
||||
.put(name, beanDefinition);
|
||||
if (existingDefinition != null
|
||||
&& !beanDefinition.equals(existingDefinition)) {
|
||||
addBeanTypeForNonAliasDefinition(name, beanDefinition);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to guess the type that a {@link FactoryBean} will return based on the
|
||||
* generics in its method signature.
|
||||
|
@ -347,7 +347,6 @@ public class ConditionalOnBeanTests {
|
||||
public static class ConsumingConfiguration {
|
||||
|
||||
ConsumingConfiguration(String testBean) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -30,19 +30,16 @@ import java.util.zip.InflaterInputStream;
|
||||
*/
|
||||
class ZipInflaterInputStream extends InflaterInputStream {
|
||||
|
||||
private final Inflater inflater;
|
||||
private int available;
|
||||
|
||||
private boolean extraBytesWritten;
|
||||
|
||||
private int available;
|
||||
|
||||
ZipInflaterInputStream(InputStream inputStream, int size) {
|
||||
this(inputStream, new Inflater(true), size);
|
||||
}
|
||||
|
||||
private ZipInflaterInputStream(InputStream inputStream, Inflater inflater, int size) {
|
||||
super(inputStream, inflater, getInflaterBufferSize(size));
|
||||
this.inflater = inflater;
|
||||
super(inputStream, new Inflater(true), getInflaterBufferSize(size));
|
||||
this.available = size;
|
||||
}
|
||||
|
||||
@ -66,7 +63,7 @@ class ZipInflaterInputStream extends InflaterInputStream {
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
super.close();
|
||||
this.inflater.end();
|
||||
this.inf.end();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -48,24 +48,8 @@ class NoSuchMethodFailureAnalyzer extends AbstractFailureAnalyzer<NoSuchMethodEr
|
||||
if (actual == null) {
|
||||
return null;
|
||||
}
|
||||
StringWriter description = new StringWriter();
|
||||
PrintWriter writer = new PrintWriter(description);
|
||||
writer.print("An attempt was made to call the method ");
|
||||
writer.print(cause.getMessage());
|
||||
writer.print(" but it does not exist. Its class, ");
|
||||
writer.print(className);
|
||||
writer.println(", is available from the following locations:");
|
||||
writer.println();
|
||||
for (URL candidate : candidates) {
|
||||
writer.print(" ");
|
||||
writer.println(candidate);
|
||||
}
|
||||
writer.println();
|
||||
writer.println("It was loaded from the following location:");
|
||||
writer.println();
|
||||
writer.print(" ");
|
||||
writer.println(actual);
|
||||
return new FailureAnalysis(description.toString(),
|
||||
String description = getDescription(cause, className, candidates, actual);
|
||||
return new FailureAnalysis(description,
|
||||
"Correct the classpath of your application so that it contains a single,"
|
||||
+ " compatible version of " + className,
|
||||
cause);
|
||||
@ -105,4 +89,26 @@ class NoSuchMethodFailureAnalyzer extends AbstractFailureAnalyzer<NoSuchMethodEr
|
||||
}
|
||||
}
|
||||
|
||||
private String getDescription(NoSuchMethodError cause, String className,
|
||||
List<URL> candidates, URL actual) {
|
||||
StringWriter description = new StringWriter();
|
||||
PrintWriter writer = new PrintWriter(description);
|
||||
writer.print("An attempt was made to call the method ");
|
||||
writer.print(cause.getMessage());
|
||||
writer.print(" but it does not exist. Its class, ");
|
||||
writer.print(className);
|
||||
writer.println(", is available from the following locations:");
|
||||
writer.println();
|
||||
for (URL candidate : candidates) {
|
||||
writer.print(" ");
|
||||
writer.println(candidate);
|
||||
}
|
||||
writer.println();
|
||||
writer.println("It was loaded from the following location:");
|
||||
writer.println();
|
||||
writer.print(" ");
|
||||
writer.println(actual);
|
||||
return description.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -319,8 +319,8 @@ public class UndertowServletWebServerFactory extends AbstractServletWebServerFac
|
||||
private AccessLogHandler createAccessLogHandler(HttpHandler handler,
|
||||
AccessLogReceiver accessLogReceiver) {
|
||||
createAccessLogDirectoryIfNecessary();
|
||||
String formatString = ((this.accessLogPattern != null) ? this.accessLogPattern
|
||||
: "common");
|
||||
String formatString = (this.accessLogPattern != null) ? this.accessLogPattern
|
||||
: "common";
|
||||
return new AccessLogHandler(handler, accessLogReceiver, formatString,
|
||||
Undertow.class.getClassLoader());
|
||||
}
|
||||
|
@ -196,7 +196,6 @@ public abstract class SpringBootServletInitializer implements WebApplicationInit
|
||||
((ConfigurableWebEnvironment) environment)
|
||||
.initPropertySources(this.servletContext, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -30,7 +30,9 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
/**
|
||||
* @author awilkinson
|
||||
* Tests for {@link NoSuchMethodFailureAnalyzer}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@RunWith(ModifiedClassPathRunner.class)
|
||||
@ClassPathOverrides("javax.servlet:servlet-api:2.5")
|
||||
|
Loading…
Reference in New Issue
Block a user