Commit Graph

1176 Commits

Author SHA1 Message Date
Stephane Nicoll
6578239f67 Fix binding of Collection of enum
As there is no way to copy all the converters of a `ConversionService` to
another, `RelaxedConversionService` uses a fallback `ConversionService`
when the user-provided one failed.

That fallback is taking care of converting `String` to `Enum` in a case
insensitive way but it has no registered converter to convert a comma
separated String to a collection of something.

Ironically, our current test suite has plenty of cases where we map a
`String` to  a collection of enums and they all pass. This is because
the tests do not provide a custom `ConverterService` so we end up
immediately in the fallback scenario. Since no converter is able to
convert the String to a collection, the property editor support of the
binder takes care of that for us and try to convert each individual
value.

In a regular use case however, a `ConversionService` is provided and
fails to map the collection if the String value(s) don't have the exact
same case as the annotations they represent. Since the original
`ConversionService` has claimed it was able to convert a collection,
the raw `String` value is passed to the fallback converter and that one
fails to convert the raw String.

The fallback converter now registers the necessary converters to
convert collections. Additional tests have been added to test that in
a more explicit way.

Closes gh-4322
2015-10-29 10:29:54 +01:00
Stephane Nicoll
3740c817d3 Ensure that @ConfigurationProperties is mandatory
Previously it was possible to bind a bean to the root prefix by just
adding `@EnableConfigurationProperties` with the class of said bean.

 This use case is misleading and prevents any meta-data to be generated
 for that object since the annotation processor reacts on the presence of
 the `@ConfigurationProperties` annotation.

 If a class is included in the list of configuration properties bean to
 create via the `@EnableConfigurationProperties` annotation we now make
 sure that the `@configurationProperties` annotation is present on it.

 Closes gh-3460
2015-10-28 20:12:13 +01:00
Stephane Nicoll
6491eafc4a Polish doc
`ConfigFileEnvironmentPostProcessor` was renamed to
`ConfigFileApplicationListener`.

See gh-4258
2015-10-28 20:07:45 +01:00
Andy Wilkinson
833aac2b26 Drive EnvironmentPostProcessors from ConfigFileApplicationListener
Previously, ConfigFileApplicationListener was listed in spring.factories
as both an EnvironmentPostProcessor and an ApplicationListener. This
was problematic as ConfigFileApplicationListener is stateful and listing
it twice lead to two separate instances with separate state.

This commit restore ConfigFileApplicationListener to only being an
ApplicationListener. The driving of EnvironmentPostProcessors that was
performed by EnvironmentPostProcessingApplicationListener is now
performed by ConfigFileApplicationListener which adds itself as an
EnvironmentPostProcessor. This ensures that there’s only a single
instance of ConfigFileApplicationListener, allowing its state to be
managed correctly.

Closes gh-4258
2015-10-28 18:58:19 +00:00
Andy Wilkinson
8ed472d6f9 Update logging listener to use normal stack trace ordering by default
Previously, LoggingApplicationListener used %rEx as the default
exception conversion word. This would result in the nested causes
being logging in reverse order, i.e. the most deeply nested cause
would be logged first.

This commit updates the default to be %wEx and adds a test to verify
the default behaviour.

Closes gh-4247
2015-10-28 14:07:06 +00:00
Stephane Nicoll
954d137210 Reduce code duplication 2015-10-28 11:57:59 +01:00
Andy Wilkinson
d29d73d38e Keep javac happy by making variable explicitly final 2015-10-27 13:49:18 +00:00
Andy Wilkinson
89f8af4e6e Make the configuration of the document root consistent across containers
Previously, if getValidDocumentRoot() returned null, only the embedded
Tomcat container would use a temporary directory. This left Jetty and
Undertow unable to provide a URL for the root of the servlet context,
i.e. servletContext.getResource("/") would return null.

This commit updates the embedded containers for Jetty and Undertow to
behave in the same way as Tomcat. A test has been added to verify that
all three containers can produce a non-null URL for the root of the
servlet context.

Closes gh-2878
2015-10-27 13:41:52 +00:00
Andy Wilkinson
d9d4cc2ef5 Ensure request context is setup before security filter runs
Previously, OrderedRequestContextFilter was ordered such that it
ran after Spring Security's Filter. This meant that the request
context was unavailable to any Filters in Spring Security's Filter
chain. Specifically, this caused a failure when using @EnableOAuth2Sso
as OAuth2ClientAuthenticationProcessingFilter, which is added to
Spring Security's Filter chain would be unable to use the
request-scoped bean upon which it depends.

This commit updates the order of OrderedRequestContextFilter so that
the request context is set up before Spring Security's Filter runs.
The tests for SampleGitHubApplication have been updated to use
TestRestTemplate rather than MockMvc. This is necessary as the latter,
via ServletTestExecutionListener, automatically populates the request
context holder, masking the fact that the request context filter was
setting it up too late.

Closes gh-4270
2015-10-27 10:56:55 +00:00
Andy Wilkinson
56334b48f6 Improve testing of shutdown handler registration 2015-10-27 09:57:10 +00:00
Johnny Lim
180815445c Fix registration of shutdown handler as a shutdown hook
Closes gh-4311
2015-10-27 09:57:10 +00:00
Johnny Lim
396bea22b9 Polish docs
See gh-4309
2015-10-27 08:58:12 +01:00
Stephane Nicoll
2431767c81 Register the LoggingSystem in the ApplicationContext
Closes gh-4159
2015-10-26 15:01:54 +01:00
Johnny Lim
e477598cc6 Fix broken links
Closes gh-4272
2015-10-22 17:45:35 +02:00
Stephane Nicoll
c0b8974bc0 Merge branch '1.2.x' 2015-10-22 17:42:22 +02:00
Stephane Nicoll
7c1bf58262 Filter duplicate
Improve the initial PR to include a filtering of the profiles that were
already enabled via the `spring.profiles.active` property.

Also add more tests to prove that each profile is loaded only once
now.

Closes gh-4273
2015-10-22 17:19:56 +02:00
Dave Syer
06bb6bd1e1 Fix logic affecting files loaded
The problem fixed here is that the Loader keeps track of the profiles it
is going to look at for loading files, but ignores any that were already
active in the Environment if the listener is called initially with
spring.profiles.active not empty.

Closes gh-4261
2015-10-22 16:57:06 +02:00
Johnny Lim
a1e210f578 Fix error messages
Closes gh-4265
2015-10-22 09:26:32 +02:00
Johnny Lim
300387d995 Replace Base64Encoder with Base64Utils
Replace the custom Base64Encoder class with Spring's Base64Utils which
since 4.2 can encode bytes using Java 8's encoder, commons-digest or
Java 6's JAX-B encoder.

Closes gh-4189
2015-10-20 16:12:56 -07:00
Phillip Webb
eeb407881a Restore "exception first" logging
Effectively revert commit b396d0d2 to restore exception first logging
of exceptions for Logback and Log4j2.

This commit also introduces new extended versions of "whitespace"
padding exception loggers so that source jar information is still
included in the stacktrace.

Fixes gh-4247
2015-10-20 15:33:34 -07:00
Phillip Webb
88cc883e94 Refine RequestContextFilter order
Use an order relative to REQUEST_WRAPPER_FILTER_MAX_ORDER.

Closes gh-2637
2015-10-20 14:46:09 -07:00
Phillip Webb
15fbb8ddf9 Polish 2015-10-20 13:57:21 -07:00
Stephane Nicoll
6a18fa072f Fix import ordering 2015-10-20 21:25:50 +02:00
Dave Syer
90ddd857f4 Add support for binding to Properties in @ConfigurationProperties
Fixes gh-4250
2015-10-20 15:11:21 -04:00
Andy Wilkinson
b76414002a Merge branch '1.2.x' 2015-10-20 18:19:51 +01:00
Andy Wilkinson
ee93307402 Align the mime mapping configuration across all three embedded containers
Closes gh-4161
2015-10-20 17:46:01 +01:00
Phillip Webb
89fe0794a9 Switch RequestContextListener to Filter
Update WebMvcAutoConfiguration to use a RequestContextFilter instead of
a RequestContextListener.

Using a filter is required for some Spring Session operations (see
https://github.com/spring-projects/spring-session/issues/129).

This update also has the added benefit of allowing the Response to be
accessed from RequestContextHolder.getRequestAttributes() by casting it
to ServletRequestAttributes.

Fixes gh-2637
2015-10-19 16:05:37 -07:00
Phillip Webb
90f7bc0321 Polish 2015-10-19 13:04:06 -07:00
Phillip Webb
634bb770b2 Organize imports with new settings
See gh-4234
2015-10-19 12:58:34 -07:00
Phillip Webb
1e4d974ec0 Merge remote-tracking branch 'local12x/1.2.x' 2015-10-19 12:56:55 -07:00
Phillip Webb
a79131f8d2 Organize imports with new settings
See gh-4234
2015-10-19 12:55:44 -07:00
Stephane Nicoll
aeec1713eb Fix checkstyle violations 2015-10-19 14:42:11 +02:00
Stephane Nicoll
32b32b7142 Notify the use of logback specific system property
Logback documentation explains how to initialize the logging system and
namely how the `logback.configurationFile` system property can be used to
specify the configuration file to use.

Spring Boot has an abstraction on top of that. A user can define the
`logging.path` property regardless of the logging infrastructure it is
using.

Users following the logback documentation can be confused at first so
we're not logging a warning when we found out that the logback specific
property has been specified.

Closes gh-2382
2015-10-19 14:37:12 +02:00
Johnny Lim
cfaf813da8 Remove unnecessary statement
Closes gh-4222
2015-10-18 09:25:19 +02:00
Spring Buildmaster
2b38a861e3 Next Development Version 2015-10-16 05:57:24 -07:00
Andy Wilkinson
f8cffd745c Merge branch '1.2.x' 2015-10-16 10:42:26 +01:00
Andy Wilkinson
35a3f4a1c0 Reinstate the use of shutdown hooks in the tests
Commit adf2c44b was an attempt to prevent HSQLDB from throwing an
exception when the JVM exits. This was achieved by disabling the
application context’s shutdown hook in the tests. This had the unwanted
side effect of causing tests’ application contexts not to be closed. The
reported symptom was that @Destroy methods were no longer being invoked.
We need a different solution to the problem.

The exception was:

Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: attempt to connect while db opening /closing
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
    at org.hsqldb.DatabaseManager.newSession(Unknown Source)
    ... 23 common frames omitted

I originally thought this was due to a race between the application
context’s shutdown hook and HSQLDB’s shutdown hook, however HSQLDB
doesn’t use a shutdown hook. I believe that the problem is due to 
an HSQLDB database being created with shutdown=true in its URL, similar
to the problem described here [1]. This will shut down the database when
the last connection to it is closed, however the shutdown will happen
asynchronously. If the JVM then runs the application context’s shutdown
hook, EmbeddedDatabaseFactory will attempt to connect to the database to
execute the SHUTDOWN command. This executes synchronously but will race
with the asynchronous shutdown that’s executing as a result of
shutdown=true in the JDBC url and the last connection to the database
being closed. 

This commit reinstates the use of application context shutdown hooks in
the tests, and updates the documentation to recommend that, if a user
manually configures the URL for their embedded database, they do so 
in such a way that the database doesn’t shutdown automatically, thereby
allowing the shutdown to be driven by application context close.

Closes gh-4208

[1] http://sourceforge.net/p/hsqldb/bugs/1400/
2015-10-16 10:36:20 +01:00
Phillip Webb
5392c0a52b Merge remote-tracking branch 'springsource/1.2.x' 2015-10-15 21:52:28 -07:00
Phillip Webb
84305825e7 Throw EmbeddedContainerExceptions from Tomcat
Wrap Tomcat start errors in EmbeddedContainerException.

Fixes gh-4204
2015-10-15 17:51:18 -07:00
Phillip Webb
5a84c02b08 Throw EmbeddedContainerExceptions from Undertow
Wrap Undertow start errors in EmbeddedContainerException.

Fixes gh-4205
2015-10-15 17:49:40 -07:00
Phillip Webb
c804299c8d Prevent Undertow from exposing classpath files
Update `UndertowEmbeddedServletContainerFactory` so that the
`ClassPathResourceManager` is no longer registered by default.

Prior to this commit the resource manager would be registered whenever
a valid document root could not be found. This had the effect of
exposing all classpath files.

Fixes gh-4015
2015-10-15 16:02:41 -07:00
Phillip Webb
676ff75d9d Polish 2015-10-15 15:30:18 -07:00
Phillip Webb
e0f62308bc Defer SpringBootServletInitializer getLog
Change `SpringBootServletInitializer` so that the logger is created
in `onStartup` rather than on class creation. The allows logging to
be initialized in an different WebApplicationInitializer.

Fixes gh-3704
2015-10-14 23:37:20 -07:00
Phillip Webb
eef5e18eec Rename AppliationTemp.getFolder() to getDir()
Update ApplicationTemp so that `dir` is used in preference to `folder`.
This better aligns with the existing ApplicationHome class.

Fixes gh-4192
2015-10-14 23:01:49 -07:00
Phillip Webb
922f8b6ba6 Add server.session.store-dir support
Add support for a `server.session.store-dir` property which can be used
to specify where session data source be saved.

Fixes gh-4191
2015-10-14 22:56:01 -07:00
Phillip Webb
1a764d9c06 Default Tomcat to not save SESSIONS.ser file
Update TomcatEmbeddedServletContainerFactory so that session data isn't
serialized by default. Prior to this commit the SESSIONS.ser file would
either be written to `/tmp` or into `baseDir` (if one was set).

By not saving session data we align Tomcat with the other embedded
servlet containers and reduce the risk of sensitive information being
left in `/tmp`.

Fixes gh-4156
2015-10-14 21:30:19 -07:00
Stephane Nicoll
06c78a41cd Document that ConfigurationProperties can't use SpEL
Closes gh-1768
2015-10-14 14:36:33 +02:00
Phillip Webb
a3f978793e Add DelegatingFilterProxyRegistrationBean
Add a RegistrationBean that can be used to create DelegatingFilterProxy
filters that don't cause early initialization.

Fixes gh-4165
2015-10-13 23:09:09 -07:00
Phillip Webb
c6bf13c0a1 Support multi-profile YAML in application-* files
Update ConfigFileEnvironmentPostProcessor to load profile specific
sections for all previously processed profiles. Prior to this commit
multi-profile YAML files were only loaded from the root
`application.yml` file.

With the updated logic, an `application-test.yml` file containing the
following:

	someTestProperty: xyz
	---
	spring:
	  profiles: profile1
	  specificProperty: one

Can have the profile sub-document loaded using:

	-Dspring.profiles.active=test,profile1

Fixes gh-4132
2015-10-12 16:25:54 -07:00
Andy Wilkinson
8ee8c9fe90 Merge branch '1.2.x' 2015-10-12 14:12:20 +01:00