Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
6564fb3d
Commit
6564fb3d
authored
Apr 10, 2017
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Consider all loader paths when checking template availability
Closes gh-8842
parent
caf30e3d
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
188 additions
and
39 deletions
+188
-39
FreeMarkerTemplateAvailabilityProvider.java
...re/freemarker/FreeMarkerTemplateAvailabilityProvider.java
+54
-12
GroovyTemplateAvailabilityProvider.java
...e/groovy/template/GroovyTemplateAvailabilityProvider.java
+53
-12
VelocityTemplateAvailabilityProvider.java
...figure/velocity/VelocityTemplateAvailabilityProvider.java
+55
-13
FreeMarkerTemplateAvailabilityProviderTests.java
...eemarker/FreeMarkerTemplateAvailabilityProviderTests.java
+9
-1
GroovyTemplateAvailabilityProviderTests.java
...ovy/template/GroovyTemplateAvailabilityProviderTests.java
+8
-0
VelocityTemplateAvailabilityProviderTests.java
...e/velocity/VelocityTemplateAvailabilityProviderTests.java
+9
-1
No files found.
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerTemplateAvailabilityProvider.java
View file @
6564fb3d
/*
* Copyright 2012-201
5
the original author or authors.
* Copyright 2012-201
7
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,8 +16,14 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
freemarker
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider
;
import
org.springframework.boot.bind.RelaxedPropertyResolver
;
import
org.springframework.boot.bind.PropertySourcesPropertyValues
;
import
org.springframework.boot.bind.RelaxedDataBinder
;
import
org.springframework.core.env.ConfigurableEnvironment
;
import
org.springframework.core.env.Environment
;
import
org.springframework.core.io.ResourceLoader
;
import
org.springframework.util.ClassUtils
;
...
...
@@ -36,18 +42,54 @@ public class FreeMarkerTemplateAvailabilityProvider
public
boolean
isTemplateAvailable
(
String
view
,
Environment
environment
,
ClassLoader
classLoader
,
ResourceLoader
resourceLoader
)
{
if
(
ClassUtils
.
isPresent
(
"freemarker.template.Configuration"
,
classLoader
))
{
RelaxedPropertyResolver
resolver
=
new
RelaxedPropertyResolver
(
environment
,
"spring.freemarker."
);
String
loaderPath
=
resolver
.
getProperty
(
"template-loader-path"
,
FreeMarkerProperties
.
DEFAULT_TEMPLATE_LOADER_PATH
);
String
prefix
=
resolver
.
getProperty
(
"prefix"
,
FreeMarkerProperties
.
DEFAULT_PREFIX
);
String
suffix
=
resolver
.
getProperty
(
"suffix"
,
FreeMarkerProperties
.
DEFAULT_SUFFIX
);
return
resourceLoader
.
getResource
(
loaderPath
+
prefix
+
view
+
suffix
)
.
exists
();
FreeMarkerTemplateAvailabilityProperties
properties
=
new
FreeMarkerTemplateAvailabilityProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
properties
,
"spring.freemarker"
);
binder
.
bind
(
new
PropertySourcesPropertyValues
(
((
ConfigurableEnvironment
)
environment
).
getPropertySources
()));
for
(
String
loaderPath
:
properties
.
getTemplateLoaderPath
())
{
if
(
resourceLoader
.
getResource
(
loaderPath
+
properties
.
getPrefix
()
+
view
+
properties
.
getSuffix
()).
exists
())
{
return
true
;
}
}
}
return
false
;
}
static
final
class
FreeMarkerTemplateAvailabilityProperties
{
private
List
<
String
>
templateLoaderPath
=
new
ArrayList
<
String
>(
Arrays
.
asList
(
FreeMarkerProperties
.
DEFAULT_TEMPLATE_LOADER_PATH
));
private
String
prefix
=
FreeMarkerProperties
.
DEFAULT_PREFIX
;
private
String
suffix
=
FreeMarkerProperties
.
DEFAULT_SUFFIX
;
public
List
<
String
>
getTemplateLoaderPath
()
{
return
this
.
templateLoaderPath
;
}
public
void
setTemplateLoaderPath
(
List
<
String
>
templateLoaderPath
)
{
this
.
templateLoaderPath
=
templateLoaderPath
;
}
public
String
getPrefix
()
{
return
this
.
prefix
;
}
public
void
setPrefix
(
String
prefix
)
{
this
.
prefix
=
prefix
;
}
public
String
getSuffix
()
{
return
this
.
suffix
;
}
public
void
setSuffix
(
String
suffix
)
{
this
.
suffix
=
suffix
;
}
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProvider.java
View file @
6564fb3d
...
...
@@ -16,10 +16,15 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
groovy
.
template
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider
;
import
org.springframework.boot.bind.RelaxedPropertyResolver
;
import
org.springframework.boot.bind.PropertySourcesPropertyValues
;
import
org.springframework.boot.bind.RelaxedDataBinder
;
import
org.springframework.core.env.ConfigurableEnvironment
;
import
org.springframework.core.env.Environment
;
import
org.springframework.core.env.PropertyResolver
;
import
org.springframework.core.io.ResourceLoader
;
import
org.springframework.util.ClassUtils
;
...
...
@@ -36,18 +41,54 @@ public class GroovyTemplateAvailabilityProvider implements TemplateAvailabilityP
public
boolean
isTemplateAvailable
(
String
view
,
Environment
environment
,
ClassLoader
classLoader
,
ResourceLoader
resourceLoader
)
{
if
(
ClassUtils
.
isPresent
(
"groovy.text.TemplateEngine"
,
classLoader
))
{
PropertyResolver
resolver
=
new
RelaxedPropertyResolver
(
environment
,
"spring.groovy.template."
);
String
loaderPath
=
resolver
.
getProperty
(
"resource-loader-path"
,
GroovyTemplateProperties
.
DEFAULT_RESOURCE_LOADER_PATH
);
String
prefix
=
resolver
.
getProperty
(
"prefix"
,
GroovyTemplateProperties
.
DEFAULT_PREFIX
);
String
suffix
=
resolver
.
getProperty
(
"suffix"
,
GroovyTemplateProperties
.
DEFAULT_SUFFIX
);
return
resourceLoader
.
getResource
(
loaderPath
+
prefix
+
view
+
suffix
)
.
exists
();
GroovyTemplateAvailabilityProperties
properties
=
new
GroovyTemplateAvailabilityProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
properties
,
"spring.groovy.template"
);
binder
.
bind
(
new
PropertySourcesPropertyValues
(
((
ConfigurableEnvironment
)
environment
).
getPropertySources
()));
for
(
String
loaderPath
:
properties
.
getResourceLoaderPath
())
{
if
(
resourceLoader
.
getResource
(
loaderPath
+
properties
.
getPrefix
()
+
view
+
properties
.
getSuffix
()).
exists
())
{
return
true
;
}
}
}
return
false
;
}
static
final
class
GroovyTemplateAvailabilityProperties
{
private
List
<
String
>
resourceLoaderPath
=
new
ArrayList
<
String
>(
Arrays
.
asList
(
GroovyTemplateProperties
.
DEFAULT_RESOURCE_LOADER_PATH
));
private
String
prefix
=
GroovyTemplateProperties
.
DEFAULT_PREFIX
;
private
String
suffix
=
GroovyTemplateProperties
.
DEFAULT_SUFFIX
;
public
List
<
String
>
getResourceLoaderPath
()
{
return
this
.
resourceLoaderPath
;
}
public
void
setResourceLoaderPath
(
List
<
String
>
resourceLoaderPath
)
{
this
.
resourceLoaderPath
=
resourceLoaderPath
;
}
public
String
getPrefix
()
{
return
this
.
prefix
;
}
public
void
setPrefix
(
String
prefix
)
{
this
.
prefix
=
prefix
;
}
public
String
getSuffix
()
{
return
this
.
suffix
;
}
public
void
setSuffix
(
String
suffix
)
{
this
.
suffix
=
suffix
;
}
}
}
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/velocity/VelocityTemplateAvailabilityProvider.java
View file @
6564fb3d
/*
* Copyright 2012-201
6
the original author or authors.
* Copyright 2012-201
7
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,10 +16,15 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
velocity
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider
;
import
org.springframework.boot.bind.RelaxedPropertyResolver
;
import
org.springframework.boot.bind.PropertySourcesPropertyValues
;
import
org.springframework.boot.bind.RelaxedDataBinder
;
import
org.springframework.core.env.ConfigurableEnvironment
;
import
org.springframework.core.env.Environment
;
import
org.springframework.core.env.PropertyResolver
;
import
org.springframework.core.io.ResourceLoader
;
import
org.springframework.util.ClassUtils
;
...
...
@@ -40,18 +45,55 @@ public class VelocityTemplateAvailabilityProvider
public
boolean
isTemplateAvailable
(
String
view
,
Environment
environment
,
ClassLoader
classLoader
,
ResourceLoader
resourceLoader
)
{
if
(
ClassUtils
.
isPresent
(
"org.apache.velocity.app.VelocityEngine"
,
classLoader
))
{
PropertyResolver
resolver
=
new
RelaxedPropertyResolver
(
environment
,
"spring.velocity."
);
String
loaderPath
=
resolver
.
getProperty
(
"resource-loader-path"
,
VelocityProperties
.
DEFAULT_RESOURCE_LOADER_PATH
);
String
prefix
=
resolver
.
getProperty
(
"prefix"
,
VelocityProperties
.
DEFAULT_PREFIX
);
String
suffix
=
resolver
.
getProperty
(
"suffix"
,
VelocityProperties
.
DEFAULT_SUFFIX
);
return
resourceLoader
.
getResource
(
loaderPath
+
prefix
+
view
+
suffix
)
.
exists
();
VelocityTemplateAvailabilityProperties
properties
=
new
VelocityTemplateAvailabilityProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
properties
,
"spring.velocity"
);
binder
.
bind
(
new
PropertySourcesPropertyValues
(
((
ConfigurableEnvironment
)
environment
).
getPropertySources
()));
for
(
String
path
:
properties
.
getResourceLoaderPath
())
{
if
(
resourceLoader
.
getResource
(
path
+
properties
.
getPrefix
()
+
view
+
properties
.
getSuffix
())
.
exists
())
{
return
true
;
}
}
}
return
false
;
}
static
class
VelocityTemplateAvailabilityProperties
{
private
List
<
String
>
resourceLoaderPath
=
new
ArrayList
<
String
>(
Arrays
.
asList
(
VelocityProperties
.
DEFAULT_RESOURCE_LOADER_PATH
));
private
String
prefix
=
VelocityProperties
.
DEFAULT_PREFIX
;
private
String
suffix
=
VelocityProperties
.
DEFAULT_SUFFIX
;
public
List
<
String
>
getResourceLoaderPath
()
{
return
this
.
resourceLoaderPath
;
}
public
void
setResourceLoaderPath
(
List
<
String
>
resourceLoaderPath
)
{
this
.
resourceLoaderPath
=
resourceLoaderPath
;
}
public
String
getPrefix
()
{
return
this
.
prefix
;
}
public
void
setPrefix
(
String
prefix
)
{
this
.
prefix
=
prefix
;
}
public
String
getSuffix
()
{
return
this
.
suffix
;
}
public
void
setSuffix
(
String
suffix
)
{
this
.
suffix
=
suffix
;
}
}
}
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/freemarker/FreeMarkerTemplateAvailabilityProviderTests.java
View file @
6564fb3d
/*
* Copyright 2012-201
6
the original author or authors.
* Copyright 2012-201
7
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.
...
...
@@ -58,6 +58,14 @@ public class FreeMarkerTemplateAvailabilityProviderTests {
getClass
().
getClassLoader
(),
this
.
resourceLoader
)).
isTrue
();
}
@Test
public
void
availabilityOfTemplateWithCustomLoaderPathConfiguredAsAList
()
{
this
.
environment
.
setProperty
(
"spring.freemarker.template-loader-path[0]"
,
"classpath:/custom-templates/"
);
assertThat
(
this
.
provider
.
isTemplateAvailable
(
"custom"
,
this
.
environment
,
getClass
().
getClassLoader
(),
this
.
resourceLoader
)).
isTrue
();
}
@Test
public
void
availabilityOfTemplateWithCustomPrefix
()
{
this
.
environment
.
setProperty
(
"spring.freemarker.prefix"
,
"prefix/"
);
...
...
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProviderTests.java
View file @
6564fb3d
...
...
@@ -58,6 +58,14 @@ public class GroovyTemplateAvailabilityProviderTests {
getClass
().
getClassLoader
(),
this
.
resourceLoader
)).
isTrue
();
}
@Test
public
void
availabilityOfTemplateWithCustomLoaderPathConfiguredAsAList
()
{
this
.
environment
.
setProperty
(
"spring.groovy.template.resource-loader-path[0]"
,
"classpath:/custom-templates/"
);
assertThat
(
this
.
provider
.
isTemplateAvailable
(
"custom"
,
this
.
environment
,
getClass
().
getClassLoader
(),
this
.
resourceLoader
)).
isTrue
();
}
@Test
public
void
availabilityOfTemplateWithCustomPrefix
()
{
this
.
environment
.
setProperty
(
"spring.groovy.template.prefix"
,
"prefix/"
);
...
...
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/velocity/VelocityTemplateAvailabilityProviderTests.java
View file @
6564fb3d
/*
* Copyright 2012-201
6
the original author or authors.
* Copyright 2012-201
7
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.
...
...
@@ -59,6 +59,14 @@ public class VelocityTemplateAvailabilityProviderTests {
getClass
().
getClassLoader
(),
this
.
resourceLoader
)).
isTrue
();
}
@Test
public
void
availabilityOfTemplateWithCustomLoaderPathConfiguredAsAList
()
{
this
.
environment
.
setProperty
(
"spring.velocity.resource-loader-path[0]"
,
"classpath:/custom-templates/"
);
assertThat
(
this
.
provider
.
isTemplateAvailable
(
"custom"
,
this
.
environment
,
getClass
().
getClassLoader
(),
this
.
resourceLoader
)).
isTrue
();
}
@Test
public
void
availabilityOfTemplateWithCustomPrefix
()
{
this
.
environment
.
setProperty
(
"spring.velocity.prefix"
,
"prefix/"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment