Fix TemplateAvailabilityProvider binding issues
Update all TemplateAvailabilityProvider implementations to use the relaxed property binder. Also fix FreeMarkerTemplateAvailabilityProvider to use `template-loader-path` rather than `path`. Fixes gh-4085
This commit is contained in:
parent
891faa9d35
commit
87a515f6a0
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2014 the original author or authors.
|
* Copyright 2012-2015 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.
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
package org.springframework.boot.autoconfigure.freemarker;
|
package org.springframework.boot.autoconfigure.freemarker;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
@ -35,11 +36,13 @@ public class FreeMarkerTemplateAvailabilityProvider implements
|
||||||
public boolean isTemplateAvailable(String view, Environment environment,
|
public boolean isTemplateAvailable(String view, Environment environment,
|
||||||
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
||||||
if (ClassUtils.isPresent("freemarker.template.Configuration", classLoader)) {
|
if (ClassUtils.isPresent("freemarker.template.Configuration", classLoader)) {
|
||||||
String loaderPath = environment.getProperty("spring.freemarker.path",
|
RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(environment,
|
||||||
|
"spring.freemarker.");
|
||||||
|
String loaderPath = resolver.getProperty("template-loader-path",
|
||||||
FreeMarkerProperties.DEFAULT_TEMPLATE_LOADER_PATH);
|
FreeMarkerProperties.DEFAULT_TEMPLATE_LOADER_PATH);
|
||||||
String prefix = environment.getProperty("spring.freemarker.prefix",
|
String prefix = resolver.getProperty("prefix",
|
||||||
FreeMarkerProperties.DEFAULT_PREFIX);
|
FreeMarkerProperties.DEFAULT_PREFIX);
|
||||||
String suffix = environment.getProperty("spring.freemarker.suffix",
|
String suffix = resolver.getProperty("suffix",
|
||||||
FreeMarkerProperties.DEFAULT_SUFFIX);
|
FreeMarkerProperties.DEFAULT_SUFFIX);
|
||||||
return resourceLoader.getResource(loaderPath + prefix + view + suffix)
|
return resourceLoader.getResource(loaderPath + prefix + view + suffix)
|
||||||
.exists();
|
.exists();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2014 the original author or authors.
|
* Copyright 2012-2015 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.
|
||||||
|
|
@ -17,7 +17,9 @@
|
||||||
package org.springframework.boot.autoconfigure.groovy.template;
|
package org.springframework.boot.autoconfigure.groovy.template;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.core.env.PropertyResolver;
|
||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
||||||
|
|
@ -34,9 +36,11 @@ public class GroovyTemplateAvailabilityProvider implements TemplateAvailabilityP
|
||||||
public boolean isTemplateAvailable(String view, Environment environment,
|
public boolean isTemplateAvailable(String view, Environment environment,
|
||||||
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
||||||
if (ClassUtils.isPresent("groovy.text.TemplateEngine", classLoader)) {
|
if (ClassUtils.isPresent("groovy.text.TemplateEngine", classLoader)) {
|
||||||
String prefix = environment.getProperty("spring.groovy.template.prefix",
|
PropertyResolver resolver = new RelaxedPropertyResolver(environment,
|
||||||
|
"spring.groovy.template.");
|
||||||
|
String prefix = resolver.getProperty("prefix",
|
||||||
GroovyTemplateProperties.DEFAULT_PREFIX);
|
GroovyTemplateProperties.DEFAULT_PREFIX);
|
||||||
String suffix = environment.getProperty("spring.groovy.template.suffix",
|
String suffix = resolver.getProperty("suffix",
|
||||||
GroovyTemplateProperties.DEFAULT_SUFFIX);
|
GroovyTemplateProperties.DEFAULT_SUFFIX);
|
||||||
return resourceLoader.getResource(prefix + view + suffix).exists();
|
return resourceLoader.getResource(prefix + view + suffix).exists();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,9 @@
|
||||||
package org.springframework.boot.autoconfigure.mustache;
|
package org.springframework.boot.autoconfigure.mustache;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.core.env.PropertyResolver;
|
||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
||||||
|
|
@ -34,9 +36,11 @@ public class MustacheTemplateAvailabilityProvider implements TemplateAvailabilit
|
||||||
public boolean isTemplateAvailable(String view, Environment environment,
|
public boolean isTemplateAvailable(String view, Environment environment,
|
||||||
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
||||||
if (ClassUtils.isPresent("com.samskivert.mustache.Template", classLoader)) {
|
if (ClassUtils.isPresent("com.samskivert.mustache.Template", classLoader)) {
|
||||||
String prefix = environment.getProperty("spring.mustache.prefix",
|
PropertyResolver resolver = new RelaxedPropertyResolver(environment,
|
||||||
|
"spring.mustache.");
|
||||||
|
String prefix = resolver.getProperty("prefix",
|
||||||
MustacheProperties.DEFAULT_PREFIX);
|
MustacheProperties.DEFAULT_PREFIX);
|
||||||
String suffix = environment.getProperty("spring.mustache.suffix",
|
String suffix = resolver.getProperty("suffix",
|
||||||
MustacheProperties.DEFAULT_SUFFIX);
|
MustacheProperties.DEFAULT_SUFFIX);
|
||||||
return resourceLoader.getResource(prefix + view + suffix).exists();
|
return resourceLoader.getResource(prefix + view + suffix).exists();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2014 the original author or authors.
|
* Copyright 2012-2015 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.
|
||||||
|
|
@ -17,7 +17,9 @@
|
||||||
package org.springframework.boot.autoconfigure.thymeleaf;
|
package org.springframework.boot.autoconfigure.thymeleaf;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.core.env.PropertyResolver;
|
||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
||||||
|
|
@ -36,9 +38,11 @@ public class ThymeleafTemplateAvailabilityProvider implements
|
||||||
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
||||||
if (ClassUtils.isPresent("org.thymeleaf.spring4.SpringTemplateEngine",
|
if (ClassUtils.isPresent("org.thymeleaf.spring4.SpringTemplateEngine",
|
||||||
classLoader)) {
|
classLoader)) {
|
||||||
String prefix = environment.getProperty("spring.thymeleaf.prefix",
|
PropertyResolver resolver = new RelaxedPropertyResolver(environment,
|
||||||
|
"spring.thymeleaf.");
|
||||||
|
String prefix = resolver.getProperty("prefix",
|
||||||
ThymeleafProperties.DEFAULT_PREFIX);
|
ThymeleafProperties.DEFAULT_PREFIX);
|
||||||
String suffix = environment.getProperty("spring.thymeleaf.suffix",
|
String suffix = resolver.getProperty("suffix",
|
||||||
ThymeleafProperties.DEFAULT_SUFFIX);
|
ThymeleafProperties.DEFAULT_SUFFIX);
|
||||||
return resourceLoader.getResource(prefix + view + suffix).exists();
|
return resourceLoader.getResource(prefix + view + suffix).exists();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2014 the original author or authors.
|
* Copyright 2012-2015 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.
|
||||||
|
|
@ -17,7 +17,9 @@
|
||||||
package org.springframework.boot.autoconfigure.velocity;
|
package org.springframework.boot.autoconfigure.velocity;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.core.env.PropertyResolver;
|
||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
||||||
|
|
@ -34,12 +36,13 @@ public class VelocityTemplateAvailabilityProvider implements TemplateAvailabilit
|
||||||
public boolean isTemplateAvailable(String view, Environment environment,
|
public boolean isTemplateAvailable(String view, Environment environment,
|
||||||
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
||||||
if (ClassUtils.isPresent("org.apache.velocity.app.VelocityEngine", classLoader)) {
|
if (ClassUtils.isPresent("org.apache.velocity.app.VelocityEngine", classLoader)) {
|
||||||
String loaderPath = environment.getProperty(
|
PropertyResolver resolver = new RelaxedPropertyResolver(environment,
|
||||||
"spring.velocity.resourceLoaderPath",
|
"spring.velocity.");
|
||||||
|
String loaderPath = resolver.getProperty("resource-loader-path",
|
||||||
VelocityProperties.DEFAULT_RESOURCE_LOADER_PATH);
|
VelocityProperties.DEFAULT_RESOURCE_LOADER_PATH);
|
||||||
String prefix = environment.getProperty("spring.velocity.prefix",
|
String prefix = resolver.getProperty("prefix",
|
||||||
VelocityProperties.DEFAULT_PREFIX);
|
VelocityProperties.DEFAULT_PREFIX);
|
||||||
String suffix = environment.getProperty("spring.velocity.suffix",
|
String suffix = resolver.getProperty("suffix",
|
||||||
VelocityProperties.DEFAULT_SUFFIX);
|
VelocityProperties.DEFAULT_SUFFIX);
|
||||||
return resourceLoader.getResource(loaderPath + prefix + view + suffix)
|
return resourceLoader.getResource(loaderPath + prefix + view + suffix)
|
||||||
.exists();
|
.exists();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2014 the original author or authors.
|
* Copyright 2012-2015 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.
|
||||||
|
|
@ -17,7 +17,9 @@
|
||||||
package org.springframework.boot.autoconfigure.web;
|
package org.springframework.boot.autoconfigure.web;
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
|
||||||
|
import org.springframework.boot.bind.RelaxedPropertyResolver;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.core.env.PropertyResolver;
|
||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
||||||
|
|
@ -34,9 +36,11 @@ public class JspTemplateAvailabilityProvider implements TemplateAvailabilityProv
|
||||||
public boolean isTemplateAvailable(String view, Environment environment,
|
public boolean isTemplateAvailable(String view, Environment environment,
|
||||||
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
ClassLoader classLoader, ResourceLoader resourceLoader) {
|
||||||
if (ClassUtils.isPresent("org.apache.jasper.compiler.JspConfig", classLoader)) {
|
if (ClassUtils.isPresent("org.apache.jasper.compiler.JspConfig", classLoader)) {
|
||||||
String prefix = environment.getProperty("spring.view.prefix",
|
PropertyResolver resolver = new RelaxedPropertyResolver(environment,
|
||||||
|
"spring.view.");
|
||||||
|
String prefix = resolver.getProperty("prefix",
|
||||||
WebMvcAutoConfiguration.DEFAULT_PREFIX);
|
WebMvcAutoConfiguration.DEFAULT_PREFIX);
|
||||||
String suffix = environment.getProperty("spring.view.suffix",
|
String suffix = resolver.getProperty("suffix",
|
||||||
WebMvcAutoConfiguration.DEFAULT_SUFFIX);
|
WebMvcAutoConfiguration.DEFAULT_SUFFIX);
|
||||||
return resourceLoader.getResource(prefix + view + suffix).exists();
|
return resourceLoader.getResource(prefix + view + suffix).exists();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2014 the original author or authors.
|
* Copyright 2012-2015 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.
|
||||||
|
|
@ -52,9 +52,8 @@ public class FreeMarkerTemplateAvailabilityProviderTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void availabilityOfTemplateWithCustomLoaderPath() {
|
public void availabilityOfTemplateWithCustomLoaderPath() {
|
||||||
this.environment.setProperty("spring.freemarker.path",
|
this.environment.setProperty("spring.freemarker.template-loader-path",
|
||||||
"classpath:/custom-templates/");
|
"classpath:/custom-templates/");
|
||||||
|
|
||||||
assertTrue(this.provider.isTemplateAvailable("custom", this.environment,
|
assertTrue(this.provider.isTemplateAvailable("custom", this.environment,
|
||||||
getClass().getClassLoader(), this.resourceLoader));
|
getClass().getClassLoader(), this.resourceLoader));
|
||||||
}
|
}
|
||||||
|
|
@ -62,7 +61,6 @@ public class FreeMarkerTemplateAvailabilityProviderTests {
|
||||||
@Test
|
@Test
|
||||||
public void availabilityOfTemplateWithCustomPrefix() {
|
public void availabilityOfTemplateWithCustomPrefix() {
|
||||||
this.environment.setProperty("spring.freemarker.prefix", "prefix/");
|
this.environment.setProperty("spring.freemarker.prefix", "prefix/");
|
||||||
|
|
||||||
assertTrue(this.provider.isTemplateAvailable("prefixed", this.environment,
|
assertTrue(this.provider.isTemplateAvailable("prefixed", this.environment,
|
||||||
getClass().getClassLoader(), this.resourceLoader));
|
getClass().getClassLoader(), this.resourceLoader));
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +68,6 @@ public class FreeMarkerTemplateAvailabilityProviderTests {
|
||||||
@Test
|
@Test
|
||||||
public void availabilityOfTemplateWithCustomSuffix() {
|
public void availabilityOfTemplateWithCustomSuffix() {
|
||||||
this.environment.setProperty("spring.freemarker.suffix", ".freemarker");
|
this.environment.setProperty("spring.freemarker.suffix", ".freemarker");
|
||||||
|
|
||||||
assertTrue(this.provider.isTemplateAvailable("suffixed", this.environment,
|
assertTrue(this.provider.isTemplateAvailable("suffixed", this.environment,
|
||||||
getClass().getClassLoader(), this.resourceLoader));
|
getClass().getClassLoader(), this.resourceLoader));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2014 the original author or authors.
|
* Copyright 2012-2015 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.
|
||||||
|
|
@ -54,7 +54,6 @@ public class VelocityTemplateAvailabilityProviderTests {
|
||||||
public void availabilityOfTemplateWithCustomLoaderPath() {
|
public void availabilityOfTemplateWithCustomLoaderPath() {
|
||||||
this.environment.setProperty("spring.velocity.resourceLoaderPath",
|
this.environment.setProperty("spring.velocity.resourceLoaderPath",
|
||||||
"classpath:/custom-templates/");
|
"classpath:/custom-templates/");
|
||||||
|
|
||||||
assertTrue(this.provider.isTemplateAvailable("custom", this.environment,
|
assertTrue(this.provider.isTemplateAvailable("custom", this.environment,
|
||||||
getClass().getClassLoader(), this.resourceLoader));
|
getClass().getClassLoader(), this.resourceLoader));
|
||||||
}
|
}
|
||||||
|
|
@ -62,7 +61,6 @@ public class VelocityTemplateAvailabilityProviderTests {
|
||||||
@Test
|
@Test
|
||||||
public void availabilityOfTemplateWithCustomPrefix() {
|
public void availabilityOfTemplateWithCustomPrefix() {
|
||||||
this.environment.setProperty("spring.velocity.prefix", "prefix/");
|
this.environment.setProperty("spring.velocity.prefix", "prefix/");
|
||||||
|
|
||||||
assertTrue(this.provider.isTemplateAvailable("prefixed", this.environment,
|
assertTrue(this.provider.isTemplateAvailable("prefixed", this.environment,
|
||||||
getClass().getClassLoader(), this.resourceLoader));
|
getClass().getClassLoader(), this.resourceLoader));
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +68,6 @@ public class VelocityTemplateAvailabilityProviderTests {
|
||||||
@Test
|
@Test
|
||||||
public void availabilityOfTemplateWithCustomSuffix() {
|
public void availabilityOfTemplateWithCustomSuffix() {
|
||||||
this.environment.setProperty("spring.velocity.suffix", ".freemarker");
|
this.environment.setProperty("spring.velocity.suffix", ".freemarker");
|
||||||
|
|
||||||
assertTrue(this.provider.isTemplateAvailable("suffixed", this.environment,
|
assertTrue(this.provider.isTemplateAvailable("suffixed", this.environment,
|
||||||
getClass().getClassLoader(), this.resourceLoader));
|
getClass().getClassLoader(), this.resourceLoader));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue