Compare commits

...

3716 Commits

Author SHA1 Message Date
Spring Buildmaster 66c295ef22 Release version 5.2.0.M1 2019-04-10 08:41:39 +00:00
Brian Clozel 0f76acc945 Update project page URL 2019-04-10 10:04:29 +02:00
Rossen Stoyanchev d707d382b4 Merge branch '5.1.x' 2019-04-09 22:38:15 -04:00
Rossen Stoyanchev 28e206a946 Apply doOnDiscard for streaming mode
Use of Flux.just is problematic in that if the Flux is cancelled before
demand, the item may never be read, nor freed. Flux#just does not
even delegate cancellation signals.

Closes gh-22731
2019-04-09 22:30:26 -04:00
Rossen Stoyanchev b11e7feff6 Polish during review of DataBuffer handling 2019-04-09 22:19:05 -04:00
Sebastien Deleuze 849a848f23 Polishing 2019-04-10 00:32:20 +02:00
Sebastien Deleuze 66c95dc241 Clear spring-core-coroutines artifacts 2019-04-09 23:54:22 +02:00
Sebastien Deleuze ff1f368751 Improve Kotlin documentation 2019-04-09 23:54:22 +02:00
Rossen Stoyanchev bd956ed75a DataBuffer fixes in Protobuf codecs
Closes gh-22731
2019-04-09 17:00:26 -04:00
Brian Clozel cd69a4a03b Support DestinationVariable on RSocket handlers
Prior to this commit, the pattern destination variables were not set in
the message headers prior to calling the handler. In this case, the
`DestinationVariableMethodArgumentResolver` could not get the
destination variables from the message headers and resolve those as
handler arguments.

This commit mutates the message headers if the message destination
contains patterns.

Fixes gh-22776
2019-04-09 22:56:08 +02:00
Rossen Stoyanchev a0826a20c3 CorsInterceptor at the front of the chain
Closes gh-22459
2019-04-09 15:43:43 -04:00
Rossen Stoyanchev d1f888a7a9 Empty path mapping behaves consistently
An empty path mapping in an @RequestMapping now consistently matches to
empty paths regardless of whether there are both type and method level,
annotations, or method-level only.

Closes gh-22543
2019-04-09 15:03:43 -04:00
Rossen Stoyanchev f839c1f9cd Remove warning about empty @RequestMapping path
See gh-22543
2019-04-09 15:03:43 -04:00
Sam Brannen 5b17bb2e14 Polish Javadoc for @Scheduled 2019-04-09 19:12:06 +02:00
P. Ottlinger 85597f29f2 Improve @Scheduled Javadoc regarding cron element order
Closes gh-22777
2019-04-09 19:03:30 +02:00
Juergen Hoeller eb971690d2 Merge branch '5.1.x' 2019-04-09 18:09:20 +02:00
Juergen Hoeller 2835424f9d Jackson2Tokenizer creates fully configured DeserializationContext
Closes gh-22510
2019-04-09 17:59:10 +02:00
stsypanov 604361ee1f Use concatenation instead of torn StringBuilder::append chain 2019-04-09 13:23:22 +02:00
Sebastien Deleuze cd0b517abf Improve Kotlin documentation 2019-04-09 12:28:00 +02:00
Sam Brannen 80ad60e91b Fix Javadoc for @Value 2019-04-09 11:30:59 +02:00
Sam Brannen 85f05023c6 Pull WebFlux getMappingPathPatterns() implementation up in the hierarchy
This commit moves the WebFlux getMappingPathPatterns() implementation
from RequestMappingHandlerMapping to
RequestMappingInfoHandlerMapping so that subclasses of the latter no
longer need to re-implement the method.

See gh-22543
2019-04-09 10:58:04 +02:00
Juergen Hoeller dc14ea86eb Fix regression for nested AnnotationAttributes.annotationType() result
See gh-22738
2019-04-09 09:40:53 +02:00
Rossen Stoyanchev 0a03d8e248 Upgrade to RSocket 0.12.1-RC3 and update tests
1) Tests use a timeout to avoid hanging issues
2) Some tests adjusted to work around potential rsocket-java issue
https://github.com/rsocket/rsocket-java/issues/613
2019-04-08 23:52:04 -04:00
Juergen Hoeller c8609b83b6 Merge branch '5.1.x' 2019-04-08 20:19:03 +02:00
Juergen Hoeller 1cd1e936c2 Upgrade to Checkstyle 8.19, Mockito 2.26, Undertow 2.0.20 2019-04-08 19:59:24 +02:00
Juergen Hoeller 4ec9aff01d Polishing 2019-04-08 19:59:06 +02:00
Juergen Hoeller d1303affc8 Avoid expensive Stream API usage in HttpRange
See gh-22742
2019-04-08 19:42:21 +02:00
ladislav-bozek 4d17eb4f0e Fix typo in JavaDoc for UrlPathHelper.setUrlDecode()
Closes gh22768
2019-04-08 17:37:59 +02:00
Sam Brannen b115789fd3 Polishing 2019-04-08 17:28:44 +02:00
Sam Brannen 9a93615ec4 Configure Kotlin plugin support for Eclipse in Gradle build
This commit configures the Kotlin plugin for Eclipse in the
spring-core-coroutines Gradle project so that users no longer have to
manually "Configure Kotlin / Add Kotlin Nature" within the Eclipse IDE
after importing projects.

This change is currently limited to the spring-core-coroutines project
since it is the only project in which Java code depends on compiled
Kotlin code; however, this change may later be applied to additional
projects if desirable.
2019-04-08 17:20:24 +02:00
Sam Brannen bd414df944 Remove JMXMP from TestGroup
Due to the changes in a7425c81c0, we no
longer need to execute tests using the JMXMP protocol in PERFORMANCE
builds.

This commit removes the JMXMP constant from the TestGroup enum and
updates affected tests, thereby effectively including such tests in
the standard build from now on.

See gh-22757
2019-04-08 17:05:16 +02:00
Juergen Hoeller fd8fa301a6 Consistent non-exposure of inherited annotations in AnnotationMetadata
Closes gh-22766
2019-04-08 15:59:06 +02:00
Sebastien Deleuze 2e7ed915cd Merge branch '5.1.x' 2019-04-08 15:46:47 +02:00
Sebastien Deleuze a089027e7d Fix a regression in Jackson builder module registration
This commit brings back the support for registration of multiple
Jackson modules with a null typeId.

Closes gh-22740
2019-04-08 15:37:10 +02:00
Juergen Hoeller 43cb1af26a Polishing 2019-04-08 15:33:26 +02:00
Juergen Hoeller a1efe3cfe5 Avoid MessageFormat processing for default Bean Validation messages
Closes gh-22761
2019-04-08 15:33:04 +02:00
Juergen Hoeller fc9ce7cd99 Skip plain Java annotations in SourceClass.getAnnotations() upfront
Includes direct reflective introspection of annotations when possible.

Closes gh-22750
2019-04-08 15:32:52 +02:00
Sam Brannen cf5d0e6aa9 Introduce publishEvent() convenience method in TestContext
This commit introduces a publishEvent() method in the TestContext API
as a convenience for publishing an ApplicationEvent to the test's
ApplicationContext but only if the ApplicationContext is currently
available and with lazy creation of the ApplicationEvent.

For example, the beforeTestClass() method in
EventPublishingTestExecutionListener is now implemented as follows.

  public void beforeTestClass(TestContext testContext) {
      testContext.publishEvent(BeforeTestClassEvent::new);
  }

Closes gh-22765
2019-04-08 15:14:39 +02:00
Sam Brannen a7425c81c0 Add dependency on opendmk_jmxremote_optional_jar for performance builds
Although the jmxremote_optional JAR has been added to the build agents
on the Bamboo CI server for the latest JDK 8 installation, that
solution is brittle since it has to be manually installed in every new
JDK installation. In addition, this approach will not work with JDK 9+
since the "Extension Mechanism" has been removed beginning with JDK 9.

https://docs.oracle.com/javase/10/migrate/toc.htm#JSMIG-GUID-2C896CA8-927C-4381-A737-B1D81D964B7B

This commit addresses this issue by adding the following dependency to
spring-context.

// Substitute for "javax.management:jmxremote_optional:1.0.1_04" which
// is not available on Maven Central
testRuntime("org.glassfish.external:opendmk_jmxremote_optional_jar:1.0-b01-ea")

With this change, the Spring PERFORMANCE builds now execute on JDK 8,
9, and 11.

See gh-22757
2019-04-08 13:22:30 +02:00
Sam Brannen 8f5d2d65a1 Upgrade to JUnit Jupiter 5.4.2
See gh-22308
2019-04-07 22:05:33 +02:00
Sam Brannen 353e092bf6 Register EventPublishingTestExecutionListener by default (round 2)
This commit registers the EventPublishingTestExecutionListener as a
default TestExecutionListener with an order of 10,000. This registers
the EventPublishingTestExecutionListener as the last listener provided
by the Spring Framework.

With EventPublishingTestExecutionListener registered with an order of
10,000, it is effectively wrapped by all other Spring listeners,
including support for @DirtiesContext and test-managed transactions.

Furthermore, this commit revises the implementation of
EventPublishingTestExecutionListener to take advantage of the new
TestContext#hasApplicationContext() support which allows the
EventPublishingTestExecutionListener to publish events only if the
test's ApplicationContext is currently available. This avoids
undesirable side-effects such as eager loading of the
ApplicationContext before it is needed or re-loading of the
ApplicationContext after it has been intentionally closed.

Closes gh-18490
2019-04-06 16:39:26 +02:00
Sam Brannen c3d0459a4e Add support to query if ApplicationContext is available in the TCF
This commit introduces support in the Spring TestContext Framework
(TCF) to query whether the test's ApplicationContext is available.

Specifically, this commit introduces the following two `default`
methods along with corresponding implementations in DefaultTestContext
and DefaultCacheAwareContextLoaderDelegate.

- `boolean hasApplicationContext()` in the TestContext API

- `boolean isContextLoaded(MergedContextConfiguration)` in the
  CacheAwareContextLoaderDelegate API

Closes gh-22756
2019-04-06 16:00:33 +02:00
Sam Brannen ab1b8dee58 Ensure XmlEventDecoder compiles on JDK 9 and 11 2019-04-06 16:00:33 +02:00
Sam Brannen 55b764bac3 Remove unused import
See gh-22543
2019-04-06 12:14:46 +02:00
Sam Brannen 164ee2a4e1 Polishing
See gh-22543
2019-04-06 11:25:44 +02:00
Sam Brannen 021909dac2 Merge branch '5.1.x' 2019-04-06 11:22:15 +02:00
Sam Brannen a1668ad1c2 Fix Javadoc for PathPattern 2019-04-06 11:21:39 +02:00
Sam Brannen 510c0c5ef7 Return Set<PathPattern> from AbstractHandlerMethodMapping.getMappingPathPatterns
This commit revises the signature of getMappingPathPatterns() in
AbstractHandlerMethodMapping to return a set of PathPatterns instead of
a set of Strings.

See gh-22543
2019-04-06 11:18:25 +02:00
Tadaya Tsuyukubo dacda5859a Fix broken asciidoc heading 2019-04-06 11:02:45 +02:00
Rossen Stoyanchev 02da8486a3 Merge branch '5.1.x' 2019-04-05 21:53:55 -04:00
Rossen Stoyanchev 57558a481a DataBuffer fixes in View implementations
Closes gh-22754
2019-04-05 21:42:12 -04:00
Rossen Stoyanchev 6cabb79f0f Decode resourcePath for classpath locations
Closes gh-22272
2019-04-05 16:23:33 -04:00
Phillip Webb e905f1712e Refine MergedAnnotation.asMap
Add a convenience method that allows a `MergedAnnotation` to be
converted into an `AnnotationAttributes` instance. Also rename
the `MapValues` enum to `Adapt` which generally seems to read
better.

Closes gh-22738
2019-04-05 13:22:18 -07:00
Phillip Webb ef151f578d Polishing 2019-04-05 13:22:18 -07:00
Phillip Webb 1221b0650b Add MissingMergedAnnotation Tests
Add tests for `MissingMergedAnnotation`

See gh-21697
2019-04-05 13:21:46 -07:00
Phillip Webb 8bc74ad18d Delete AnnotationAttributeExtractor
Delete `AnnotationAttributeExtractor` which is package private and
no longer used.

Closes gh-22753
2019-04-05 13:20:47 -07:00
Sam Brannen 72027b1746 Log warning if @RequestMapping method has no explicit mapping
Commit c0b52d09f5 introduced support for
throwing an exception if a @RequestMapping handler method in a Spring
MVC controller was mapped to an empty path. This had negative side
effects for applications that intentionally mapped to an empty path,
potentially alongside a mapping to an explicit path for the same
handler method.

This commit addresses this by logging a warning (instead of throwing an
exception) if a @RequestMapping method is mapped only to empty paths.

This commit also introduces the same support for WebFlux-based
@RequestMapping handler methods.

Closes gh-22543
2019-04-05 19:55:22 +02:00
Sam Brannen e4525cf4c1 Modify ByteArrayEncoder so that it works in Eclipse IDE 2019-04-05 19:55:22 +02:00
Sam Brannen 898494a538 Polish AbstractHandlerMethodMapping
See gh-22543
2019-04-05 14:03:10 +02:00
Sam Brannen d04a640baf Polish Javadoc for @RequestMapping 2019-04-05 14:03:10 +02:00
Juergen Hoeller 9de83674cd Complete set of registerBean methods on AnnotatedBeanDefinitionReader
Includes bringing registerBean constructor-vararg variants up to GenericApplicationContext, making AnnotationConfigApplicationContext a straightforward subclass with a single template method to override.

See gh-22457
2019-04-05 13:56:33 +02:00
Juergen Hoeller b90e6ef8a0 Merge branch '5.1.x' 2019-04-05 12:48:34 +02:00
Juergen Hoeller da557e7415 Avoid expensive assertions in HttpRange
Closes gh-22742
2019-04-05 12:47:02 +02:00
Rossen Stoyanchev 279508a0f0 Merge pull request #22705 from jhaeyaert/22371 2019-04-04 17:15:18 -04:00
Rossen Stoyanchev e0c2a1c59d Polish
Closes gh-22705
2019-04-04 17:13:57 -04:00
Jeoffrey Haeyaert 9976783639 WebClient uri method with uriTemplate and UriBuilder
See gh-22705
2019-04-04 17:13:57 -04:00
Rossen Stoyanchev ed70978071 verify() fails if there are failed requests
Normally failed requests fail the test but they're suppressed for some
reason (e.g. in async callback) then verify should still correctly
report the failures.

Closes gh-21799
2019-04-04 16:49:46 -04:00
Sam Brannen 4be605eb1e Revert "Fix tests"
This reverts commit 07e9f802f2.
2019-04-04 19:10:58 +02:00
Sam Brannen d6ba5259d8 Revert "Register EventPublishingTestExecutionListener by default"
This reverts commit 86fb7362b1.
2019-04-04 19:10:58 +02:00
Sam Brannen a66e6d3231 Revert "Fix tests"
This reverts commit 65365d91c8.
2019-04-04 19:10:58 +02:00
Sam Brannen f7a5b3013e Revert "Register EventPublishingTestExecutionListener by default"
This reverts commit 13543f5e0f.
2019-04-04 19:10:58 +02:00
Sebastien Deleuze a8d6ba9965 Add support for Coroutines Flow
Flow is a Kotlin Coroutines related cold asynchronous
stream of the data, that emits from zero to N (where N
can be unbounded) values and completes normally or with
an exception.

It is conceptually the Coroutines equivalent of Flux with
an extension oriented API design, easy custom operator
capabilities and some suspending methods.

This commit leverages Flow <-> Flux interoperability
to support Flow on controller handler method parameters
or return values, and also adds Flow based extensions to
WebFlux.fn. It allows to reach a point when we can consider
Spring Framework officially supports Coroutines even if some
additional work remains to be done like adding
interoperability between Reactor and Coroutines contexts.

Flow is currently an experimental API that is expected to
become final before Spring Framework 5.2 GA.

Close gh-19975
2019-04-04 19:06:32 +02:00
Sam Brannen a5e297a161 Polishing 2019-04-04 18:41:57 +02:00
Sam Brannen df15b64e86 Document @Autowired support on parameters
Closes gh-21118
2019-04-04 18:31:04 +02:00
Sam Brannen e1080f8b5f Polish Javadoc for @Autowired 2019-04-04 18:18:35 +02:00
Sam Brannen 3a9262ca1e Fix Javadoc warnings in Gradle build 2019-04-04 17:49:33 +02:00
Sam Brannen c0b52d09f5 Require explicit path mappings for @RequestMapping methods
Prior to this commit, handler methods in Spring MVC controllers were
not required to provide explicit path mappings via @RequestMapping (or
any of its specializations such as @GetMapping). Such handler methods
were effectively mapped to all paths. Consequently, developers may have
unwittingly mapped all requests to a single handler method.

This commit addresses this by enforcing that @RequestMapping methods
are mapped to an explicit path. Note, however, that this is enforced
after type-level and method-level @RequestMapping information has been
merged.

Developers wishing to map to all paths should now add an explicit path
mapping to "/**" or "**".

Closes gh-22543
2019-04-04 17:33:59 +02:00
Sam Brannen de69871354 Removed unused import 2019-04-04 17:13:08 +02:00
Sam Brannen 1a2e372186 Removed unused import 2019-04-04 16:56:03 +02:00
Juergen Hoeller 23b8f471dc Upgrade to Quartz 2.3.1 2019-04-04 16:43:40 +02:00
Juergen Hoeller 1741b6dcd9 Merge branch '5.1.x' 2019-04-04 16:12:07 +02:00
stsypanov 383f18e214 Use StringJoiner where possible to simplify String joining 2019-04-04 16:11:32 +02:00
Juergen Hoeller 95232d5bf8 Upgrade to Apache HttpClient 4.5.8 and Jetty Reactive HttpClient 1.0.3 2019-04-04 16:10:16 +02:00
Juergen Hoeller 97b83a3e4a Revised documentation on constructor autowiring semantics
Closes gh-22735
2019-04-04 16:09:51 +02:00
Sam Brannen 07e9f802f2 Fix tests
See gh-18490
2019-04-04 12:55:55 +02:00
Sam Brannen 86fb7362b1 Register EventPublishingTestExecutionListener by default
See gh-18490
2019-04-04 12:55:06 +02:00
Sebastien Deleuze 40e4c8068d Polishing 2019-04-04 12:16:18 +02:00
Sebastien Deleuze 9217f0b63e Convert CoRouterFunctionDsl indents to tabs 2019-04-04 12:14:27 +02:00
Sebastien Deleuze 2eb631aaad Avoid exposing (Co)RouterFunctionDsl#invoke
WebFlux.fn RouterFunctionDsl#invoke and CoRouterFunctionDsl#invoke
were wrongly exposed on public API and have never been designed to
be used by end users, but rather only invoked from router { } or
coRouter { } builders.

To fix that, avoiding this method being accessible from the DSL and
for the sake of consistency with WebMvc.fn RouterFunctionDsl,
Spring Framework 5.2 turns public fun invoke() method to
an internal fun build() one.

As a consequence RouterFunctionDsl and CoRouterFunctionDsl are not
open anymore, they are expected to be extended via Kotlin
extensions if needed.

Closes gh-22736
2019-04-04 12:14:27 +02:00
Sebastien Deleuze e6171fb47d Add Kotlin router DSL and extensions for WebMvc.fn
Closes gh-22697
2019-04-04 12:14:27 +02:00
Sebastien Deleuze 92d5f6395e Rename awaitPrincipal to awaitPrincipalOrNull
See gh-19975
2019-04-04 12:14:27 +02:00
Arjen Poutsma b3d3778269 Do not resolve DTDs in Stax Tests 2019-04-04 12:10:10 +02:00
Brian Clozel 65365d91c8 Fix tests
See gh-18490
2019-04-04 11:19:31 +02:00
Juergen Hoeller 52f90c303e Rename LogMessage.lazy(Supplier) to LogMessage.of(Supplier)
See gh-22726
2019-04-04 10:39:42 +02:00
Juergen Hoeller 9080ae24f9 First-class support for printf-style format strings in LogMessage
LogMessage is an abstract class now: with internal subclasses for Supplier bindings as well as printf-style format strings with a variable number of arguments (some fixed for efficiency, varargs array as fallback), created through corresponding static factory methods.

Closes gh-22726
2019-04-04 01:52:51 +02:00
Rossen Stoyanchev 5616eb2e8e Merge branch '5.1.x' 2019-04-03 19:38:21 -04:00
Rossen Stoyanchev 325fb5d97e Unwrap CompletionException in return value handler
See gh-22476
2019-04-03 19:37:13 -04:00
Rossen Stoyanchev 88a7a68a71 Revert to Californium-SR6 for M1 release 2019-04-03 19:25:34 -04:00
Rossen Stoyanchev 2c28e4e972 Merge branch '5.1.x' 2019-04-03 16:29:28 -04:00
Rossen Stoyanchev b3bc2d9253 Remove workaround for reactor-core issue 2019-04-03 16:27:02 -04:00
Rossen Stoyanchev 1c5aa6a8d3 Merge changes for 22644 2019-04-03 14:56:39 -04:00
Rossen Stoyanchev 72119ac076 ProducesRequestCondition caches accepted media types
Closes gh-22644
2019-04-03 14:56:30 -04:00
Rossen Stoyanchev 254f06e1a1 Request attribute cache for resolved lookupPath
See gh-22644
2019-04-03 14:56:30 -04:00
Rossen Stoyanchev bb9fcad58a RequestCondition implementations minor refactoring
Reduce object creation by pre-computing instances that can be re-used,
and eliminating collection copying and sorting where not needed.

See gh-22644
2019-04-03 14:56:30 -04:00
Juergen Hoeller 8f967129b9 Merge branch '5.1.x' 2019-04-03 19:05:42 +02:00
Sam Brannen 13543f5e0f Register EventPublishingTestExecutionListener by default
Closes gh-18490
2019-04-03 18:31:16 +02:00
Juergen Hoeller 0cc6a9ef11 Avoid getDeclaredMethod check in ReflectionUtils.isObjectMethod
Closes gh-22730
2019-04-03 18:21:26 +02:00
Sam Brannen d6173512fe Document test execution event support in the Reference Manual
Closes gh-18490
2019-04-03 18:18:39 +02:00
Sebastien Deleuze a63d23492a Optimize Jackson2Tokenizer
See gh-22727
2019-04-03 18:02:27 +02:00
Sam Brannen 807828b2b7 Polish Javadoc for MergedAnnotation support
See gh-21697
2019-04-03 16:55:34 +02:00
Sam Brannen a4279c5d00 Rename MergedAnnotations.SearchStrategy.SUPER_CLASS to SUPERCLASS
For consistency within the framework, this commit renames the SUPER_CLASS enum constant
to SUPERCLASS.

See gh-21697
2019-04-03 16:44:36 +02:00
Juergen Hoeller d39e3cc0ba Merge branch '5.1.x' 2019-04-03 14:43:22 +02:00
Juergen Hoeller 9ea02c6dfa Revised javadoc 2019-04-03 14:34:11 +02:00
Juergen Hoeller abbe61b9f8 Consistent internal use of getMergedLocalBeanDefinition 2019-04-03 14:33:57 +02:00
Juergen Hoeller e0fe32af05 Detect factory method annotations in getBeanNamesForAnnotation and co
As of 5.2, ListableBeanFactory.findAnnotationOnBean and its retrieval companions getBeanNamesForAnnotation and getBeansWithAnnotation detect annotations on @Bean methods as well.

Closes gh-22541
2019-04-03 13:07:47 +02:00
Juergen Hoeller dee88d931a Common constant for DefaultBeanNameGenerator as well
Closes gh-22591
2019-04-03 12:58:13 +02:00
Brian Clozel 47c8d1de7b Avoid calling other bean methods in web config
This commit changes the main configuration classes for Spring MVC and
Spring WebFlux to not call other bean methods when setting up the web
infrastructure. This allows configuration classes extending
`DelegatingWebFluxConfiguration` and `DelegatingWebMvcConfiguration`
to opt-in the lite-mode, as introduced in gh-22461.
2019-04-03 10:16:41 +02:00
Brian Clozel 83ce8ad79a Fix checkstyle 2019-04-03 10:16:11 +02:00
Juergen Hoeller e2e91e2196 Switch LogAccessor argument order to have message supplier last
Closes gh-22726
2019-04-02 21:01:56 +02:00
Sam Brannen 5922642333 Document exception handling and async support for test events
This commit updates the class-level Javadoc for
EventPublishingTestExecutionListener in order to provide explicit
documentation for exception handling and async support.

See gh-18490
2019-04-02 20:31:58 +02:00
Juergen Hoeller 2e63c66b0d Merge branch '5.1.x' 2019-04-02 20:13:29 +02:00
Juergen Hoeller 0babc1fb64 Polishing 2019-04-02 20:04:07 +02:00
Juergen Hoeller 95a84bbad1 Clarify case-insensitive nature of HttpHeaders
Closes gh-22723
2019-04-02 20:04:00 +02:00
Juergen Hoeller 3ac88bed23 Introduce LogAccessor and LogMessage as convenient logging utilities
Closes gh-22726
2019-04-02 19:13:05 +02:00
Rossen Stoyanchev 208a1ae0ea Sync ChannelSendOperator copy in spring-messaging
See gh-22720
2019-04-02 11:06:11 -04:00
Rossen Stoyanchev 89a29598d5 Merge branch '5.1.x' 2019-04-02 11:05:30 -04:00
Rossen Stoyanchev 4c08863776 Add test case for writeFunction error signal
See gh-22720
2019-04-02 11:00:58 -04:00
Juergen Hoeller c366e205e5 Common constants for default AnnotationBeanNameGenerator instances
Closes gh-22591
2019-04-02 16:52:36 +02:00
Sebastien Deleuze b2dbefcfc5 Prevent spring-core-coroutines deployment
See gh-19975
2019-04-02 16:05:18 +02:00
Sebastien Deleuze d2fa5536db Use more efficient Reactor operators
Use handle/flatMapIterable instead of flatMap/flatMapMany
when possible.

Closes gh-22727
2019-04-02 15:49:59 +02:00
Violeta Georgieva 9bd0ec33f8 Release cached item in ChannelSendOperator when server error
Related to gh-22720
2019-04-02 16:42:52 +03:00
Juergen Hoeller b1231de062 Fix formatting
See gh-21855
2019-04-02 15:17:34 +02:00
Matthias Kurz 6899624155 Correctly parse property name in path "map[key[foo]]" 2019-04-02 15:09:13 +02:00
liguoxiong 7b11c3b599 Transform the beanName in method isPrimary
Transform the beanName in method DefaultListableBeanFactory.isPrimary.
Add the corresponding test cases.
Fixes #22675.
2019-04-02 15:06:12 +02:00
Juergen Hoeller a11a592734 AbstractSqlParameterSource enumerates parameter values in toString()
Closes gh-2080
2019-04-02 14:56:38 +02:00
Juergen Hoeller 4a5b9d39d4 Consistent java.time setters on HttpHeaders and CorsConfiguration
Closes gh-22546
2019-04-02 14:56:20 +02:00
Juergen Hoeller d6c1a65737 JtaTransactionManagerFactoryBean fully initializes its JTM instance
Closes gh-22605
2019-04-02 14:55:56 +02:00
Juergen Hoeller 271445b89e Public createMarshaller/Unmarshaller methods on Jaxb2Marshaller
Closes gh-22708
2019-04-02 14:55:39 +02:00
Juergen Hoeller c1a74de48d Boolean getLazyInit accessor indicating no explicit flag set
Closes gh-22694
2019-04-02 14:55:27 +02:00
Juergen Hoeller 03bda29032 Revert "AnnotationConfigRegistry exposes registerBean with supplier/qualifiers"
This reverts commit 18f2e6a1
2019-04-02 14:55:13 +02:00
Rossen Stoyanchev a94868158e Sync ChannelSendOperator copy in spring-messaging
See gh-22720
2019-04-01 17:22:54 -04:00
Rossen Stoyanchev 20742c74dc Merge branch '5.1.x' 2019-04-01 17:16:17 -04:00
Rossen Stoyanchev 9c48d63082 Release cached item in ChannelSendOperator
1. If the write Subscriber cancels with the item cached, release it.

2. If the write Publisher emits an error while the item is cached, when
the write Subscriber subscribes, release the cached item and emit the
error signal.

Closes gh-22720
2019-04-01 17:15:16 -04:00
Sebastien Deleuze eb75367934 Remove deprecated AbstractHandlerMapping#getCorsConfigurations
Closes gh-22719
2019-04-01 17:43:20 +02:00
Sebastien Deleuze d27b5d0ab6 Improve CORS handling
This commit improves CORS support by:
 - Using CORS processing only for CORS-enabled endpoints
 - Skipping CORS processing for same-origin requests
 - Adding Vary headers for non-CORS requests

It introduces an AbstractHandlerMapping#hasCorsConfigurationSource
method in order to be able to check CORS endpoints efficiently.

Closes gh-22273
Closes gh-22496
2019-04-01 17:42:51 +02:00
Stephane Nicoll 8714710170 Merge branch '5.1.x' 2019-04-01 14:02:23 +02:00
Stephane Nicoll de2a01eee4 Polish
Closes gh-22717
2019-04-01 14:01:41 +02:00
Stephane Nicoll 4b5c370701 Merge branch '5.1.x' 2019-04-01 13:55:44 +02:00
Stephane Nicoll 7882a33e07 Merge pull request #22718 from jKiler
* pr/22718:
  Polish contribution
  Polish
2019-04-01 13:55:30 +02:00
Stephane Nicoll db64286589 Polish contribution
Closes gh-22718
2019-04-01 13:55:00 +02:00
Jerzy ee1322ccbb Polish
See gh-22718
2019-04-01 13:54:45 +02:00
Sam Brannen 085cb1dd92 Clean up warnings 2019-03-31 14:36:35 +02:00
Sam Brannen e8cfc4df45 Disable verbose JiBX logging in Gradle build 2019-03-31 13:26:38 +02:00
Stephane Nicoll 7625fc0262 Merge branch '5.1.x' 2019-03-31 10:59:30 +02:00
Sebastien Deleuze beb491b840 Use Dispatchers.Unconfined for Coroutines
As of Coroutines 1.2.0-alpha, Dispatchers.Unconfined
is a stable API so we can leverage it in order to get
better performances in our Reactive to Coroutines
bridge.

See gh-19975
2019-03-31 10:56:05 +02:00
Sebastien Deleuze 3387d3ec89 Upgrade to Coroutines 1.2.0-alpha
This commit also switches on kotlin-compiler-embeddable to
improve isolation of its dependencies

See gh-19975
2019-03-31 10:55:13 +02:00
Spring Buildmaster d6088fa64e Next Development Version 2019-03-31 08:42:44 +00:00
Juergen Hoeller 76e5a2a53b Remove superfluous empty lines 2019-03-30 00:26:58 +01:00
Juergen Hoeller 2e832c03ae Merge branch '5.1.x' 2019-03-30 00:25:10 +01:00
Juergen Hoeller c6619006eb Polishing 2019-03-30 00:20:32 +01:00
Juergen Hoeller 3ba0a79a57 Upgrade to OpenPDF 1.2.12 2019-03-30 00:13:29 +01:00
Juergen Hoeller 462d047f72 Typo fixes and formatting 2019-03-29 23:44:00 +01:00
Stephane Nicoll 43004328c8 Merge pull request #22709 from armansimonyan13
* pr/22709:
  Polish contribution
  Polish
2019-03-29 22:42:05 +01:00
Stephane Nicoll 2156a1bbd5 Polish contribution
Closes gh-22709
2019-03-29 22:40:40 +01:00
arman simonyan 257772c61e Polish
See gh-22709
2019-03-29 22:40:04 +01:00
Rossen Stoyanchev 8dc535c15c Match declared parameters on produces condition
Closes gh-21670
2019-03-29 17:03:40 -04:00
Rossen Stoyanchev c0be1c5100 Polish 2019-03-29 16:01:22 -04:00
Rossen Stoyanchev 6c33af0a1c Merge branch '5.1.x' 2019-03-29 15:56:07 -04:00
Rossen Stoyanchev 85332c7a49 Polish 2019-03-29 15:53:45 -04:00
Rossen Stoyanchev 81f95efdbb Call onDispose before first read
The cancellation callback in asynchronousReadFileChannel must be called
before the first read I/O or otherwise if cancellation signals happens
immediately the onDispose callback may be missed.

The DefaultBufferFactory workaround however remains in place until an
expected additional fix arrives with Reactor Core 3.2.9.

See gh-22107
2019-03-29 15:43:06 -04:00
Rossen Stoyanchev 9a1bba5b67 NettyDataBufferFactory.wrap(ByteBuf) calls touch()
Closes gh-21960
2019-03-29 15:25:28 -04:00
Juergen Hoeller 57de2e0900 Deprecate ClassUtils.isCglibProxy methods in favor of AOP-level checks
Closes gh-22706
2019-03-29 11:12:49 +01:00
Phillip Webb f273fa990c Use RepeatableContainers.none() in AnnotationUtils
Update `AnnotationUtils` so that `RepeatableContainers.none()` is used
when performing an exhaustive search for merged annotations. These
parameters were accidentally removed in commit 210b1789 and weren't
caught earlier because we were missing a test.

Closes gh-22702
2019-03-28 14:39:29 -07:00
Phillip Webb 800cbf2524 Ignore 'value' attribute in AnnotationTypeMapping
Update `addConventionAnnotationValues` so that `value` attributes
do not override existing annotation values. The aligns the new
`MergedAnnotations` API with the previous `AnnotatedElementUtils`
logic.

Closes gh-22703
2019-03-28 14:39:29 -07:00
Rossen Stoyanchev 45e42214b2 Merge branch '5.1.x' 2019-03-28 17:37:21 -04:00
Rossen Stoyanchev 57d006b3ff Fix checkstyle warning 2019-03-28 17:37:12 -04:00
Rossen Stoyanchev 52b109ae68 Merge branch '5.1.x' 2019-03-28 17:19:51 -04:00
Rossen Stoyanchev beae1fbb12 Uncomment buffer leak tests in DataBufferUtils
Following a response on
https://github.com/reactor/reactor-core/issues/1634 apparently
FluxSink is respecting doOnDiscard but there is a race condition
in DataBufferUtils with file reading.

This commit makes two changes:
1) Add more checks for onDispose to detect cancellation signals
as well as to deal with potentially concurrent such signal.
2) Do not close the channel through the Flux.using callback but
rather allow the current I/O callback to take place and only then
close the channel or else the buffer is left hanging.

Despite this tests still can fail due to a suspected issue in Reactor
itself with the doOnDiscard callback for FluxSink. That's tracked under
the same issue https://github.com/reactor/reactor-core/issues/1634
and for now the use of DefaultDataBufferFactory is enforced as a
workaround until the issue is resolved.

See gh-22107
2019-03-28 17:18:40 -04:00
Sam Brannen 3f85530efd URL Cleanup - polishing 2019-03-28 17:23:13 +01:00
Sam Brannen faa3bde991 Merge branch '5.1.x' 2019-03-28 17:05:35 +01:00
Arjen Poutsma e09d6e2efd Javadoc 2019-03-28 16:47:25 +01:00
Arjen Poutsma 2950958f35 Fix ConcurrentModificationException on Undertow
This commit fixes a ConcurrentModificationException that occurs when
requesting a nonexistant route.

Closes gh-22698
2019-03-28 16:19:57 +01:00
Juergen Hoeller 49fccfb158 Consistent retrieval of javax annotation types (e.g. JSR-305)
Closes gh-22696
2019-03-28 14:38:55 +01:00
Sam Brannen f9d59570de URL Cleanup - polishing 2019-03-28 14:05:21 +01:00
Sam Brannen eec183ef28 Ensure spring-test test tasks are UP-TO-DATE
Prior to this commit, the three `test` tasks in the spring-test module
shared the same output directory for test reports. This had the
negative side effect of causing Gradle to believe that the tasks were
not UP-TO-DATE. Consequently, all three `test` tasks in the spring-test
module were executed for every build even if there were zero changes in
the spring-test module.

This commit fixes this issue by allowing Gradle to use the default test
results output directory for each `test` task. Thanks to @marcphilipp
for providing the tip.

In addition, the Artifactory Gradle task in the Default Job of the
Bamboo build plan for the Spring Framework (SPR-PUB) has been updated
to use the following custom test results directory pattern:
`**/build/test-results/**/*.xml`.

See: https://guides.gradle.org/using-build-cache/#concepts_overlapping_outputs
2019-03-28 13:47:33 +01:00
Sam Brannen 7e6a5f5875 URL Cleanup - license.txt 2019-03-28 13:04:33 +01:00
Sam Brannen 025eaf688f Clean up warnings in Gradle build output 2019-03-28 12:32:58 +01:00
Sam Brannen 09690f2750 Upgrade to Gradle 5.3.1
See gh-22347
2019-03-28 12:02:35 +01:00
Sebastien Deleuze c5c4ac164b Refine WebFlux Coroutines API
This commit provides both nullable and non-nullable variants for
awaitBody, makes awaitPrincipal return type nullable and rename
awaitResponse to awaitExchange for better consistency with Java API.

See gh-19975
2019-03-28 10:22:50 +01:00
Sebastien Deleuze 811f315440 Refine PropertyResolver extensions null-safety
See gh-22687
2019-03-28 09:01:20 +01:00
Sam Brannen 3cf2c04406 URL Cleanup - polishing
See gh-22680
2019-03-27 22:05:38 +01:00
Sam Brannen c90b6ea0bb URL Cleanup - upgrade to more modern Xalan namespace
See gh-22680
2019-03-27 22:05:38 +01:00
Sam Brannen 83293b39df URL Cleanup - fix undesirable code change
Namespace handlers are mapped based on the canonical names for XML
namespaces which in Spring do not use "https" as the scheme.

See gh-22680
2019-03-27 22:05:38 +01:00
Sam Brannen 5dc9c4c527 URL Cleanup - Fix broken tests
See gh-22680
2019-03-27 22:05:38 +01:00
Spring Operator 3db08c6b7a URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* [ ] http://aopalliance.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://aopalliance.sourceforge.net) result AnnotatedConnectException).
* [ ] http://cglib.sourceforge.net (200) with 2 occurrences could not be migrated:
   ([https](https://cglib.sourceforge.net) result AnnotatedConnectException).
* [ ] http://classdoc.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://classdoc.sourceforge.net) result AnnotatedConnectException).
* [ ] http://code.jquery.com:80/jquery.js (200) with 1 occurrences could not be migrated:
   ([https](https://code.jquery.com:80/jquery.js) result SSLException).
* [ ] http://dbunit.sourceforge.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://dbunit.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://docs.groovy-lang.org/docs/next/html/documentation/template-engines.html (200) with 1 occurrences could not be migrated:
   ([https](https://docs.groovy-lang.org/docs/next/html/documentation/template-engines.html) result SSLProtocolException).
* [ ] http://domain3.com (200) with 6 occurrences could not be migrated:
   ([https](https://domain3.com) result ConnectTimeoutException).
* [ ] http://forum.thymeleaf.org/Thymeleaf-3-0-8-JUST-PUBLISHED-td4030687.html (200) with 1 occurrences could not be migrated:
   ([https](https://forum.thymeleaf.org/Thymeleaf-3-0-8-JUST-PUBLISHED-td4030687.html) result SSLHandshakeException).
* [ ] http://gregfranko.com/jquery.tocify.js/ (200) with 1 occurrences could not be migrated:
   ([https](https://gregfranko.com/jquery.tocify.js/) result SSLHandshakeException).
* [ ] http://grinder.sourceforge.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://grinder.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://groovy-lang.org/templating.html (200) with 3 occurrences could not be migrated:
   ([https](https://groovy-lang.org/templating.html) result SSLProtocolException).
* [ ] http://hsqldb.org (200) with 1 occurrences could not be migrated:
   ([https](https://hsqldb.org) result SSLHandshakeException).
* [ ] http://htmlunit.sourceforge.net/ (200) with 3 occurrences could not be migrated:
   ([https](https://htmlunit.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://htmlunit.sourceforge.net/gettingStarted.html (200) with 1 occurrences could not be migrated:
   ([https](https://htmlunit.sourceforge.net/gettingStarted.html) result AnnotatedConnectException).
* [ ] http://htmlunit.sourceforge.net/javascript.html (200) with 1 occurrences could not be migrated:
   ([https](https://htmlunit.sourceforge.net/javascript.html) result AnnotatedConnectException).
* [ ] http://javadiff.cvs.sourceforge.net/ (200) with 3 occurrences could not be migrated:
   ([https](https://javadiff.cvs.sourceforge.net/) result SSLHandshakeException).
* [ ] http://jibx.sourceforge.net/ (200) with 2 occurrences could not be migrated:
   ([https](https://jibx.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://joda-time.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://joda-time.sourceforge.net) result AnnotatedConnectException).
* [ ] http://jotm.objectweb.org/ (200) with 1 occurrences could not be migrated:
   ([https](https://jotm.objectweb.org/) result NotSslRecordException).
* [ ] http://json-b.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://json-b.net/) result SSLHandshakeException).
* [ ] http://mx4j.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://mx4j.sourceforge.net) result AnnotatedConnectException).
* [ ] http://mx4j.sourceforge.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://mx4j.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://mydomain3.com (200) with 9 occurrences could not be migrated:
   ([https](https://mydomain3.com) result ConnectTimeoutException).
* [ ] http://objenesis.org (200) with 1 occurrences could not be migrated:
   ([https](https://objenesis.org) result SSLHandshakeException).
* [ ] http://objenesis.org/tutorial.html (200) with 1 occurrences could not be migrated:
   ([https](https://objenesis.org/tutorial.html) result SSLHandshakeException).
* [ ] http://other.com/ (200) with 2 occurrences could not be migrated:
   ([https](https://other.com/) result SSLHandshakeException).
* [ ] http://reactivex.io/ (200) with 1 occurrences could not be migrated:
   ([https](https://reactivex.io/) result SSLHandshakeException).
* [ ] http://reactivex.io/documentation/operators.html (200) with 1 occurrences could not be migrated:
   ([https](https://reactivex.io/documentation/operators.html) result SSLHandshakeException).
* [ ] http://url.somewhereelse.com (200) with 4 occurrences could not be migrated:
   ([https](https://url.somewhereelse.com) result SSLHandshakeException).
* [ ] http://www.beanshell.org (200) with 1 occurrences could not be migrated:
   ([https](https://www.beanshell.org) result SSLHandshakeException).
* [ ] http://www.beanshell.org/ (200) with 1 occurrences could not be migrated:
   ([https](https://www.beanshell.org/) result SSLHandshakeException).
* [ ] http://www.doclet.com (200) with 1 occurrences could not be migrated:
   ([https](https://www.doclet.com) result AnnotatedConnectException).
* [ ] http://www.gebish.org/ (200) with 1 occurrences could not be migrated:
   ([https](https://www.gebish.org/) result SSLHandshakeException).
* [ ] http://www.gebish.org/manual/current/ (200) with 3 occurrences could not be migrated:
   ([https](https://www.gebish.org/manual/current/) result SSLHandshakeException).
* [ ] http://www.groovy-lang.org/ (200) with 2 occurrences could not be migrated:
   ([https](https://www.groovy-lang.org/) result SSLProtocolException).
* [ ] http://www.groovy-lang.org/operators.html (200) with 2 occurrences could not be migrated:
   ([https](https://www.groovy-lang.org/operators.html) result SSLProtocolException).
* [ ] http://www.hsqldb.org (200) with 1 occurrences could not be migrated:
   ([https](https://www.hsqldb.org) result SSLHandshakeException).
* [ ] http://www.jensgulden.de (200) with 1 occurrences could not be migrated:
   ([https](https://www.jensgulden.de) result AnnotatedConnectException).
* [ ] http://www.mockobjects.com (200) with 2 occurrences could not be migrated:
   ([https](https://www.mockobjects.com) result ClosedChannelException).
* [ ] http://www.mockobjects.com/ (200) with 1 occurrences could not be migrated:
   ([https](https://www.mockobjects.com/) result ClosedChannelException).
* [ ] http://xmlunit.sourceforge.net/ (200) with 2 occurrences could not be migrated:
   ([https](https://xmlunit.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://192.168.0.1/mvc-showcase (301) with 1 occurrences could not be migrated:
   ([https](https://192.168.0.1/mvc-showcase) result ConnectTimeoutException).
* [ ] http://www.easymock.org (301) with 2 occurrences could not be migrated:
   ([https](https://www.easymock.org) result SSLHandshakeException).
* [ ] http://www.easymock.org/ (301) with 1 occurrences could not be migrated:
   ([https](https://www.easymock.org/) result SSLHandshakeException).
* [ ] http://www.jmock.org/ (301) with 1 occurrences could not be migrated:
   ([https](https://www.jmock.org/) result SSLHandshakeException).
* [ ] http://foo.com (301) with 4 occurrences could not be migrated:
   ([https](https://foo.com) result SSLHandshakeException).
* [ ] http://foo.com/ (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/) result SSLHandshakeException).
* [ ] http://foo.com/a (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/a) result SSLHandshakeException).
* [ ] http://foo.com/a?foo=bar&foo=baz (301) with 4 occurrences could not be migrated:
   ([https](https://foo.com/a?foo=bar&foo=baz) result SSLHandshakeException).
* [ ] http://foo.com/bar (301) with 5 occurrences could not be migrated:
   ([https](https://foo.com/bar) result SSLHandshakeException).
* [ ] http://foo.com/baz (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/baz) result SSLHandshakeException).
* [ ] http://foo.com/rest/books/6.json (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/rest/books/6.json) result SSLHandshakeException).
* [ ] http://foo.com/rest/books/6/pages/1.json (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/rest/books/6/pages/1.json) result SSLHandshakeException).
* [ ] http://foo.com/v1 (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/v1) result SSLHandshakeException).
* [ ] http://foo.com/v1/123 (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/v1/123) result SSLHandshakeException).
* [ ] http://foo.com/v1/bar (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/v1/bar) result SSLHandshakeException).
* [ ] http://foo.com/v1?id=123 (301) with 2 occurrences could not be migrated:
   ([https](https://foo.com/v1?id=123) result SSLHandshakeException).
* [ ] http://foo.com/wrong (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/wrong) result SSLHandshakeException).
* [ ] http://mydomain4.com (301) with 3 occurrences could not be migrated:
   ([https](https://mydomain4.com) result SSLHandshakeException).
* [ ] http://www.caucho.com/hessian (302) with 6 occurrences could not be migrated:
   ([https](https://www.caucho.com/hessian) result SSLHandshakeException).
* [ ] http://mydomain2.com (302) with 22 occurrences could not be migrated:
   ([https](https://mydomain2.com) result ConnectTimeoutException).
* [ ] http://www.jdiff.org (302) with 1 occurrences could not be migrated:
   ([https](https://www.jdiff.org) result ConnectTimeoutException).
* [ ] http://example.com:80/test/this/here (404) with 3 occurrences could not be migrated:
   ([https](https://example.com:80/test/this/here) result NotSslRecordException).
* [ ] http://www.foo.com/schema/component/component.xsd (404) with 1 occurrences could not be migrated:
   ([https](https://www.foo.com/schema/component/component.xsd) result SSLHandshakeException).
* [ ] http://www.foo.com/schema/jcache (404) with 2 occurrences could not be migrated:
   ([https](https://www.foo.com/schema/jcache) result SSLHandshakeException).
* [ ] http://www.mycompany.com/schema/myns/myns.xsd (404) with 1 occurrences could not be migrated:
   ([https](https://www.mycompany.com/schema/myns/myns.xsd) result ConnectTimeoutException).
* [ ] http://xunitpatterns.com/Test%20Spy.html (404) with 1 occurrences could not be migrated:
   ([https](https://xunitpatterns.com/Test%20Spy.html) result AnnotatedConnectException).

These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* [ ] http://bugs.sun.com/view_bug.do?bug_id=6342411 (302) with 1 occurrences migrated to:
  https://bugs.java.com/view_bug.do?bug_id=6342411 ([https](https://bugs.sun.com/view_bug.do?bug_id=6342411) result SSLHandshakeException).
* [ ] http://bugs.sun.com/view_bug.do?bug_id=7023180 (302) with 2 occurrences migrated to:
  https://bugs.java.com/view_bug.do?bug_id=7023180 ([https](https://bugs.sun.com/view_bug.do?bug_id=7023180) result SSLHandshakeException).
* [ ] http://www.freemarker.org (301) with 5 occurrences migrated to:
  https://freemarker.apache.org/ ([https](https://www.freemarker.org) result ConnectTimeoutException).
* [ ] http://sockjs.org (303) with 2 occurrences migrated to:
  https://github.com/sockjs/sockjs-client ([https](https://sockjs.org) result AnnotatedConnectException).
* [ ] http://network.pivotal.io/open-source (301) with 1 occurrences migrated to:
  https://network.pivotal.io/open-source ([https](https://network.pivotal.io/open-source) result ReadTimeoutException).
* [ ] http://projects.eclipse.org/projects/tools.buildship (301) with 1 occurrences migrated to:
  https://projects.eclipse.org/projects/tools.buildship ([https](https://projects.eclipse.org/projects/tools.buildship) result SSLException).
* [ ] http://aaa.org:8080/a (301) with 1 occurrences migrated to:
  https://www.aaa.org/articles/ ([https](https://aaa.org:8080/a) result NotSslRecordException).
* [ ] http://aaa.org:8080/b/c/d (301) with 1 occurrences migrated to:
  https://www.aaa.org/b/c/d ([https](https://aaa.org:8080/b/c/d) result ReadTimeoutException).
* [ ] http://www.caucho.com (302) with 1 occurrences migrated to:
  https://www.caucho.com/ ([https](https://www.caucho.com) result SSLHandshakeException).
* [ ] http://jruby.org (301) with 4 occurrences migrated to:
  https://www.jruby.org ([https](https://jruby.org) result SSLHandshakeException).
* [ ] http://jruby.org/ (301) with 1 occurrences migrated to:
  https://www.jruby.org ([https](https://jruby.org/) result SSLHandshakeException).
* [ ] http://bbb.org:9090/b (AnnotatedConnectException) with 2 occurrences migrated to:
  https://bbb.org:9090/b ([https](https://bbb.org:9090/b) result AnnotatedConnectException).
* [ ] http://192.168.28.42/1.jsp (ConnectTimeoutException) with 3 occurrences migrated to:
  https://192.168.28.42/1.jsp ([https](https://192.168.28.42/1.jsp) result ConnectTimeoutException).
* [ ] http://example.com:8080/ (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.com:8080/ ([https](https://example.com:8080/) result ConnectTimeoutException).
* [ ] http://example.com:8080/bar (ConnectTimeoutException) with 5 occurrences migrated to:
  https://example.com:8080/bar ([https](https://example.com:8080/bar) result ConnectTimeoutException).
* [ ] http://example.org:9090 (ConnectTimeoutException) with 2 occurrences migrated to:
  https://example.org:9090 ([https](https://example.org:9090) result ConnectTimeoutException).
* [ ] http://example.org:9090/base (ConnectTimeoutException) with 12 occurrences migrated to:
  https://example.org:9090/base ([https](https://example.org:9090/base) result ConnectTimeoutException).
* [ ] http://example.org:9090/base/people (ConnectTimeoutException) with 2 occurrences migrated to:
  https://example.org:9090/base/people ([https](https://example.org:9090/base/people) result ConnectTimeoutException).
* [ ] http://example.org:9090/base/something/1/foo (ConnectTimeoutException) with 2 occurrences migrated to:
  https://example.org:9090/base/something/1/foo ([https](https://example.org:9090/base/something/1/foo) result ConnectTimeoutException).
* [ ] http://example.org:9090/base/something/else (ConnectTimeoutException) with 2 occurrences migrated to:
  https://example.org:9090/base/something/else ([https](https://example.org:9090/base/something/else) result ConnectTimeoutException).
* [ ] http://example.org:9999/base (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/base ([https](https://example.org:9999/base) result ConnectTimeoutException).
* [ ] http://example.org:9999/base/api/people/123/addresses (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/base/api/people/123/addresses ([https](https://example.org:9999/base/api/people/123/addresses) result ConnectTimeoutException).
* [ ] http://example.org:9999/base/api/people/123/addresses/DE (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/base/api/people/123/addresses/DE ([https](https://example.org:9999/base/api/people/123/addresses/DE) result ConnectTimeoutException).
* [ ] http://example.org:9999/base/people/123/addresses/DE (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/base/people/123/addresses/DE ([https](https://example.org:9999/base/people/123/addresses/DE) result ConnectTimeoutException).
* [ ] http://example.org:9999/next (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/next ([https](https://example.org:9999/next) result ConnectTimeoutException).
* [ ] http://example.org:9999/path?q=foo (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/path?q=foo ([https](https://example.org:9999/path?q=foo) result ConnectTimeoutException).
* [ ] http://foo.com:8080/v1/bar?id=123 (ConnectTimeoutException) with 1 occurrences migrated to:
  https://foo.com:8080/v1/bar?id=123 ([https](https://foo.com:8080/v1/bar?id=123) result ConnectTimeoutException).
* [ ] http://mydomain1.com:123 (ConnectTimeoutException) with 1 occurrences migrated to:
  https://mydomain1.com:123 ([https](https://mydomain1.com:123) result ConnectTimeoutException).
* [ ] http://site1.com (ConnectTimeoutException) with 13 occurrences migrated to:
  https://site1.com ([https](https://site1.com) result ConnectTimeoutException).
* [ ] http://wwws.sun.com/software/xml/developers/diffmk/ (ConnectTimeoutException) with 1 occurrences migrated to:
  https://wwws.sun.com/software/xml/developers/diffmk/ ([https](https://wwws.sun.com/software/xml/developers/diffmk/) result ConnectTimeoutException).
* [ ] http://www.w3.org/TR/html4/loose.dtd (ReadTimeoutException) with 5 occurrences migrated to:
  https://www.w3.org/TR/html4/loose.dtd ([https](https://www.w3.org/TR/html4/loose.dtd) result ReadTimeoutException).
* [ ] http://DOMAIN2.com (UnknownHostException) with 2 occurrences migrated to:
  https://DOMAIN2.com ([https](https://DOMAIN2.com) result UnknownHostException).
* [ ] http://a.example.org/mvc-showcase (UnknownHostException) with 1 occurrences migrated to:
  https://a.example.org/mvc-showcase ([https](https://a.example.org/mvc-showcase) result UnknownHostException).
* [ ] http://arjen:foobar@java.sun.com:80 (UnknownHostException) with 1 occurrences migrated to:
  https://arjen:foobar@java.sun.com:80 ([https](https://arjen:foobar@java.sun.com:80) result UnknownHostException).
* [ ] http://dev.bar.com (UnknownHostException) with 3 occurrences migrated to:
  https://dev.bar.com ([https](https://dev.bar.com) result UnknownHostException).
* [ ] http://domain1.com (UnknownHostException) with 25 occurrences migrated to:
  https://domain1.com ([https](https://domain1.com) result UnknownHostException).
* [ ] http://domain1.com/test.html (UnknownHostException) with 4 occurrences migrated to:
  https://domain1.com/test.html ([https](https://domain1.com/test.html) result UnknownHostException).
* [ ] http://domain2.com (UnknownHostException) with 98 occurrences migrated to:
  https://domain2.com ([https](https://domain2.com) result UnknownHostException).
* [ ] http://example.com&quot;,HttpMethod.GET (UnknownHostException) with 6 occurrences migrated to:
  https://example.com&quot;,HttpMethod.GET ([https](https://example.com&quot;,HttpMethod.GET) result UnknownHostException).
* [ ] http://foo.bar.com (UnknownHostException) with 4 occurrences migrated to:
  https://foo.bar.com ([https](https://foo.bar.com) result UnknownHostException).
* [ ] http://joe.openid.example.org/ (UnknownHostException) with 2 occurrences migrated to:
  https://joe.openid.example.org/ ([https](https://joe.openid.example.org/) result UnknownHostException).
* [ ] http://myserver/logo.png (UnknownHostException) with 1 occurrences migrated to:
  https://myserver/logo.png ([https](https://myserver/logo.png) result UnknownHostException).
* [ ] http://samples.springframework.org/order (UnknownHostException) with 2 occurrences migrated to:
  https://samples.springframework.org/order ([https](https://samples.springframework.org/order) result UnknownHostException).
* [ ] http://url.somewhere.com (UnknownHostException) with 25 occurrences migrated to:
  https://url.somewhere.com ([https](https://url.somewhere.com) result UnknownHostException).
* [ ] http://url.somewhere.com/path (UnknownHostException) with 1 occurrences migrated to:
  https://url.somewhere.com/path ([https](https://url.somewhere.com/path) result UnknownHostException).
* [ ] http://url.somewhere.com/path?id=1 (UnknownHostException) with 1 occurrences migrated to:
  https://url.somewhere.com/path?id=1 ([https](https://url.somewhere.com/path?id=1) result UnknownHostException).
* [ ] http://url.somewhere.com/test.htm (UnknownHostException) with 2 occurrences migrated to:
  https://url.somewhere.com/test.htm ([https](https://url.somewhere.com/test.htm) result UnknownHostException).
* [ ] http://url.somewhere.com?a=b&c=d (UnknownHostException) with 1 occurrences migrated to:
  https://url.somewhere.com?a=b&c=d ([https](https://url.somewhere.com?a=b&c=d) result UnknownHostException).
* [ ] http://url.somewhere.com?foo= (UnknownHostException) with 2 occurrences migrated to:
  https://url.somewhere.com?foo= ([https](https://url.somewhere.com?foo=) result UnknownHostException).
* [ ] http://url.somewhere.com?foo=bar (UnknownHostException) with 4 occurrences migrated to:
  https://url.somewhere.com?foo=bar ([https](https://url.somewhere.com?foo=bar) result UnknownHostException).
* [ ] http://url.somewhere.com?foo=bar&a=b&c=d (UnknownHostException) with 2 occurrences migrated to:
  https://url.somewhere.com?foo=bar&a=b&c=d ([https](https://url.somewhere.com?foo=bar&a=b&c=d) result UnknownHostException).
* [ ] http://wiki.fasterxml.com/JacksonHome (UnknownHostException) with 3 occurrences migrated to:
  https://wiki.fasterxml.com/JacksonHome ([https](https://wiki.fasterxml.com/JacksonHome) result UnknownHostException).
* [ ] http://wiki.fasterxml.com/JacksonJsonViews (UnknownHostException) with 4 occurrences migrated to:
  https://wiki.fasterxml.com/JacksonJsonViews ([https](https://wiki.fasterxml.com/JacksonJsonViews) result UnknownHostException).
* [ ] http://x.y.z (UnknownHostException) with 2 occurrences migrated to:
  https://x.y.z ([https](https://x.y.z) result UnknownHostException).
* [ ] http://abc.com/v1 (301) with 1 occurrences migrated to:
  https://abc.go.com/v1 ([https](https://abc.com/v1) result 404).
* [ ] http://abc.com/v1/accounts/43 (301) with 1 occurrences migrated to:
  https://abc.go.com/v1/accounts/43 ([https](https://abc.com/v1/accounts/43) result 404).
* [ ] http://abc.com/v1/accounts?q=12 (301) with 1 occurrences migrated to:
  https://abc.go.com/v1/accounts?q=12 ([https](https://abc.com/v1/accounts?q=12) result 404).
* [ ] http://abc.com/v2/accounts?q=12 (301) with 1 occurrences migrated to:
  https://abc.go.com/v2/accounts?q=12 ([https](https://abc.com/v2/accounts?q=12) result 404).
* [ ] http://docs.spring.io/v1/bar (301) with 1 occurrences migrated to:
  https://docs.spring.io/v1/bar ([https](https://docs.spring.io/v1/bar) result 404).
* [ ] http://example.com/-foo (404) with 2 occurrences migrated to:
  https://example.com/-foo ([https](https://example.com/-foo) result 404).
* [ ] http://example.com/1 (404) with 1 occurrences migrated to:
  https://example.com/1 ([https](https://example.com/1) result 404).
* [ ] http://example.com/1/2 (404) with 2 occurrences migrated to:
  https://example.com/1/2 ([https](https://example.com/1/2) result 404).
* [ ] http://example.com/2 (404) with 1 occurrences migrated to:
  https://example.com/2 ([https](https://example.com/2) result 404).
* [ ] http://example.com/a%20b?q=a%2Bb (404) with 1 occurrences migrated to:
  https://example.com/a%20b?q=a%2Bb ([https](https://example.com/a%20b?q=a%2Bb) result 404).
* [ ] http://example.com/abc/ (404) with 1 occurrences migrated to:
  https://example.com/abc/ ([https](https://example.com/abc/) result 404).
* [ ] http://example.com/abc/x/y (404) with 1 occurrences migrated to:
  https://example.com/abc/x/y ([https](https://example.com/abc/x/y) result 404).
* [ ] http://example.com/abc/x/y/z (404) with 3 occurrences migrated to:
  https://example.com/abc/x/y/z ([https](https://example.com/abc/x/y/z) result 404).
* [ ] http://example.com/app/login/authenticate (404) with 1 occurrences migrated to:
  https://example.com/app/login/authenticate ([https](https://example.com/app/login/authenticate) result 404).
* [ ] http://example.com/arbitrary/path (404) with 1 occurrences migrated to:
  https://example.com/arbitrary/path ([https](https://example.com/arbitrary/path) result 404).
* [ ] http://example.com/bar (404) with 6 occurrences migrated to:
  https://example.com/bar ([https](https://example.com/bar) result 404).
* [ ] http://example.com/context.xml (404) with 4 occurrences migrated to:
  https://example.com/context.xml ([https](https://example.com/context.xml) result 404).
* [ ] http://example.com/example (404) with 6 occurrences migrated to:
  https://example.com/example ([https](https://example.com/example) result 404).
* [ ] http://example.com/example/?name (404) with 1 occurrences migrated to:
  https://example.com/example/?name ([https](https://example.com/example/?name) result 404).
* [ ] http://example.com/example/?name= (404) with 1 occurrences migrated to:
  https://example.com/example/?name= ([https](https://example.com/example/?name=) result 404).
* [ ] http://example.com/example/?name=%20 (404) with 1 occurrences migrated to:
  https://example.com/example/?name=%20 ([https](https://example.com/example/?name=%20) result 404).
* [ ] http://example.com/example/?name=row%5B0%5D (404) with 1 occurrences migrated to:
  https://example.com/example/?name=row%5B0%5D ([https](https://example.com/example/?name=row%5B0%5D) result 404).
* [ ] http://example.com/example/?name=value (404) with 1 occurrences migrated to:
  https://example.com/example/?name=value ([https](https://example.com/example/?name=value) result 404).
* [ ] http://example.com/example/?name=value&param2=value+2 (404) with 1 occurrences migrated to:
  https://example.com/example/?name=value&param2=value+2 ([https](https://example.com/example/?name=value&param2=value+2) result 404).
* [ ] http://example.com/example/?row%5B0%5D=value (404) with 1 occurrences migrated to:
  https://example.com/example/?row%5B0%5D=value ([https](https://example.com/example/?row%5B0%5D=value) result 404).
* [ ] http://example.com/foo (404) with 6 occurrences migrated to:
  https://example.com/foo ([https](https://example.com/foo) result 404).
* [ ] http://example.com/foo/../bar (404) with 1 occurrences migrated to:
  https://example.com/foo/../bar ([https](https://example.com/foo/../bar) result 404).
* [ ] http://example.com/foo/foo2?bar (404) with 1 occurrences migrated to:
  https://example.com/foo/foo2?bar ([https](https://example.com/foo/foo2?bar) result 404).
* [ ] http://example.com/foo?bar (404) with 4 occurrences migrated to:
  https://example.com/foo?bar ([https](https://example.com/foo?bar) result 404).
* [ ] http://example.com/foo?bar= (404) with 2 occurrences migrated to:
  https://example.com/foo?bar= ([https](https://example.com/foo?bar=) result 404).
* [ ] http://example.com/foo?bar=baz (404) with 2 occurrences migrated to:
  https://example.com/foo?bar=baz ([https](https://example.com/foo?bar=baz) result 404).
* [ ] http://example.com/foo?baz=42 (404) with 1 occurrences migrated to:
  https://example.com/foo?baz=42 ([https](https://example.com/foo?baz=42) result 404).
* [ ] http://example.com/foo?foo=bar&baz=qux (404) with 2 occurrences migrated to:
  https://example.com/foo?foo=bar&baz=qux ([https](https://example.com/foo?foo=bar&baz=qux) result 404).
* [ ] http://example.com/hotel (404) with 3 occurrences migrated to:
  https://example.com/hotel ([https](https://example.com/hotel) result 404).
* [ ] http://example.com/hotel%20list (404) with 1 occurrences migrated to:
  https://example.com/hotel%20list ([https](https://example.com/hotel%20list) result 404).
* [ ] http://example.com/hotel%20list/Z (404) with 1 occurrences migrated to:
  https://example.com/hotel%20list/Z ([https](https://example.com/hotel%20list/Z) result 404).
* [ ] http://example.com/hotel%20list/Z%C3%BCrich (404) with 3 occurrences migrated to:
  https://example.com/hotel%20list/Z%C3%BCrich ([https](https://example.com/hotel%20list/Z%C3%BCrich) result 404).
* [ ] http://example.com/hotels (404) with 3 occurrences migrated to:
  https://example.com/hotels ([https](https://example.com/hotels) result 404).
* [ ] http://example.com/hotels/ (404) with 15 occurrences migrated to:
  https://example.com/hotels/ ([https](https://example.com/hotels/) result 404).
* [ ] http://example.com/hotels/1/bookings/42 (404) with 1 occurrences migrated to:
  https://example.com/hotels/1/bookings/42 ([https](https://example.com/hotels/1/bookings/42) result 404).
* [ ] http://example.com/hotels/1/pic/pics%2Flogo.png/size/150x150 (404) with 2 occurrences migrated to:
  https://example.com/hotels/1/pic/pics%2Flogo.png/size/150x150 ([https](https://example.com/hotels/1/pic/pics%2Flogo.png/size/150x150) result 404).
* [ ] http://example.com/hotels/1/pic/pics/logo.png (404) with 1 occurrences migrated to:
  https://example.com/hotels/1/pic/pics/logo.png ([https](https://example.com/hotels/1/pic/pics/logo.png) result 404).
* [ ] http://example.com/hotels/42/bookings/21 (404) with 1 occurrences migrated to:
  https://example.com/hotels/42/bookings/21 ([https](https://example.com/hotels/42/bookings/21) result 404).
* [ ] http://example.com/hotels/42/bookings/42 (404) with 1 occurrences migrated to:
  https://example.com/hotels/42/bookings/42 ([https](https://example.com/hotels/42/bookings/42) result 404).
* [ ] http://example.com/hotels/Rest%20%26%20Relax/bookings/42 (404) with 2 occurrences migrated to:
  https://example.com/hotels/Rest%20%26%20Relax/bookings/42 ([https](https://example.com/hotels/Rest%20%26%20Relax/bookings/42) result 404).
* [ ] http://example.com/info (404) with 2 occurrences migrated to:
  https://example.com/info ([https](https://example.com/info) result 404).
* [ ] http://example.com/invalid (404) with 1 occurrences migrated to:
  https://example.com/invalid ([https](https://example.com/invalid) result 404).
* [ ] http://example.com/jquery-1.11.0.min.js (404) with 2 occurrences migrated to:
  https://example.com/jquery-1.11.0.min.js ([https](https://example.com/jquery-1.11.0.min.js) result 404).
* [ ] http://example.com/match (404) with 1 occurrences migrated to:
  https://example.com/match ([https](https://example.com/match) result 404).
* [ ] http://example.com/myFileUpload (404) with 1 occurrences migrated to:
  https://example.com/myFileUpload ([https](https://example.com/myFileUpload) result 404).
* [ ] http://example.com/myForm (404) with 1 occurrences migrated to:
  https://example.com/myForm ([https](https://example.com/myForm) result 404).
* [ ] http://example.com/path (404) with 4 occurrences migrated to:
  https://example.com/path ([https](https://example.com/path) result 404).
* [ ] http://example.com/path?query (404) with 2 occurrences migrated to:
  https://example.com/path?query ([https](https://example.com/path?query) result 404).
* [ ] http://example.com/path?query=foo (404) with 1 occurrences migrated to:
  https://example.com/path?query=foo ([https](https://example.com/path?query=foo) result 404).
* [ ] http://example.com/people (404) with 1 occurrences migrated to:
  https://example.com/people ([https](https://example.com/people) result 404).
* [ ] http://example.com/people/ (404) with 1 occurrences migrated to:
  https://example.com/people/ ([https](https://example.com/people/) result 404).
* [ ] http://example.com/prefix/path (404) with 2 occurrences migrated to:
  https://example.com/prefix/path ([https](https://example.com/prefix/path) result 404).
* [ ] http://example.com/resource (404) with 5 occurrences migrated to:
  https://example.com/resource ([https](https://example.com/resource) result 404).
* [ ] http://example.com/resource?access_token=123 (404) with 1 occurrences migrated to:
  https://example.com/resource?access_token=123 ([https](https://example.com/resource?access_token=123) result 404).
* [ ] http://example.com/spaces (404) with 1 occurrences migrated to:
  https://example.com/spaces ([https](https://example.com/spaces) result 404).
* [ ] http://example.com/spaces%20and%20%E2%82%AC (404) with 3 occurrences migrated to:
  https://example.com/spaces%20and%20%E2%82%AC ([https](https://example.com/spaces%20and%20%E2%82%AC) result 404).
* [ ] http://example.com/spring/ (404) with 1 occurrences migrated to:
  https://example.com/spring/ ([https](https://example.com/spring/) result 404).
* [ ] http://example.com/test/this/here (404) with 1 occurrences migrated to:
  https://example.com/test/this/here ([https](https://example.com/test/this/here) result 404).
* [ ] http://example.com/upload (404) with 1 occurrences migrated to:
  https://example.com/upload ([https](https://example.com/upload) result 404).
* [ ] http://example.com/user (404) with 1 occurrences migrated to:
  https://example.com/user ([https](https://example.com/user) result 404).
* [ ] http://example.org/fonts/css (404) with 6 occurrences migrated to:
  https://example.org/fonts/css ([https](https://example.org/fonts/css) result 404).
* [ ] http://example.org/foo/page.html (404) with 1 occurrences migrated to:
  https://example.org/foo/page.html ([https](https://example.org/foo/page.html) result 404).
* [ ] http://example.org/image.png (404) with 4 occurrences migrated to:
  https://example.org/image.png ([https](https://example.org/image.png) result 404).
* [ ] http://example.org/music/people (404) with 4 occurrences migrated to:
  https://example.org/music/people ([https](https://example.org/music/people) result 404).
* [ ] http://example.org/page.cache.html (404) with 1 occurrences migrated to:
  https://example.org/page.cache.html ([https](https://example.org/page.cache.html) result 404).
* [ ] http://example.org/path (404) with 3 occurrences migrated to:
  https://example.org/path ([https](https://example.org/path) result 404).
* [ ] http://springframework.org/oxm-test (404) with 2 occurrences migrated to:
  https://springframework.org/oxm-test ([https](https://springframework.org/oxm-test) result 404).
* [ ] http://aaa.org:8080/app/b/c/d (301) with 1 occurrences migrated to:
  https://www.aaa.org/app/b/c/d ([https](https://aaa.org:8080/app/b/c/d) result 404).
* [ ] http://www.example.com/favicon.ico (404) with 2 occurrences migrated to:
  https://www.example.com/favicon.ico ([https](https://www.example.com/favicon.ico) result 404).
* [ ] http://www.example.com/foo/bar (404) with 1 occurrences migrated to:
  https://www.example.com/foo/bar ([https](https://www.example.com/foo/bar) result 404).
* [ ] http://www.example.com/hotels (404) with 2 occurrences migrated to:
  https://www.example.com/hotels ([https](https://www.example.com/hotels) result 404).
* [ ] http://www.example.com/user/ (404) with 4 occurrences migrated to:
  https://www.example.com/user/ ([https](https://www.example.com/user/) result 404).
* [ ] http://www.example.com/user/john%3Bdoe/dashboard (404) with 4 occurrences migrated to:
  https://www.example.com/user/john%3Bdoe/dashboard ([https](https://www.example.com/user/john%3Bdoe/dashboard) result 404).
* [ ] http://www.example.com/user/john;doe/dashboard (404) with 2 occurrences migrated to:
  https://www.example.com/user/john;doe/dashboard ([https](https://www.example.com/user/john;doe/dashboard) result 404).
* [ ] http://www.ibm.com/developerworks/websphere/library/techarticles/0404_tang/0404_tang.html (301) with 1 occurrences migrated to:
  https://www.ibm.com/developerworks/websphere/library/techarticles/0404_tang/0404_tang.html ([https](https://www.ibm.com/developerworks/websphere/library/techarticles/0404_tang/0404_tang.html) result 404).
* [ ] http://mydomain1.com:80/path (301) with 2 occurrences migrated to:
  https://www.mydomain1.com/path ([https](https://mydomain1.com:80/path) result 404).
* [ ] http://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-03 (404) with 1 occurrences migrated to:
  https://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-03 ([https](https://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-03) result 404).
* [ ] http://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html (301) with 1 occurrences migrated to:
  https://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html ([https](https://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html) result 404).
* [ ] http://xml.apache.org/xslt (404) with 3 occurrences migrated to:
  https://xml.apache.org/xslt ([https](https://xml.apache.org/xslt) result 404).
* [ ] http://myhost.com/resource/path/myTemplate.txt (500) with 1 occurrences migrated to:
  https://myhost.com/resource/path/myTemplate.txt ([https](https://myhost.com/resource/path/myTemplate.txt) result 500).

These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://activemq.apache.org/delete-inactive-destinations.html with 1 occurrences migrated to:
  https://activemq.apache.org/delete-inactive-destinations.html ([https](https://activemq.apache.org/delete-inactive-destinations.html) result 200).
* [ ] http://activemq.apache.org/stomp.html with 1 occurrences migrated to:
  https://activemq.apache.org/stomp.html ([https](https://activemq.apache.org/stomp.html) result 200).
* [ ] http://ant.apache.org with 1 occurrences migrated to:
  https://ant.apache.org ([https](https://ant.apache.org) result 200).
* [ ] http://asciidoctor.org/ with 1 occurrences migrated to:
  https://asciidoctor.org/ ([https](https://asciidoctor.org/) result 200).
* [ ] http://asciidoctor.org/docs/editing-asciidoc-with-live-preview/ with 2 occurrences migrated to:
  https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/ ([https](https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/) result 200).
* [ ] http://beanvalidation.org/ with 1 occurrences migrated to:
  https://beanvalidation.org/ ([https](https://beanvalidation.org/) result 200).
* [ ] http://caniuse.com/ with 2 occurrences migrated to:
  https://caniuse.com/ ([https](https://caniuse.com/) result 200).
* [ ] http://castor-data-binding.github.io/castor/reference-guides/1.3.3/html-single/index.html with 2 occurrences migrated to:
  https://castor-data-binding.github.io/castor/reference-guides/1.3.3/html-single/index.html ([https](https://castor-data-binding.github.io/castor/reference-guides/1.3.3/html-single/index.html) result 200).
* [ ] http://cbor.io/ with 1 occurrences migrated to:
  https://cbor.io/ ([https](https://cbor.io/) result 200).
* [ ] http://code.jquery.com/jquery-1.11.0.min.js with 2 occurrences migrated to:
  https://code.jquery.com/jquery-1.11.0.min.js ([https](https://code.jquery.com/jquery-1.11.0.min.js) result 200).
* [ ] http://code.jquery.com/jquery.js with 1 occurrences migrated to:
  https://code.jquery.com/jquery.js ([https](https://code.jquery.com/jquery.js) result 200).
* [ ] http://commons.apache.org/proper/commons-lang/ with 2 occurrences migrated to:
  https://commons.apache.org/proper/commons-lang/ ([https](https://commons.apache.org/proper/commons-lang/) result 200).
* [ ] http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html ([https](https://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html) result 200).
* [ ] http://docs.oracle.com/javase/8/docs/api/java/beans/package-summary.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/8/docs/api/java/beans/package-summary.html ([https](https://docs.oracle.com/javase/8/docs/api/java/beans/package-summary.html) result 200).
* [ ] http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html ([https](https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html) result 200).
* [ ] http://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngineFactory.html with 2 occurrences migrated to:
  https://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngineFactory.html ([https](https://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngineFactory.html) result 200).
* [ ] http://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html ([https](https://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html) result 200).
* [ ] http://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html ([https](https://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html) result 200).
* [ ] http://docs.seleniumhq.org/ with 1 occurrences migrated to:
  https://docs.seleniumhq.org/ ([https](https://docs.seleniumhq.org/) result 200).
* [ ] http://docs.seleniumhq.org/projects/webdriver/ with 1 occurrences migrated to:
  https://docs.seleniumhq.org/projects/webdriver/ ([https](https://docs.seleniumhq.org/projects/webdriver/) result 200).
* [ ] http://docs.spring.io/spring-framework/docs/current/javadoc-api/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-framework/docs/current/javadoc-api/ ([https](https://docs.spring.io/spring-framework/docs/current/javadoc-api/) result 200).
* [ ] http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/view/script/ScriptTemplateView.html with 1 occurrences migrated to:
  https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/view/script/ScriptTemplateView.html ([https](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/view/script/ScriptTemplateView.html) result 200).
* [ ] http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/ ([https](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/) result 200).
* [ ] http://docs.spring.io/spring-session/docs/current/reference/html5/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-session/docs/current/reference/html5/ ([https](https://docs.spring.io/spring-session/docs/current/reference/html5/) result 200).
* [ ] http://en.wikipedia.org/wiki/Adapter_pattern with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Adapter_pattern ([https](https://en.wikipedia.org/wiki/Adapter_pattern) result 200).
* [ ] http://en.wikipedia.org/wiki/Halting_Problem with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Halting_Problem ([https](https://en.wikipedia.org/wiki/Halting_Problem) result 200).
* [ ] http://en.wikipedia.org/wiki/List_of_HTTP_status_codes with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/List_of_HTTP_status_codes ([https](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) result 200).
* [ ] http://en.wikipedia.org/wiki/MIME with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/MIME ([https](https://en.wikipedia.org/wiki/MIME) result 200).
* [ ] http://en.wikipedia.org/wiki/Mock_Object with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Mock_Object ([https](https://en.wikipedia.org/wiki/Mock_Object) result 200).
* [ ] http://en.wikipedia.org/wiki/Polyfill with 2 occurrences migrated to:
  https://en.wikipedia.org/wiki/Polyfill ([https](https://en.wikipedia.org/wiki/Polyfill) result 200).
* [ ] http://example.com with 132 occurrences migrated to:
  https://example.com ([https](https://example.com) result 200).
* [ ] http://example.com/ with 16 occurrences migrated to:
  https://example.com/ ([https](https://example.com/) result 200).
* [ ] http://example.com?foo with 2 occurrences migrated to:
  https://example.com?foo ([https](https://example.com?foo) result 200).
* [ ] http://example.com?foo=bar with 8 occurrences migrated to:
  https://example.com?foo=bar ([https](https://example.com?foo=bar) result 200).
* [ ] http://example.com?foo=bar@baz with 1 occurrences migrated to:
  https://example.com?foo=bar@baz ([https](https://example.com?foo=bar@baz) result 200).
* [ ] http://example.org with 18 occurrences migrated to:
  https://example.org ([https](https://example.org) result 200).
* [ ] http://example.org/ with 1 occurrences migrated to:
  https://example.org/ ([https](https://example.org/) result 200).
* [ ] http://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/DeserializationFeature.html with 2 occurrences migrated to:
  https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/DeserializationFeature.html ([https](https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/DeserializationFeature.html) result 200).
* [ ] http://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/MapperFeature.html with 2 occurrences migrated to:
  https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/MapperFeature.html ([https](https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/MapperFeature.html) result 200).
* [ ] http://h2database.com with 1 occurrences migrated to:
  https://h2database.com ([https](https://h2database.com) result 200).
* [ ] http://handlebarsjs.com with 2 occurrences migrated to:
  https://handlebarsjs.com ([https](https://handlebarsjs.com) result 200).
* [ ] http://handlebarsjs.com/ with 2 occurrences migrated to:
  https://handlebarsjs.com/ ([https](https://handlebarsjs.com/) result 200).
* [ ] http://hc.apache.org/httpcomponents-asyncclient-dev/ with 1 occurrences migrated to:
  https://hc.apache.org/httpcomponents-asyncclient-dev/ ([https](https://hc.apache.org/httpcomponents-asyncclient-dev/) result 200).
* [ ] http://hc.apache.org/httpcomponents-client-ga/ with 2 occurrences migrated to:
  https://hc.apache.org/httpcomponents-client-ga/ ([https](https://hc.apache.org/httpcomponents-client-ga/) result 200).
* [ ] http://hc.apache.org/httpcomponents-client-ga/httpclient/ with 1 occurrences migrated to:
  https://hc.apache.org/httpcomponents-client-ga/httpclient/ ([https](https://hc.apache.org/httpcomponents-client-ga/httpclient/) result 200).
* [ ] http://www.hibernate.org/ (301) with 1 occurrences migrated to:
  https://hibernate.org/ ([https](https://www.hibernate.org/) result 200).
* [ ] http://www.hibernate.org (301) with 1 occurrences migrated to:
  https://hibernate.org/ ([https](https://www.hibernate.org) result 200).
* [ ] http://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html with 1 occurrences migrated to:
  https://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html ([https](https://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html) result 200).
* [ ] http://jcp.org/aboutJava/communityprocess/final/jsr160/index.html with 1 occurrences migrated to:
  https://jcp.org/aboutJava/communityprocess/final/jsr160/index.html ([https](https://jcp.org/aboutJava/communityprocess/final/jsr160/index.html) result 200).
* [ ] http://jcp.org/en/jsr/detail?id=107 with 1 occurrences migrated to:
  https://jcp.org/en/jsr/detail?id=107 ([https](https://jcp.org/en/jsr/detail?id=107) result 200).
* [ ] http://joel-costigliola.github.io/assertj/ with 3 occurrences migrated to:
  https://joel-costigliola.github.io/assertj/ ([https](https://joel-costigliola.github.io/assertj/) result 200).
* [ ] http://jsonassert.skyscreamer.org with 1 occurrences migrated to:
  https://jsonassert.skyscreamer.org ([https](https://jsonassert.skyscreamer.org) result 200).
* [ ] http://jsonassert.skyscreamer.org/ with 5 occurrences migrated to:
  https://jsonassert.skyscreamer.org/ ([https](https://jsonassert.skyscreamer.org/) result 200).
* [ ] http://junit.org/junit5/docs/current/user-guide/ with 2 occurrences migrated to:
  https://junit.org/junit5/docs/current/user-guide/ ([https](https://junit.org/junit5/docs/current/user-guide/) result 200).
* [ ] http://kotlinlang.org/ with 2 occurrences migrated to:
  https://kotlinlang.org/ ([https](https://kotlinlang.org/) result 200).
* [ ] http://kotlinlang.org/docs/reference/ with 1 occurrences migrated to:
  https://kotlinlang.org/docs/reference/ ([https](https://kotlinlang.org/docs/reference/) result 200).
* [ ] http://kotlinlang.org/docs/reference/classes.html with 3 occurrences migrated to:
  https://kotlinlang.org/docs/reference/classes.html ([https](https://kotlinlang.org/docs/reference/classes.html) result 200).
* [ ] http://mydomain.com with 5 occurrences migrated to:
  https://mydomain.com ([https](https://mydomain.com) result 200).
* [ ] http://netty.io/ with 1 occurrences migrated to:
  https://netty.io/ ([https](https://netty.io/) result 200).
* [ ] http://openjdk.java.net/jeps/290 with 1 occurrences migrated to:
  https://openjdk.java.net/jeps/290 ([https](https://openjdk.java.net/jeps/290) result 200).
* [ ] http://openjdk.java.net/projects/nashorn/ with 10 occurrences migrated to:
  https://openjdk.java.net/projects/nashorn/ ([https](https://openjdk.java.net/projects/nashorn/) result 200).
* [ ] http://poi.apache.org with 3 occurrences migrated to:
  https://poi.apache.org ([https](https://poi.apache.org) result 200).
* [ ] http://projects.spring.io/spring-boot/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-boot/ ([https](https://projects.spring.io/spring-boot/) result 200).
* [ ] http://projects.spring.io/spring-data/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-data/ ([https](https://projects.spring.io/spring-data/) result 200).
* [ ] http://projects.spring.io/spring-framework/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-framework/ ([https](https://projects.spring.io/spring-framework/) result 200).
* [ ] http://projects.spring.io/spring-integration/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-integration/ ([https](https://projects.spring.io/spring-integration/) result 200).
* [ ] http://projects.spring.io/spring-security/ with 3 occurrences migrated to:
  https://projects.spring.io/spring-security/ ([https](https://projects.spring.io/spring-security/) result 200).
* [ ] http://repo1.maven.org/maven2/javax/inject/javax.inject/1/ with 2 occurrences migrated to:
  https://repo1.maven.org/maven2/javax/inject/javax.inject/1/ ([https](https://repo1.maven.org/maven2/javax/inject/javax.inject/1/) result 200).
* [ ] http://schema.spring.io/mvc/spring-mvc.xsd with 1 occurrences migrated to:
  https://schema.spring.io/mvc/spring-mvc.xsd ([https](https://schema.spring.io/mvc/spring-mvc.xsd) result 200).
* [ ] http://search.maven.org/ with 2 occurrences migrated to:
  https://search.maven.org/ ([https](https://search.maven.org/) result 200).
* [ ] http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html with 3 occurrences migrated to:
  https://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html ([https](https://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html) result 200).
* [ ] http://sourceforge.net with 1 occurrences migrated to:
  https://sourceforge.net ([https](https://sourceforge.net) result 200).
* [ ] http://sourceforge.net/projects/javadiff/ with 1 occurrences migrated to:
  https://sourceforge.net/projects/javadiff/ ([https](https://sourceforge.net/projects/javadiff/) result 200).
* [ ] http://sourceforge.net/sflogo.php?group_id=37160 with 1 occurrences migrated to:
  https://sourceforge.net/sflogo.php?group_id=37160 ([https](https://sourceforge.net/sflogo.php?group_id=37160) result 200).
* [ ] http://spring.io/blog/ with 1 occurrences migrated to:
  https://spring.io/blog/ ([https](https://spring.io/blog/) result 200).
* [ ] http://spring.io/blog/category/news with 1 occurrences migrated to:
  https://spring.io/blog/category/news ([https](https://spring.io/blog/category/news) result 200).
* [ ] http://square.github.io/okhttp/ with 1 occurrences migrated to:
  https://square.github.io/okhttp/ ([https](https://square.github.io/okhttp/) result 200).
* [ ] http://stackoverflow.com/questions/1481251/what-does-document-domain-document-domain-do with 1 occurrences migrated to:
  https://stackoverflow.com/questions/1481251/what-does-document-domain-document-domain-do ([https](https://stackoverflow.com/questions/1481251/what-does-document-domain-document-domain-do) result 200).
* [ ] http://stackoverflow.com/questions/19394570/java-jre-7u45-breaks-classloader-getresources with 2 occurrences migrated to:
  https://stackoverflow.com/questions/19394570/java-jre-7u45-breaks-classloader-getresources ([https](https://stackoverflow.com/questions/19394570/java-jre-7u45-breaks-classloader-getresources) result 200).
* [ ] http://stackoverflow.com/questions/22986109/testing-spring-managed-servlet with 1 occurrences migrated to:
  https://stackoverflow.com/questions/22986109/testing-spring-managed-servlet ([https](https://stackoverflow.com/questions/22986109/testing-spring-managed-servlet) result 200).
* [ ] http://stackoverflow.com/questions/24725438/what-could-cause-a-class-implementing-applicationlistenercontextrefreshedevent with 1 occurrences migrated to:
  https://stackoverflow.com/questions/24725438/what-could-cause-a-class-implementing-applicationlistenercontextrefreshedevent ([https](https://stackoverflow.com/questions/24725438/what-could-cause-a-class-implementing-applicationlistenercontextrefreshedevent) result 200).
* [ ] http://stackoverflow.com/questions/35733344/can-contextconfiguration-in-a-custom-annotation-be-merged with 1 occurrences migrated to:
  https://stackoverflow.com/questions/35733344/can-contextconfiguration-in-a-custom-annotation-be-merged ([https](https://stackoverflow.com/questions/35733344/can-contextconfiguration-in-a-custom-annotation-be-merged) result 200).
* [ ] http://start.spring.io/ with 2 occurrences migrated to:
  https://start.spring.io/ ([https](https://start.spring.io/) result 200).
* [ ] http://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html with 1 occurrences migrated to:
  https://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html ([https](https://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html) result 200).
* [ ] http://stomp.github.io/stomp-specification-1.2.html with 9 occurrences migrated to:
  https://stomp.github.io/stomp-specification-1.2.html ([https](https://stomp.github.io/stomp-specification-1.2.html) result 200).
* [ ] http://struts.apache.org with 1 occurrences migrated to:
  https://struts.apache.org ([https](https://struts.apache.org) result 200).
* [ ] http://struts.apache.org/ with 1 occurrences migrated to:
  https://struts.apache.org/ ([https](https://struts.apache.org/) result 200).
* [ ] http://tapestry.apache.org/ with 2 occurrences migrated to:
  https://tapestry.apache.org/ ([https](https://tapestry.apache.org/) result 200).
* [ ] http://tiles.apache.org with 4 occurrences migrated to:
  https://tiles.apache.org ([https](https://tiles.apache.org) result 200).
* [ ] http://tiles.apache.org/framework/dependency-management.html with 1 occurrences migrated to:
  https://tiles.apache.org/framework/dependency-management.html ([https](https://tiles.apache.org/framework/dependency-management.html) result 200).
* [ ] http://tools.ietf.org/html/rfc1945 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc1945 ([https](https://tools.ietf.org/html/rfc1945) result 200).
* [ ] http://tools.ietf.org/html/rfc2109 with 2 occurrences migrated to:
  https://tools.ietf.org/html/rfc2109 ([https](https://tools.ietf.org/html/rfc2109) result 200).
* [ ] http://tools.ietf.org/html/rfc2295 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2295 ([https](https://tools.ietf.org/html/rfc2295) result 200).
* [ ] http://tools.ietf.org/html/rfc2324 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2324 ([https](https://tools.ietf.org/html/rfc2324) result 200).
* [ ] http://tools.ietf.org/html/rfc2518 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2518 ([https](https://tools.ietf.org/html/rfc2518) result 200).
* [ ] http://tools.ietf.org/html/rfc2616 with 3 occurrences migrated to:
  https://tools.ietf.org/html/rfc2616 ([https](https://tools.ietf.org/html/rfc2616) result 200).
* [ ] http://tools.ietf.org/html/rfc2774 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2774 ([https](https://tools.ietf.org/html/rfc2774) result 200).
* [ ] http://tools.ietf.org/html/rfc2817 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2817 ([https](https://tools.ietf.org/html/rfc2817) result 200).
* [ ] http://tools.ietf.org/html/rfc2965 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2965 ([https](https://tools.ietf.org/html/rfc2965) result 200).
* [ ] http://tools.ietf.org/html/rfc3229 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc3229 ([https](https://tools.ietf.org/html/rfc3229) result 200).
* [ ] http://tools.ietf.org/html/rfc3986 with 3 occurrences migrated to:
  https://tools.ietf.org/html/rfc3986 ([https](https://tools.ietf.org/html/rfc3986) result 200).
* [ ] http://tools.ietf.org/html/rfc4918 with 5 occurrences migrated to:
  https://tools.ietf.org/html/rfc4918 ([https](https://tools.ietf.org/html/rfc4918) result 200).
* [ ] http://tools.ietf.org/html/rfc5842 with 2 occurrences migrated to:
  https://tools.ietf.org/html/rfc5842 ([https](https://tools.ietf.org/html/rfc5842) result 200).
* [ ] http://tools.ietf.org/html/rfc5988 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc5988 ([https](https://tools.ietf.org/html/rfc5988) result 200).
* [ ] http://tools.ietf.org/html/rfc6202 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc6202 ([https](https://tools.ietf.org/html/rfc6202) result 200).
* [ ] http://tools.ietf.org/html/rfc6266 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc6266 ([https](https://tools.ietf.org/html/rfc6266) result 200).
* [ ] http://tools.ietf.org/html/rfc6454 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc6454 ([https](https://tools.ietf.org/html/rfc6454) result 200).
* [ ] http://tools.ietf.org/html/rfc6455 with 2 occurrences migrated to:
  https://tools.ietf.org/html/rfc6455 ([https](https://tools.ietf.org/html/rfc6455) result 200).
* [ ] http://tools.ietf.org/html/rfc6585 with 4 occurrences migrated to:
  https://tools.ietf.org/html/rfc6585 ([https](https://tools.ietf.org/html/rfc6585) result 200).
* [ ] http://tools.ietf.org/html/rfc7230 with 10 occurrences migrated to:
  https://tools.ietf.org/html/rfc7230 ([https](https://tools.ietf.org/html/rfc7230) result 200).
* [ ] http://tools.ietf.org/html/rfc7231 with 56 occurrences migrated to:
  https://tools.ietf.org/html/rfc7231 ([https](https://tools.ietf.org/html/rfc7231) result 200).
* [ ] http://tools.ietf.org/html/rfc7232 with 8 occurrences migrated to:
  https://tools.ietf.org/html/rfc7232 ([https](https://tools.ietf.org/html/rfc7232) result 200).
* [ ] http://tools.ietf.org/html/rfc7233 with 12 occurrences migrated to:
  https://tools.ietf.org/html/rfc7233 ([https](https://tools.ietf.org/html/rfc7233) result 200).
* [ ] http://tools.ietf.org/html/rfc7234 with 5 occurrences migrated to:
  https://tools.ietf.org/html/rfc7234 ([https](https://tools.ietf.org/html/rfc7234) result 200).
* [ ] http://tools.ietf.org/html/rfc7235 with 6 occurrences migrated to:
  https://tools.ietf.org/html/rfc7235 ([https](https://tools.ietf.org/html/rfc7235) result 200).
* [ ] http://tools.ietf.org/html/rfc7238 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc7238 ([https](https://tools.ietf.org/html/rfc7238) result 200).
* [ ] http://tools.ietf.org/html/rfc7239 with 7 occurrences migrated to:
  https://tools.ietf.org/html/rfc7239 ([https](https://tools.ietf.org/html/rfc7239) result 200).
* [ ] http://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt with 3 occurrences migrated to:
  https://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt ([https](https://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt) result 200).
* [ ] http://unlicense.org with 1 occurrences migrated to:
  https://unlicense.org ([https](https://unlicense.org) result 200).
* [ ] http://www.amazon.com/exec/obidos/tg/detail/-/0764543857/ with 10 occurrences migrated to:
  https://www.amazon.com/exec/obidos/tg/detail/-/0764543857/ ([https](https://www.amazon.com/exec/obidos/tg/detail/-/0764543857/) result 200).
* [ ] http://www.apache.org with 1 occurrences migrated to:
  https://www.apache.org ([https](https://www.apache.org) result 200).
* [ ] http://www.apple.com/DTDs/PropertyList-1.0.dtd with 6 occurrences migrated to:
  https://www.apple.com/DTDs/PropertyList-1.0.dtd ([https](https://www.apple.com/DTDs/PropertyList-1.0.dtd) result 200).
* [ ] http://www.atomikos.com/ with 1 occurrences migrated to:
  https://www.atomikos.com/ ([https](https://www.atomikos.com/) result 200).
* [ ] http://www.baeldung.com/kotlin-null-safety with 1 occurrences migrated to:
  https://www.baeldung.com/kotlin-null-safety ([https](https://www.baeldung.com/kotlin-null-safety) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/devguide/index.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/devguide/index.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/index.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html) result 200).
* [ ] http://www.eclipse.org/aspectj/dtd/aspectj.dtd with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/dtd/aspectj.dtd ([https](https://www.eclipse.org/aspectj/dtd/aspectj.dtd) result 200).
* [ ] http://ehcache.sourceforge.net (301) with 1 occurrences migrated to:
  https://www.ehcache.org/ ([https](https://ehcache.sourceforge.net) result 200).
* [ ] http://ehcache.org/ (301) with 1 occurrences migrated to:
  https://www.ehcache.org/ ([https](https://ehcache.org/) result 200).
* [ ] http://www.embeddedjs.com/ with 2 occurrences migrated to:
  https://www.embeddedjs.com/ ([https](https://www.embeddedjs.com/) result 200).
* [ ] http://www.enterpriseintegrationpatterns.com with 1 occurrences migrated to:
  https://www.enterpriseintegrationpatterns.com ([https](https://www.enterpriseintegrationpatterns.com) result 200).
* [ ] http://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D with 1 occurrences migrated to:
  https://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D ([https](https://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D) result 200).
* [ ] http://www.google.com with 2 occurrences migrated to:
  https://www.google.com ([https](https://www.google.com) result 200).
* [ ] http://www.h2database.com with 1 occurrences migrated to:
  https://www.h2database.com ([https](https://www.h2database.com) result 200).
* [ ] http://www.h2database.com/html/grammar.html with 1 occurrences migrated to:
  https://www.h2database.com/html/grammar.html ([https](https://www.h2database.com/html/grammar.html) result 200).
* [ ] http://www.ietf.org with 1 occurrences migrated to:
  https://www.ietf.org ([https](https://www.ietf.org) result 200).
* [ ] http://www.ietf.org/rfc/rfc1867.txt with 1 occurrences migrated to:
  https://www.ietf.org/rfc/rfc1867.txt ([https](https://www.ietf.org/rfc/rfc1867.txt) result 200).
* [ ] http://www.ietf.org/rfc/rfc2396.txt with 2 occurrences migrated to:
  https://www.ietf.org/rfc/rfc2396.txt ([https](https://www.ietf.org/rfc/rfc2396.txt) result 200).
* [ ] http://www.ietf.org/rfc/rfc3986.txt with 11 occurrences migrated to:
  https://www.ietf.org/rfc/rfc3986.txt ([https](https://www.ietf.org/rfc/rfc3986.txt) result 200).
* [ ] http://www.infoq.com/ with 1 occurrences migrated to:
  https://www.infoq.com/ ([https](https://www.infoq.com/) result 200).
* [ ] http://www.infoq.com/minibooks/JTDS with 1 occurrences migrated to:
  https://www.infoq.com/minibooks/JTDS ([https](https://www.infoq.com/minibooks/JTDS) result 200).
* [ ] http://www.jetbrains.com/idea/ with 1 occurrences migrated to:
  https://www.jetbrains.com/idea/ ([https](https://www.jetbrains.com/idea/) result 200).
* [ ] http://www.json.org/ with 1 occurrences migrated to:
  https://www.json.org/ ([https](https://www.json.org/) result 200).
* [ ] http://www.jython.org with 2 occurrences migrated to:
  https://www.jython.org ([https](https://www.jython.org) result 200).
* [ ] http://www.jython.org/ with 2 occurrences migrated to:
  https://www.jython.org/ ([https](https://www.jython.org/) result 200).
* [ ] http://www.lowagie.com/iText with 2 occurrences migrated to:
  https://www.lowagie.com/iText ([https](https://www.lowagie.com/iText) result 200).
* [ ] http://www.manpagez.com/man/5/crontab/ with 1 occurrences migrated to:
  https://www.manpagez.com/man/5/crontab/ ([https](https://www.manpagez.com/man/5/crontab/) result 200).
* [ ] http://mydomain1.com:80/ (301) with 2 occurrences migrated to:
  https://www.mydomain1.com/ ([https](https://mydomain1.com:80/) result 200).
* [ ] http://mydomain1.com:80 (301) with 1 occurrences migrated to:
  https://www.mydomain1.com/ ([https](https://mydomain1.com:80) result 200).
* [ ] http://www.oracle.com/technetwork/articles/javaee/jpa-137156.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/articles/javaee/jpa-137156.html ([https](https://www.oracle.com/technetwork/articles/javaee/jpa-137156.html) result 200).
* [ ] http://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html ([https](https://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html) result 200).
* [ ] http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html ([https](https://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html) result 200).
* [ ] http://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html ([https](https://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html) result 200).
* [ ] http://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html ([https](https://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html) result 200).
* [ ] http://www.ow2.org/ with 1 occurrences migrated to:
  https://www.ow2.org/ ([https](https://www.ow2.org/) result 200).
* [ ] http://www.owasp.org/index.php/HTTPOnly with 4 occurrences migrated to:
  https://www.owasp.org/index.php/HTTPOnly ([https](https://www.owasp.org/index.php/HTTPOnly) result 200).
* [ ] http://quartz-scheduler.org (301) with 3 occurrences migrated to:
  https://www.quartz-scheduler.org/ ([https](https://quartz-scheduler.org) result 200).
* [ ] http://www.rabbitmq.com/stomp.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/stomp.html ([https](https://www.rabbitmq.com/stomp.html) result 200).
* [ ] http://www.reactive-streams.org with 1 occurrences migrated to:
  https://www.reactive-streams.org ([https](https://www.reactive-streams.org) result 200).
* [ ] http://www.reactive-streams.org/ with 2 occurrences migrated to:
  https://www.reactive-streams.org/ ([https](https://www.reactive-streams.org/) result 200).
* [ ] http://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Publisher.html with 1 occurrences migrated to:
  https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Publisher.html ([https](https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Publisher.html) result 200).
* [ ] http://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Subscriber.html with 1 occurrences migrated to:
  https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Subscriber.html ([https](https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Subscriber.html) result 200).
* [ ] http://seleniumhq.org/projects/webdriver/ (301) with 1 occurrences migrated to:
  https://www.seleniumhq.org ([https](https://seleniumhq.org/projects/webdriver/) result 200).
* [ ] http://www.springbyexample.org/examples/custom-thread-scope-module.html with 1 occurrences migrated to:
  https://www.springbyexample.org/examples/custom-thread-scope-module.html ([https](https://www.springbyexample.org/examples/custom-thread-scope-module.html) result 200).
* [ ] http://www.springframework.org/dtd/spring-beans-2.0.dtd with 3 occurrences migrated to:
  https://www.springframework.org/dtd/spring-beans-2.0.dtd ([https](https://www.springframework.org/dtd/spring-beans-2.0.dtd) result 200).
* [ ] http://www.springframework.org/schema/aop/spring-aop.xsd with 12 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop.xsd ([https](https://www.springframework.org/schema/aop/spring-aop.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans.xsd with 80 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans.xsd ([https](https://www.springframework.org/schema/beans/spring-beans.xsd) result 200).
* [ ] http://www.springframework.org/schema/cache/spring-cache.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/cache/spring-cache.xsd ([https](https://www.springframework.org/schema/cache/spring-cache.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context.xsd with 13 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context.xsd ([https](https://www.springframework.org/schema/context/spring-context.xsd) result 200).
* [ ] http://www.springframework.org/schema/jdbc/spring-jdbc.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc.xsd) result 200).
* [ ] http://www.springframework.org/schema/jee/spring-jee.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/jee/spring-jee.xsd ([https](https://www.springframework.org/schema/jee/spring-jee.xsd) result 200).
* [ ] http://www.springframework.org/schema/jms/spring-jms.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/jms/spring-jms.xsd ([https](https://www.springframework.org/schema/jms/spring-jms.xsd) result 200).
* [ ] http://www.springframework.org/schema/lang/spring-lang.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang.xsd ([https](https://www.springframework.org/schema/lang/spring-lang.xsd) result 200).
* [ ] http://www.springframework.org/schema/mvc/spring-mvc.xsd with 3 occurrences migrated to:
  https://www.springframework.org/schema/mvc/spring-mvc.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc.xsd) result 200).
* [ ] http://www.springframework.org/schema/oxm/spring-oxm.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/oxm/spring-oxm.xsd ([https](https://www.springframework.org/schema/oxm/spring-oxm.xsd) result 200).
* [ ] http://www.springframework.org/schema/tool/spring-tool.xsd with 13 occurrences migrated to:
  https://www.springframework.org/schema/tool/spring-tool.xsd ([https](https://www.springframework.org/schema/tool/spring-tool.xsd) result 200).
* [ ] http://www.springframework.org/schema/tx/spring-tx.xsd with 8 occurrences migrated to:
  https://www.springframework.org/schema/tx/spring-tx.xsd ([https](https://www.springframework.org/schema/tx/spring-tx.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util.xsd ([https](https://www.springframework.org/schema/util/spring-util.xsd) result 200).
* [ ] http://www.springframework.org/schema/websocket/spring-websocket.xsd with 12 occurrences migrated to:
  https://www.springframework.org/schema/websocket/spring-websocket.xsd ([https](https://www.springframework.org/schema/websocket/spring-websocket.xsd) result 200).
* [ ] http://www.stuartellis.eu/articles/erb/ (301) with 2 occurrences migrated to:
  https://www.stuartellis.name/articles/erb/ ([https](https://www.stuartellis.eu/articles/erb/) result 200).
* [ ] http://www.thymeleaf.org/ with 2 occurrences migrated to:
  https://www.thymeleaf.org/ ([https](https://www.thymeleaf.org/) result 200).
* [ ] http://www.thymeleaf.org/documentation.html with 2 occurrences migrated to:
  https://www.thymeleaf.org/documentation.html ([https](https://www.thymeleaf.org/documentation.html) result 200).
* [ ] http://www.w3.org/2000/xmlns/ with 5 occurrences migrated to:
  https://www.w3.org/2000/xmlns/ ([https](https://www.w3.org/2000/xmlns/) result 200).
* [ ] http://www.w3.org/2004/08/xop/include with 2 occurrences migrated to:
  https://www.w3.org/2004/08/xop/include ([https](https://www.w3.org/2004/08/xop/include) result 200).
* [ ] http://www.w3.org/DesignIssues/MatrixURIs.html with 1 occurrences migrated to:
  https://www.w3.org/DesignIssues/MatrixURIs.html ([https](https://www.w3.org/DesignIssues/MatrixURIs.html) result 200).
* [ ] http://www.w3.org/TR/2004/WD-soap12-mtom-20040608/ with 2 occurrences migrated to:
  https://www.w3.org/TR/2004/WD-soap12-mtom-20040608/ ([https](https://www.w3.org/TR/2004/WD-soap12-mtom-20040608/) result 200).
* [ ] http://www.w3.org/TR/2005/REC-xop10-20050125/ with 6 occurrences migrated to:
  https://www.w3.org/TR/2005/REC-xop10-20050125/ ([https](https://www.w3.org/TR/2005/REC-xop10-20050125/) result 200).
* [ ] http://www.w3.org/TR/cors/ with 19 occurrences migrated to:
  https://www.w3.org/TR/cors/ ([https](https://www.w3.org/TR/cors/) result 200).
* [ ] http://www.w3.org/TR/eventsource/ with 2 occurrences migrated to:
  https://www.w3.org/TR/eventsource/ ([https](https://www.w3.org/TR/eventsource/) result 200).
* [ ] http://www.w3.org/TR/xhtml1/ with 1 occurrences migrated to:
  https://www.w3.org/TR/xhtml1/ ([https](https://www.w3.org/TR/xhtml1/) result 200).
* [ ] http://www.w3.org/TR/xhtml1/diffs.html with 1 occurrences migrated to:
  https://www.w3.org/TR/xhtml1/diffs.html ([https](https://www.w3.org/TR/xhtml1/diffs.html) result 200).
* [ ] http://www.w3.org/TR/xhtml1/dtds.html with 1 occurrences migrated to:
  https://www.w3.org/TR/xhtml1/dtds.html ([https](https://www.w3.org/TR/xhtml1/dtds.html) result 200).
* [ ] http://www.webjars.org with 4 occurrences migrated to:
  https://www.webjars.org ([https](https://www.webjars.org) result 200).
* [ ] http://www.webjars.org/ with 2 occurrences migrated to:
  https://www.webjars.org/ ([https](https://www.webjars.org/) result 200).
* [ ] http://www.webjars.org/documentation with 2 occurrences migrated to:
  https://www.webjars.org/documentation ([https](https://www.webjars.org/documentation) result 200).
* [ ] http://x-stream.github.io/ with 2 occurrences migrated to:
  https://x-stream.github.io/ ([https](https://x-stream.github.io/) result 200).
* [ ] http://youtrack.jetbrains.com/issue/IDEA-53476 with 1 occurrences migrated to:
  https://youtrack.jetbrains.com/issue/IDEA-53476 ([https](https://youtrack.jetbrains.com/issue/IDEA-53476) result 200).
* [ ] http://youtrack.jetbrains.com/issue/IDEA-64446 with 1 occurrences migrated to:
  https://youtrack.jetbrains.com/issue/IDEA-64446 ([https](https://youtrack.jetbrains.com/issue/IDEA-64446) result 200).
* [ ] http://bit.ly/TRlX2r with 1 occurrences migrated to:
  https://bit.ly/TRlX2r ([https](https://bit.ly/TRlX2r) result 301).
* [ ] http://bit.ly/UzccDt with 1 occurrences migrated to:
  https://bit.ly/UzccDt ([https](https://bit.ly/UzccDt) result 301).
* [ ] http://bit.ly/p9rIvx with 1 occurrences migrated to:
  https://bit.ly/p9rIvx ([https](https://bit.ly/p9rIvx) result 301).
* [ ] http://bit.ly/qUwvwz with 1 occurrences migrated to:
  https://bit.ly/qUwvwz ([https](https://bit.ly/qUwvwz) result 301).
* [ ] http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx with 1 occurrences migrated to:
  https://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx ([https](https://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx) result 301).
* [ ] http://castor-data-binding.github.io/castor with 1 occurrences migrated to:
  https://castor-data-binding.github.io/castor ([https](https://castor-data-binding.github.io/castor) result 301).
* [ ] http://code.google.com/p/beanshell2/ with 1 occurrences migrated to:
  https://code.google.com/p/beanshell2/ ([https](https://code.google.com/p/beanshell2/) result 301).
* [ ] http://code.google.com/p/browsersec/wiki/Part2 with 1 occurrences migrated to:
  https://code.google.com/p/browsersec/wiki/Part2 ([https](https://code.google.com/p/browsersec/wiki/Part2) result 301).
* [ ] http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal with 1 occurrences migrated to:
  https://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal ([https](https://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal) result 301).
* [ ] http://code.google.com/p/xml-matchers/ with 3 occurrences migrated to:
  https://code.google.com/p/xml-matchers/ ([https](https://code.google.com/p/xml-matchers/) result 301).
* [ ] http://commons.apache.org/proper/commons-dbcp with 2 occurrences migrated to:
  https://commons.apache.org/proper/commons-dbcp ([https](https://commons.apache.org/proper/commons-dbcp) result 301).
* [ ] http://commons.apache.org/proper/commons-fileupload with 2 occurrences migrated to:
  https://commons.apache.org/proper/commons-fileupload ([https](https://commons.apache.org/proper/commons-fileupload) result 301).
* [ ] http://confluence.jetbrains.net/display/IDEADEV/Gradle+integration with 1 occurrences migrated to:
  https://confluence.jetbrains.net/display/IDEADEV/Gradle+integration ([https](https://confluence.jetbrains.net/display/IDEADEV/Gradle+integration) result 301).
* [ ] http://contributor-covenant.org with 1 occurrences migrated to:
  https://contributor-covenant.org ([https](https://contributor-covenant.org) result 301).
* [ ] http://contributor-covenant.org/version/1/3/0/ with 1 occurrences migrated to:
  https://contributor-covenant.org/version/1/3/0/ ([https](https://contributor-covenant.org/version/1/3/0/) result 301).
* [ ] http://db.apache.org/derby with 2 occurrences migrated to:
  https://db.apache.org/derby ([https](https://db.apache.org/derby) result 301).
* [ ] http://dev.w3.org/html5/eventsource/ with 2 occurrences migrated to:
  https://dev.w3.org/html5/eventsource/ ([https](https://dev.w3.org/html5/eventsource/) result 301).
* [ ] http://domain.com with 24 occurrences migrated to:
  https://domain.com ([https](https://domain.com) result 301).
* [ ] http://domain.com/ with 1 occurrences migrated to:
  https://domain.com/ ([https](https://domain.com/) result 301).
* [ ] http://en.wikipedia.org/wiki/Cache_ with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Cache_ ([https](https://en.wikipedia.org/wiki/Cache_) result 301).
* [ ] http://facebook.github.io/react/ with 2 occurrences migrated to:
  https://facebook.github.io/react/ ([https](https://facebook.github.io/react/) result 301).
* [ ] http://forum.springframework.org/showthread.php?t=41350 with 1 occurrences migrated to:
  https://forum.springframework.org/showthread.php?t=41350 ([https](https://forum.springframework.org/showthread.php?t=41350) result 301).
* [ ] http://github.com/SpringSource/spring-framework with 1 occurrences migrated to:
  https://github.com/SpringSource/spring-framework ([https](https://github.com/SpringSource/spring-framework) result 301).
* [ ] http://hdiv.org/ with 1 occurrences migrated to:
  https://hdiv.org/ ([https](https://hdiv.org/) result 301).
* [ ] http://jakarta.apache.org/commons/fileupload with 1 occurrences migrated to:
  https://jakarta.apache.org/commons/fileupload ([https](https://jakarta.apache.org/commons/fileupload) result 301).
* [ ] http://jira.springframework.org/browse/SPR-5708 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/SPR-5708 ([https](https://jira.springframework.org/browse/SPR-5708) result 301).
* [ ] http://jira.springframework.org/browse/SPR-6124 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/SPR-6124 ([https](https://jira.springframework.org/browse/SPR-6124) result 301).
* [ ] http://jira.springframework.org/browse/SPR-6128 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/SPR-6128 ([https](https://jira.springframework.org/browse/SPR-6128) result 301).
* [ ] http://jira.springframework.org/browse/SPR-7064 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/SPR-7064 ([https](https://jira.springframework.org/browse/SPR-7064) result 301).
* [ ] http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html with 1 occurrences migrated to:
  https://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html ([https](https://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html) result 301).
* [ ] http://mockito.org/ (301) with 1 occurrences migrated to:
  https://mockito.github.io ([https](https://mockito.org/) result 301).
* [ ] http://mydomain1.com with 37 occurrences migrated to:
  https://mydomain1.com ([https](https://mydomain1.com) result 301).
* [ ] http://mydomain1.com/ with 2 occurrences migrated to:
  https://mydomain1.com/ ([https](https://mydomain1.com/) result 301).
* [ ] http://mydomain1.com/path with 2 occurrences migrated to:
  https://mydomain1.com/path ([https](https://mydomain1.com/path) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-2660 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-2660 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-2660) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-2754 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-2754 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-2754) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-2789 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-2789 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-2789) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3127 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3127 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3127) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3775 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3775 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3775) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3880 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3880 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3880) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3896 with 7 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3896 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3896) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3949 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3949 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3949) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-4008 with 2 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-4008 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-4008) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-4040 with 2 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-4040 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-4040) result 301).
* [ ] http://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//topic/com.ibm.websphere.base.doc/info/aes/ae/rdat_extiapi.html with 1 occurrences migrated to:
  https://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//topic/com.ibm.websphere.base.doc/info/aes/ae/rdat_extiapi.html ([https](https://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//topic/com.ibm.websphere.base.doc/info/aes/ae/rdat_extiapi.html) result 301).
* [ ] http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.javadoc.doc/public_html/api/com/ibm/websphere/rsadapter/JDBCConnectionSpec.html with 1 occurrences migrated to:
  https://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.javadoc.doc/public_html/api/com/ibm/websphere/rsadapter/JDBCConnectionSpec.html ([https](https://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.javadoc.doc/public_html/api/com/ibm/websphere/rsadapter/JDBCConnectionSpec.html) result 301).
* [ ] http://site2.com with 3 occurrences migrated to:
  https://site2.com ([https](https://site2.com) result 301).
* [ ] http://slack.kotlinlang.org/ with 2 occurrences migrated to:
  https://slack.kotlinlang.org/ ([https](https://slack.kotlinlang.org/) result 301).
* [ ] http://sourceforge.net/projects/c3p0 with 2 occurrences migrated to:
  https://sourceforge.net/projects/c3p0 ([https](https://sourceforge.net/projects/c3p0) result 301).
* [ ] http://sourceforge.net/projects/javadiff with 1 occurrences migrated to:
  https://sourceforge.net/projects/javadiff ([https](https://sourceforge.net/projects/javadiff) result 301).
* [ ] http://springframework.org with 2 occurrences migrated to:
  https://springframework.org ([https](https://springframework.org) result 301).
* [ ] http://www.atomenabled.org/developers/syndication/ with 1 occurrences migrated to:
  https://www.atomenabled.org/developers/syndication/ ([https](https://www.atomenabled.org/developers/syndication/) result 301).
* [ ] http://www.google.com/ig/calculator?q=1USD=?EUR with 1 occurrences migrated to:
  https://www.google.com/ig/calculator?q=1USD=?EUR ([https](https://www.google.com/ig/calculator?q=1USD=?EUR) result 301).
* [ ] http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html with 1 occurrences migrated to:
  https://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html ([https](https://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html) result 301).
* [ ] http://www.junit.org/ with 1 occurrences migrated to:
  https://www.junit.org/ ([https](https://www.junit.org/) result 301).
* [ ] http://www.mnot.net/cache_docs with 1 occurrences migrated to:
  https://www.mnot.net/cache_docs ([https](https://www.mnot.net/cache_docs) result 301).
* [ ] http://www.sf.net/home.view?siteLanguage=nl with 1 occurrences migrated to:
  https://www.sf.net/home.view?siteLanguage=nl ([https](https://www.sf.net/home.view?siteLanguage=nl) result 301).
* [ ] http://www.springframework.org with 7 occurrences migrated to:
  https://www.springframework.org ([https](https://www.springframework.org) result 301).
* [ ] http://www.springframework.org/ with 3 occurrences migrated to:
  https://www.springframework.org/ ([https](https://www.springframework.org/) result 301).
* [ ] http://xyz.com/path with 2 occurrences migrated to:
  https://xyz.com/path ([https](https://xyz.com/path) result 301).
* [ ] http://commons.apache.org/codec/ with 1 occurrences migrated to:
  https://commons.apache.org/codec/ ([https](https://commons.apache.org/codec/) result 302).
* [ ] http://commons.apache.org/logging with 2 occurrences migrated to:
  https://commons.apache.org/logging ([https](https://commons.apache.org/logging) result 302).
* [ ] http://download.oracle.com/javaee/6/api/javax/inject/Scope.html with 1 occurrences migrated to:
  https://download.oracle.com/javaee/6/api/javax/inject/Scope.html ([https](https://download.oracle.com/javaee/6/api/javax/inject/Scope.html) result 302).
* [ ] http://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html with 4 occurrences migrated to:
  https://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html ([https](https://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html) result 302).
* [ ] http://download.oracle.com/javase/6/docs/technotes/guides/jar/jar.html with 1 occurrences migrated to:
  https://download.oracle.com/javase/6/docs/technotes/guides/jar/jar.html ([https](https://download.oracle.com/javase/6/docs/technotes/guides/jar/jar.html) result 302).
* [ ] http://download.oracle.com/javase/8/docs/api/java/beans/ConstructorProperties.html with 1 occurrences migrated to:
  https://download.oracle.com/javase/8/docs/api/java/beans/ConstructorProperties.html ([https](https://download.oracle.com/javase/8/docs/api/java/beans/ConstructorProperties.html) result 302).
* [ ] http://download.oracle.com/javase/jndi/tutorial/beyond/misc/policy.html with 1 occurrences migrated to:
  https://download.oracle.com/javase/jndi/tutorial/beyond/misc/policy.html ([https](https://download.oracle.com/javase/jndi/tutorial/beyond/misc/policy.html) result 302).
* [ ] http://gafter.blogspot.nl/2006/12/super-type-tokens.html with 1 occurrences migrated to:
  https://gafter.blogspot.nl/2006/12/super-type-tokens.html ([https](https://gafter.blogspot.nl/2006/12/super-type-tokens.html) result 302).
* [ ] http://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project with 1 occurrences migrated to:
  https://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project ([https](https://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project) result 302).
* [ ] http://git-scm.com/book/en/Git-Tools-Rewriting-History with 1 occurrences migrated to:
  https://git-scm.com/book/en/Git-Tools-Rewriting-History ([https](https://git-scm.com/book/en/Git-Tools-Rewriting-History) result 302).
* [ ] http://java.sun.com with 3 occurrences migrated to:
  https://java.sun.com ([https](https://java.sun.com) result 302).
* [ ] http://java.sun.com/docs/books/jls/third_edition/html/conversions.html with 1 occurrences migrated to:
  https://java.sun.com/docs/books/jls/third_edition/html/conversions.html ([https](https://java.sun.com/docs/books/jls/third_edition/html/conversions.html) result 302).
* [ ] http://java.sun.com/docs/books/jls/third_edition/html/expressions.html with 1 occurrences migrated to:
  https://java.sun.com/docs/books/jls/third_edition/html/expressions.html ([https](https://java.sun.com/docs/books/jls/third_edition/html/expressions.html) result 302).
* [ ] http://java.sun.com/j2se/ with 2 occurrences migrated to:
  https://java.sun.com/j2se/ ([https](https://java.sun.com/j2se/) result 302).
* [ ] http://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/javadoc.html with 1 occurrences migrated to:
  https://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/javadoc.html ([https](https://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/javadoc.html) result 302).
* [ ] http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html with 1 occurrences migrated to:
  https://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html ([https](https://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html) result 302).
* [ ] http://java.sun.com/j2se/javadoc with 1 occurrences migrated to:
  https://java.sun.com/j2se/javadoc ([https](https://java.sun.com/j2se/javadoc) result 302).
* [ ] http://java.sun.com/j2se/javadoc/ with 1 occurrences migrated to:
  https://java.sun.com/j2se/javadoc/ ([https](https://java.sun.com/j2se/javadoc/) result 302).
* [ ] http://java.sun.com/j2se/javadoc/faq.html with 1 occurrences migrated to:
  https://java.sun.com/j2se/javadoc/faq.html ([https](https://java.sun.com/j2se/javadoc/faq.html) result 302).
* [ ] http://java.sun.com/webservices/jaxb/ with 1 occurrences migrated to:
  https://java.sun.com/webservices/jaxb/ ([https](https://java.sun.com/webservices/jaxb/) result 302).
* [ ] http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd with 1 occurrences migrated to:
  https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd ([https](https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd) result 302).
* [ ] http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd with 2 occurrences migrated to:
  https://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ([https](https://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd) result 302).
* [ ] http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd with 2 occurrences migrated to:
  https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd ([https](https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd) result 302).
* [ ] http://sourceforge.net/projects/cglib/files/cglib3/3.0/cglib-3.0.jar/download with 1 occurrences migrated to:
  https://sourceforge.net/projects/cglib/files/cglib3/3.0/cglib-3.0.jar/download ([https](https://sourceforge.net/projects/cglib/files/cglib3/3.0/cglib-3.0.jar/download) result 302).
* [ ] http://other.info/foo/bar (301) with 1 occurrences migrated to:
  https://weibo.com/otherinfo/foo/bar ([https](https://other.info/foo/bar) result 302).
* [ ] http://www.iana.org/assignments/http-status-codes with 1 occurrences migrated to:
  https://www.iana.org/assignments/http-status-codes ([https](https://www.iana.org/assignments/http-status-codes) result 302).
* [ ] http://www.iana.org/assignments/media-types/ with 1 occurrences migrated to:
  https://www.iana.org/assignments/media-types/ ([https](https://www.iana.org/assignments/media-types/) result 302).
* [ ] http://www.sys-con.com/java with 1 occurrences migrated to:
  https://www.sys-con.com/java ([https](https://www.sys-con.com/java) result 302).

These URLs were intentionally ignored.

* http://Additional-namespace-name-URI with 1 occurrences
* http://Default-namespace-name-URI with 1 occurrences
* http://HOST:8080/remoting/AccountService with 1 occurrences
* http://Namespace-name-URI with 1 occurrences
* http://Unbound-namespace-name-URI with 1 occurrences
* http://anotherHost/mvc-showcase with 1 occurrences
* http://apache.org/xml/features/disallow-doctype-decl with 14 occurrences
* http://barfoo:8888 with 1 occurrences
* http://example/ with 1 occurrences
* http://fake-service with 7 occurrences
* http://foo with 3 occurrences
* http://foobar:8088 with 1 occurrences
* http://host:port/myApp/myEndpoint/ with 1 occurrences
* http://java.sun.com/jsp/jstl/core with 1 occurrences
* http://java.sun.com/xml/jaxp/properties/schemaLanguage with 1 occurrences
* http://java.sun.com/xml/ns/j2ee with 6 occurrences
* http://java.sun.com/xml/ns/javaee with 4 occurrences
* http://java.sun.com/xml/ns/persistence with 1 occurrences
* http://java.sun.com/xml/stream/properties/report-cdata-event with 1 occurrences
* http://jaxws.remoting.springframework.org/ with 4 occurrences
* http://localhost with 86 occurrences
* http://localhost/ with 16 occurrences
* http://localhost/42 with 1 occurrences
* http://localhost/?cookie=foo with 1 occurrences
* http://localhost/FILE.TXT with 1 occurrences
* http://localhost/abc with 1 occurrences
* http://localhost/abc/def with 1 occurrences
* http://localhost/app%20/path/ with 1 occurrences
* http://localhost/app/path%20with%20spaces/ with 1 occurrences
* http://localhost/bar with 2 occurrences
* http://localhost/context/a with 3 occurrences
* http://localhost/contextPath/main/path with 2 occurrences
* http://localhost/file.foo with 1 occurrences
* http://localhost/file.txt with 1 occurrences
* http://localhost/foo with 2 occurrences
* http://localhost/foo%20bar with 1 occurrences
* http://localhost/foo/bar with 1 occurrences
* http://localhost/foo/bar/baz with 1 occurrences
* http://localhost/forward with 1 occurrences
* http://localhost/hotels/42/bookings/21 with 4 occurrences
* http://localhost/input with 1 occurrences
* http://localhost/jquery-1.11.0.min.js with 5 occurrences
* http://localhost/messages/form with 1 occurrences
* http://localhost/mvc-showcase with 2 occurrences
* http://localhost/mvc-showcase/app with 1 occurrences
* http://localhost/mvc-showcase/data/foo%20bar with 1 occurrences
* http://localhost/mvc-showcase/data/param with 1 occurrences
* http://localhost/mvc-showcase/data/param?foo=123 with 2 occurrences
* http://localhost/myapp/main with 1 occurrences
* http://localhost/myapp/people/1/addresses/DE with 1 occurrences
* http://localhost/path with 3 occurrences
* http://localhost/path;a=b/with/semicolon with 1 occurrences
* http://localhost/persons with 1 occurrences
* http://localhost/prefix with 1 occurrences
* http://localhost/prefix/app with 1 occurrences
* http://localhost/prefix/bar with 1 occurrences
* http://localhost/prefix/mvc-showcase with 3 occurrences
* http://localhost/query= with 1 occurrences
* http://localhost/query=foo@bar with 1 occurrences
* http://localhost/resources/child/response.txt with 1 occurrences
* http://localhost/resources/foo with 2 occurrences
* http://localhost/resources/foo.txt with 1 occurrences
* http://localhost/resources/response.txt with 2 occurrences
* http://localhost/rest/books/6/pages/1.json with 1 occurrences
* http://localhost/something/1/foo with 1 occurrences
* http://localhost/something/optional-param with 1 occurrences
* http://localhost/test with 4 occurrences
* http://localhost/test.html with 1 occurrences
* http://localhost/test/this with 2 occurrences
* http://localhost:7070/example/adminhandle.vm with 1 occurrences
* http://localhost:7070/example/bingo.html with 1 occurrences
* http://localhost:80/jquery-1.11.0.min.js with 1 occurrences
* http://localhost:8080 with 34 occurrences
* http://localhost:8080/ with 4 occurrences
* http://localhost:8080/OrderService with 3 occurrences
* http://localhost:8080/aA/bB/cC with 1 occurrences
* http://localhost:8080/context with 1 occurrences
* http://localhost:8080/context/myapiresource with 1 occurrences
* http://localhost:8080/gamecast/admin/index.html with 1 occurrences
* http://localhost:8080/gamecast/display.html with 1 occurrences
* http://localhost:8080/gamecast/displayShoppingCart.html with 1 occurrences
* http://localhost:8080/jquery-1.11.0.min.js with 1 occurrences
* http://localhost:8080/mvc-showcase with 1 occurrences
* http://localhost:8080/myapiresource with 1 occurrences
* http://localhost:8080/myapp/js/sockjs-client.js with 1 occurrences
* http://localhost:8080/path with 2 occurrences
* http://localhost:8080/people with 2 occurrences
* http://localhost:8080/portfolio with 1 occurrences
* http://localhost:8080/spring/ with 2 occurrences
* http://localhost:8080/test/ with 2 occurrences
* http://localhost:8080/test/print?value=%EA%B0%80+%EB%82%98 with 1 occurrences
* http://localhost:8081 with 1 occurrences
* http://localhost:8081/ with 1 occurrences
* http://localhost:8181 with 1 occurrences
* http://localhost:8888/AccountServiceEndpoint?WSDL with 1 occurrences
* http://localhost:9000 with 7 occurrences
* http://localhost:9090 with 18 occurrences
* http://localhost:9090/jquery-1.11.0.min.js with 2 occurrences
* http://localhost:9990/mail/messages/form with 1 occurrences
* http://localhost:9999/ with 1 occurrences
* http://localhost:9999/OrderService?wsdl with 4 occurrences
* http://localhosta/testbean with 3 occurrences
* http://myserver with 1 occurrences
* http://myurl with 12 occurrences
* http://remotehost:8080/remoting/AccountService with 2 occurrences
* http://samples.springframework.org/flight with 39 occurrences
* http://somethingDifferent with 1 occurrences
* http://springframework.org/spring-ws with 17 occurrences
* http://test.com with 1 occurrences
* http://test.com/ with 1 occurrences
* http://testng.org/ with 1 occurrences
* http://tiles.apache.org/tags-tiles with 1 occurrences
* http://www with 1 occurrences
* http://www.foo.com/schema/component with 6 occurrences
* http://www.mycompany.com/schema/myns with 4 occurrences
* http://www.springframework.org/schema/aop with 30 occurrences
* http://www.springframework.org/schema/beans with 169 occurrences
* http://www.springframework.org/schema/beans/test with 2 occurrences
* http://www.springframework.org/schema/c with 1 occurrences
* http://www.springframework.org/schema/cache with 5 occurrences
* http://www.springframework.org/schema/context with 28 occurrences
* http://www.springframework.org/schema/jdbc with 8 occurrences
* http://www.springframework.org/schema/jee with 9 occurrences
* http://www.springframework.org/schema/jms with 5 occurrences
* http://www.springframework.org/schema/lang with 10 occurrences
* http://www.springframework.org/schema/mvc with 8 occurrences
* http://www.springframework.org/schema/oxm with 4 occurrences
* http://www.springframework.org/schema/p with 4 occurrences
* http://www.springframework.org/schema/task with 2 occurrences
* http://www.springframework.org/schema/tool with 27 occurrences
* http://www.springframework.org/schema/tx with 18 occurrences
* http://www.springframework.org/schema/util with 8 occurrences
* http://www.springframework.org/schema/websocket with 26 occurrences
* http://www.springframework.org/spring-ws with 1 occurrences
* http://www.springframework.org/tags with 4 occurrences
* http://www.springframework.org/tags/form with 2 occurrences
* http://www.w3.org/1999/XSL/Transform with 8 occurrences
* http://www.w3.org/2001/XMLSchema with 24 occurrences
* http://www.w3.org/2001/XMLSchema-instance with 83 occurrences
* http://www.w3.org/2005/Atom with 4 occurrences
* http://www.w3.org/TR/html4/charset.html with 5 occurrences
* http://www.w3.org/TR/html4/sgml/entities.html with 14 occurrences
* http://www.w3.org/XML/1998/namespace with 5 occurrences
* http://xml.org/sax/features/ with 4 occurrences
* http://xml.org/sax/features/external-general-entities with 14 occurrences
* http://xml.org/sax/features/is-standalone with 1 occurrences
* http://xml.org/sax/features/namespace-prefixes with 13 occurrences
* http://xml.org/sax/features/namespaces with 12 occurrences
* http://xml.org/sax/features/namespaces-prefixes with 1 occurrences
* http://xml.org/sax/properties/lexical-handler with 12 occurrences

Closes gh-22680
2019-03-27 22:05:38 +01:00
Phillip Webb bf9dea4254 Defensively copy array returned from TypeDescriptor
Update the internal proxy used in `TypeDescriptor` so that it returns a
cloned array for calls to `getDeclaredAnnotations` or `getAnnotations`.

Closes gh-22695
2019-03-27 13:50:30 -07:00
Rossen Stoyanchev 0589989eb4 Merge branch '5.1.x' 2019-03-27 16:19:31 -04:00
Rossen Stoyanchev 1aaadb39c0 Support STOMP in addition to CONNECT frame
One is literally an alias for the other with "the advantage that a
protocol sniffer/discriminator will be able to differentiate the STOMP
connection from an HTTP connection".

Closes gh-22652
2019-03-27 16:19:11 -04:00
Juergen Hoeller ac0ffda311 Merge branch '5.1.x' 2019-03-27 19:39:28 +01:00
Juergen Hoeller 50acbae4cf Upgrade to RxJava 2.2.8 and Mockito 2.25.1 2019-03-27 19:14:51 +01:00
Sam Brannen 20f1f46ae1 URL Cleanup - Fix broken tests
See gh-22669
2019-03-27 19:06:01 +01:00
Sam Brannen c51a257210 URL Cleanup - Polishing
See gh-22669
2019-03-27 19:05:54 +01:00
Sam Brannen c74d102df3 URL Cleanup - remove obsolete ATOM schema location
See gh-22669
2019-03-27 19:05:34 +01:00
Spring Operator 8f77b7366e URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* [ ] http://castor.org/mapping.dtd (301) with 1 occurrences could not be migrated:
   ([https](https://castor.org/mapping.dtd) result AnnotatedConnectException).
* [ ] http://mydomain2.com (302) with 2 occurrences could not be migrated:
   ([https](https://mydomain2.com) result ConnectTimeoutException).
* [ ] http://www.foo.com/schema/component/component.xsd (404) with 1 occurrences could not be migrated:
   ([https](https://www.foo.com/schema/component/component.xsd) result SSLHandshakeException).

These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* [ ] http://www.kbcafe.com/rss/atom.xsd.xml (ConnectTimeoutException) with 1 occurrences migrated to:
  https://www.kbcafe.com/rss/atom.xsd.xml ([https](https://www.kbcafe.com/rss/atom.xsd.xml) result ConnectTimeoutException).
* [ ] http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd (ReadTimeoutException) with 5 occurrences migrated to:
  https://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd ([https](https://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd) result ReadTimeoutException).
* [ ] http://domain1.com (UnknownHostException) with 2 occurrences migrated to:
  https://domain1.com ([https](https://domain1.com) result UnknownHostException).
* [ ] http://domain2.com (UnknownHostException) with 1 occurrences migrated to:
  https://domain2.com ([https](https://domain2.com) result UnknownHostException).
* [ ] http://mydomain1.com,http://mydomain2.com (UnknownHostException) with 1 occurrences migrated to:
  https://mydomain1.com,http://mydomain2.com ([https](https://mydomain1.com,https://mydomain2.com) result UnknownHostException).
* [ ] http://mydomain3.com,http://mydomain4.com (UnknownHostException) with 1 occurrences migrated to:
  https://mydomain3.com,http://mydomain4.com ([https](https://mydomain3.com,https://mydomain4.com) result UnknownHostException).
* [ ] http://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd (404) with 1 occurrences migrated to:
  https://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd ([https](https://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd) result 404).

These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://example.com with 1 occurrences migrated to:
  https://example.com ([https](https://example.com) result 200).
* [ ] http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd (301) with 2 occurrences migrated to:
  https://hibernate.org/dtd/hibernate-mapping-3.0.dtd ([https](https://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd) result 200).
* [ ] http://testng.org/testng-1.0.dtd with 3 occurrences migrated to:
  https://testng.org/testng-1.0.dtd ([https](https://testng.org/testng-1.0.dtd) result 200).
* [ ] http://tiles.apache.org/dtds/tiles-config_2_0.dtd with 2 occurrences migrated to:
  https://tiles.apache.org/dtds/tiles-config_2_0.dtd ([https](https://tiles.apache.org/dtds/tiles-config_2_0.dtd) result 200).
* [ ] http://tiles.apache.org/dtds/tiles-config_2_1.dtd with 2 occurrences migrated to:
  https://tiles.apache.org/dtds/tiles-config_2_1.dtd ([https](https://tiles.apache.org/dtds/tiles-config_2_1.dtd) result 200).
* [ ] http://tiles.apache.org/dtds/tiles-config_3_0.dtd with 4 occurrences migrated to:
  https://tiles.apache.org/dtds/tiles-config_3_0.dtd ([https](https://tiles.apache.org/dtds/tiles-config_3_0.dtd) result 200).
* [ ] http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd with 1 occurrences migrated to:
  https://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd ([https](https://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd) result 200).
* [ ] http://www.springframework.org/dtd/spring-beans-2.0.dtd with 176 occurrences migrated to:
  https://www.springframework.org/dtd/spring-beans-2.0.dtd ([https](https://www.springframework.org/dtd/spring-beans-2.0.dtd) result 200).
* [ ] http://www.springframework.org/schema/aop/spring-aop-2.0.xsd with 68 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop-2.0.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-2.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/aop/spring-aop-2.5.xsd with 11 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop-2.5.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-2.5.xsd) result 200).
* [ ] http://www.springframework.org/schema/aop/spring-aop-3.0.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop-3.0.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-3.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/aop/spring-aop.xsd with 7 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop.xsd ([https](https://www.springframework.org/schema/aop/spring-aop.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-2.0.xsd with 112 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-2.0.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-2.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-2.5.xsd with 46 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-2.5.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-2.5.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-3.0.xsd with 10 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-3.0.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-3.1.xsd with 33 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-3.1.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-3.2.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-3.2.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.2.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-4.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-4.0.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-4.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-4.1.xsd with 3 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-4.1.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-4.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-4.2.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-4.2.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-4.2.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans-4.3.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-4.3.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-4.3.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans.xsd with 142 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans.xsd ([https](https://www.springframework.org/schema/beans/spring-beans.xsd) result 200).
* [ ] http://www.springframework.org/schema/cache/spring-cache.xsd with 10 occurrences migrated to:
  https://www.springframework.org/schema/cache/spring-cache.xsd ([https](https://www.springframework.org/schema/cache/spring-cache.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context-2.5.xsd with 41 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-2.5.xsd ([https](https://www.springframework.org/schema/context/spring-context-2.5.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context-3.0.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-3.0.xsd ([https](https://www.springframework.org/schema/context/spring-context-3.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context-3.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-3.1.xsd ([https](https://www.springframework.org/schema/context/spring-context-3.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context-3.2.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-3.2.xsd ([https](https://www.springframework.org/schema/context/spring-context-3.2.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context-4.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-4.0.xsd ([https](https://www.springframework.org/schema/context/spring-context-4.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context-4.2.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-4.2.xsd ([https](https://www.springframework.org/schema/context/spring-context-4.2.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context-4.3.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-4.3.xsd ([https](https://www.springframework.org/schema/context/spring-context-4.3.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context.xsd with 10 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context.xsd ([https](https://www.springframework.org/schema/context/spring-context.xsd) result 200).
* [ ] http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd with 9 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd with 5 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd with 9 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd) result 200).
* [ ] http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd) result 200).
* [ ] http://www.springframework.org/schema/jdbc/spring-jdbc.xsd with 8 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc.xsd) result 200).
* [ ] http://www.springframework.org/schema/jee/spring-jee-3.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/jee/spring-jee-3.1.xsd ([https](https://www.springframework.org/schema/jee/spring-jee-3.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/jms/spring-jms-4.1.xsd with 9 occurrences migrated to:
  https://www.springframework.org/schema/jms/spring-jms-4.1.xsd ([https](https://www.springframework.org/schema/jms/spring-jms-4.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/jms/spring-jms-4.2.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/jms/spring-jms-4.2.xsd ([https](https://www.springframework.org/schema/jms/spring-jms-4.2.xsd) result 200).
* [ ] http://www.springframework.org/schema/lang/spring-lang-2.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-2.0.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-2.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/lang/spring-lang-2.5.xsd with 3 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-2.5.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-2.5.xsd) result 200).
* [ ] http://www.springframework.org/schema/lang/spring-lang-3.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-3.0.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-3.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/lang/spring-lang-3.1.xsd with 5 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-3.1.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-3.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/lang/spring-lang-4.2.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-4.2.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-4.2.xsd) result 200).
* [ ] http://www.springframework.org/schema/lang/spring-lang.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang.xsd ([https](https://www.springframework.org/schema/lang/spring-lang.xsd) result 200).
* [ ] http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd) result 200).
* [ ] http://www.springframework.org/schema/mvc/spring-mvc.xsd with 26 occurrences migrated to:
  https://www.springframework.org/schema/mvc/spring-mvc.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc.xsd) result 200).
* [ ] http://www.springframework.org/schema/oxm/spring-oxm.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/oxm/spring-oxm.xsd ([https](https://www.springframework.org/schema/oxm/spring-oxm.xsd) result 200).
* [ ] http://www.springframework.org/schema/task/spring-task-4.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/task/spring-task-4.1.xsd ([https](https://www.springframework.org/schema/task/spring-task-4.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/task/spring-task.xsd with 6 occurrences migrated to:
  https://www.springframework.org/schema/task/spring-task.xsd ([https](https://www.springframework.org/schema/task/spring-task.xsd) result 200).
* [ ] http://www.springframework.org/schema/tx/spring-tx-2.5.xsd with 3 occurrences migrated to:
  https://www.springframework.org/schema/tx/spring-tx-2.5.xsd ([https](https://www.springframework.org/schema/tx/spring-tx-2.5.xsd) result 200).
* [ ] http://www.springframework.org/schema/tx/spring-tx-4.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/tx/spring-tx-4.0.xsd ([https](https://www.springframework.org/schema/tx/spring-tx-4.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/tx/spring-tx.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/tx/spring-tx.xsd ([https](https://www.springframework.org/schema/tx/spring-tx.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util-2.0.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-2.0.xsd ([https](https://www.springframework.org/schema/util/spring-util-2.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util-2.5.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-2.5.xsd ([https](https://www.springframework.org/schema/util/spring-util-2.5.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util-3.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-3.0.xsd ([https](https://www.springframework.org/schema/util/spring-util-3.0.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util-3.1.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-3.1.xsd ([https](https://www.springframework.org/schema/util/spring-util-3.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util-4.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-4.1.xsd ([https](https://www.springframework.org/schema/util/spring-util-4.1.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util-4.2.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-4.2.xsd ([https](https://www.springframework.org/schema/util/spring-util-4.2.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util.xsd ([https](https://www.springframework.org/schema/util/spring-util.xsd) result 200).
* [ ] http://www.springframework.org/schema/websocket/spring-websocket.xsd with 11 occurrences migrated to:
  https://www.springframework.org/schema/websocket/spring-websocket.xsd ([https](https://www.springframework.org/schema/websocket/spring-websocket.xsd) result 200).
* [ ] http://www.w3.org/1999/02/22-rdf-syntax-ns with 2 occurrences migrated to:
  https://www.w3.org/1999/02/22-rdf-syntax-ns ([https](https://www.w3.org/1999/02/22-rdf-syntax-ns) result 200).
* [ ] http://mydomain1.com with 2 occurrences migrated to:
  https://mydomain1.com ([https](https://mydomain1.com) result 301).
* [ ] http://www.springframework.org with 1 occurrences migrated to:
  https://www.springframework.org ([https](https://www.springframework.org) result 301).
* [ ] http://help.sap.com/saphelp_hanaplatform/helpdata/en/20/a78d3275191014b41bae7c4a46d835/content.htm with 1 occurrences migrated to:
  https://help.sap.com/saphelp_hanaplatform/helpdata/en/20/a78d3275191014b41bae7c4a46d835/content.htm ([https](https://help.sap.com/saphelp_hanaplatform/helpdata/en/20/a78d3275191014b41bae7c4a46d835/content.htm) result 302).
* [ ] http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd with 1 occurrences migrated to:
  https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd ([https](https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd) result 302).
* [ ] http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd with 1 occurrences migrated to:
  https://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd ([https](https://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd) result 302).
* [ ] http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd with 12 occurrences migrated to:
  https://java.sun.com/xml/ns/persistence/persistence_1_0.xsd ([https](https://java.sun.com/xml/ns/persistence/persistence_1_0.xsd) result 302).
* [ ] http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd with 1 occurrences migrated to:
  https://java.sun.com/xml/ns/persistence/persistence_2_0.xsd ([https](https://java.sun.com/xml/ns/persistence/persistence_2_0.xsd) result 302).
* [ ] http://purl.org/dc/dcmitype/StillImage with 2 occurrences migrated to:
  https://purl.org/dc/dcmitype/StillImage ([https](https://purl.org/dc/dcmitype/StillImage) result 302).

These URLs were intentionally ignored.

* http://creativecommons.org/ns with 2 occurrences
* http://java.sun.com/dtd/properties.dtd with 4 occurrences
* http://java.sun.com/xml/ns/j2ee with 2 occurrences
* http://java.sun.com/xml/ns/javaee with 2 occurrences
* http://java.sun.com/xml/ns/persistence with 27 occurrences
* http://localhost:8080 with 3 occurrences
* http://purl.org/dc/elements/1.1/ with 2 occurrences
* http://samples.springframework.org/flight with 7 occurrences
* http://schemas.microsoft.com/visio/2003/SVGExtensions/ with 7 occurrences
* http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd with 2 occurrences
* http://www.foo.com/schema/component with 2 occurrences
* http://www.greeting.com/goodbye/ with 1 occurrences
* http://www.greeting.com/hello/ with 1 occurrences
* http://www.inkscape.org/namespaces/inkscape with 2 occurrences
* http://www.quartz-scheduler.org/xml/JobSchedulingData with 2 occurrences
* http://www.springframework.org/schema/aop with 176 occurrences
* http://www.springframework.org/schema/beans with 715 occurrences
* http://www.springframework.org/schema/beans/test with 2 occurrences
* http://www.springframework.org/schema/c with 9 occurrences
* http://www.springframework.org/schema/cache with 20 occurrences
* http://www.springframework.org/schema/context with 126 occurrences
* http://www.springframework.org/schema/jdbc with 66 occurrences
* http://www.springframework.org/schema/jee with 2 occurrences
* http://www.springframework.org/schema/jms with 20 occurrences
* http://www.springframework.org/schema/lang with 27 occurrences
* http://www.springframework.org/schema/mvc with 58 occurrences
* http://www.springframework.org/schema/oxm with 2 occurrences
* http://www.springframework.org/schema/p with 16 occurrences
* http://www.springframework.org/schema/task with 14 occurrences
* http://www.springframework.org/schema/tx with 12 occurrences
* http://www.springframework.org/schema/util with 28 occurrences
* http://www.springframework.org/schema/websocket with 22 occurrences
* http://www.w3.org/2000/svg with 9 occurrences
* http://www.w3.org/2001/XMLSchema-instance with 375 occurrences
* http://www.w3.org/2005/Atom with 2 occurrences

Closes gh-22669
2019-03-27 19:05:08 +01:00
Juergen Hoeller 80b4b9850a Upgrade to Reactor Californium SR6
Closes gh-22693
2019-03-27 18:08:35 +01:00
Sebastien Deleuze 864dddee7a Merge branch '5.1.x' 2019-03-27 17:13:06 +01:00
Sebastien Deleuze f0ae8bc300 Support custom XmlFactory in Jackson2ObjectMapperBuilder
Closes gh-22428
2019-03-27 16:48:21 +01:00
Juergen Hoeller 673be7fb0d Merge branch '5.1.x' 2019-03-27 16:02:07 +01:00
Juergen Hoeller ca24fd50b0 Rethrow original BeanCreationException if fallback producer fails
Closes gh-22689
2019-03-27 16:01:18 +01:00
Sebastien Deleuze 8003aa4f26 Deprecate GenericApplicationContext { } Kotlin extension
Closes gh-22692
2019-03-27 15:12:16 +01:00
Sebastien Deleuze fb1da01410 Support creating beans from Kotlin callable references
This commit updates Kotlin beans DSL in order to support
creating beans using callable references with autowired
parameters. Type resolution is implemented using Kotlin
reified type parameters without requiring reflection.

Closes gh-21845
2019-03-27 14:47:42 +01:00
Juergen Hoeller c9857702e4 Refined retrieval of plain annotations through direct presence checks
Shortcut checks apply for hasPlainJavaAnnotationsOnly types as well now.

Closes gh-22685
2019-03-27 12:56:11 +01:00
Juergen Hoeller cb84c56f19 Revert "Migrate CommonAnnotationBeanPostProcessor to MergedAnnotations"
This reverts commit 75b52309
2019-03-27 12:54:34 +01:00
Sebastien Deleuze cbb5a78aa0 Infer Kotlin null-safety from type variables
This commit removes the constraint from type variables in
PropertyResolver, JdbcOperations and RestOperations
Kotlin extensions in order to get null-safety inferred
from the type declared by the user.

Closes gh-22687
2019-03-27 09:03:32 +01:00
Rossen Stoyanchev 68a529b915 Merge branch '5.1.x' 2019-03-26 21:14:51 -04:00
Rossen Stoyanchev c54355784e Buffer leak fixes
Address issues where buffers are allocated (and cached somehow) at or
before subscription, and before explicit demand.

The commit adds tests proving the leaks and fixes. The common thread
for all tests is a "zero demand" subscriber that subscribes  but does
not request, and then cancels without consuming anything.

Closes gh-22107
2019-03-26 21:13:42 -04:00
Rossen Stoyanchev 65b46079a2 Replace stream with loop in RequestCondition's 2019-03-26 21:12:15 -04:00
Juergen Hoeller b646943350 Upgrade to Hibernate ORM 5.4.2 2019-03-26 23:59:16 +01:00
Juergen Hoeller ea51270895 Merge branch '5.1.x' 2019-03-26 23:48:09 +01:00
Juergen Hoeller 9d6592d8f6 Upgrade to Hibernate Validator 6.0.16 and H2 1.4.199 2019-03-26 23:31:19 +01:00
Sam Brannen 49b6c5800a Merge branch '5.1.x' 2019-03-26 18:29:17 +01:00
Sam Brannen 95eb24d642 Verify that CssLinkResourceTransformer handles empty url() links
This commit introduces tests that verify that both
CssLinkResourceTransformer implementations properly handle empty url()
functions in CSS files.

See gh-22602
2019-03-26 18:27:11 +01:00
Juergen Hoeller e3b6174b6d Merge branch '5.1.x' 2019-03-26 18:02:20 +01:00
Juergen Hoeller 699d75ec11 Polishing 2019-03-26 17:56:31 +01:00
Arjen Poutsma 4ca27db0cc Copy cookies to ServerResponse builders
See gh-22351
2019-03-26 16:32:54 +01:00
Arjen Poutsma 771d436680 Merge branch '5.1.x' 2019-03-26 16:19:57 +01:00
Arjen Poutsma c152d246a8 Copy cookies and hints to ServerResponse builders
Closes gh-22351
2019-03-26 16:19:13 +01:00
Juergen Hoeller 635305647c Polishing 2019-03-26 16:13:51 +01:00
Juergen Hoeller 210b178922 Restore retrieval of plain annotations through direct presence checks
Includes deprecation of several AnnotationUtils methods and nullability refinements for passed-in function arguments at the MergedAnnotation API level... also, MergedAnnotation.getType() returns a Class now.

Closes gh-22663
Closes gh-22685
2019-03-26 16:13:41 +01:00
Juergen Hoeller f7a4850675 AnnotationJmxAttributeSource uses MergedAnnotation API directly
Includes deprecation of AnnotationBeanUtils class (now unused).

Closes gh-22657
2019-03-26 16:13:23 +01:00
Arjen Poutsma 6324a1b3fa Copy cookies and hints in built ServerResponse
Closes gh-22481
2019-03-26 15:49:12 +01:00
Arjen Poutsma 0db317575b Copy cookies in built ServerResponse
Closes gh-22481
2019-03-26 15:47:58 +01:00
Arjen Poutsma dba04a7338 Merge branch '5.1.x' 2019-03-26 15:34:48 +01:00
Arjen Poutsma d8215e7c79 Copy cookies and hints in built ServerResponse
Closes gh-22481
2019-03-26 15:31:15 +01:00
Sebastien Deleuze 6bf52ff8b9 Merge branch '5.1.x' 2019-03-26 14:30:49 +01:00
Sebastien Deleuze 0ca8428603 Fix lambda nullability in JdbcOperations extensions
Closes gh-22682
2019-03-26 14:29:41 +01:00
Sam Brannen 2a94cb2fe9 Merge branch '5.1.x' 2019-03-26 14:06:28 +01:00
Sam Brannen fd6b64bfac Polishing 2019-03-26 12:48:15 +01:00
Sam Brannen 6870b9c691 Test fix in gh-22638 2019-03-26 12:48:15 +01:00
李全城 93de5f407e Avoid duplicate registration of [RequestBody|ResponseBody]Advice @ControllerAdvice
Prior to this commit, if a @ControllerAdvice implemented both
RequestBodyAdvice and ResponseBodyAdvice, it was registered twice in
RequestMappingHandlerAdapter.

This commit ensures that such instances are only registered once.

Closes gh-22638
2019-03-26 12:07:19 +01:00
Phillip Webb 0ace0be29b Fix annotation value mapping regression
Refine `TypeMappedAnnotation.getValueFromMetaAnnotation` to correctly
account for aliases when finding values from meta-annotations. Prior
to this commit, only convention based mappings were considered when
searching for values on meta-annotations. This meant that declared
meta-annotations that used aliases could return the "default value"
rather than the merged value.

Closes gh-22654
2019-03-25 17:19:12 -07:00
Sebastien Deleuze 88a2729fba Introduce spring-core-coroutines module
This commit introduces the spring-core-coroutines module
in order to avoid referencing Kotlin code from Java one,
which is currently not supported by Eclipse.

During the build, spring-core-coroutines is merged into
spring-core, so this change is expected to have no impact
for end users.

This module contains functions accessible from Java via
the CoroutinesUtils class to adapt Coroutines and Deferred
instances to and from Mono.

See gh-19975
2019-03-25 21:57:53 +01:00
Sam Brannen 837be3eaa0 Merge branch '5.1.x' 2019-03-25 18:17:23 +01:00
Sam Brannen f66362a01c Update license.txt file
Closes gh-22659
2019-03-25 18:09:28 +01:00
Arjen Poutsma 94c14c469e Fix checkstyle issue 2019-03-25 17:18:47 +01:00
Arjen Poutsma 1c46a9a6ff Remove direct Reactive Streams dependencies in Servlet.fn
Isolated direct dependencies to Reactive Streams types.
2019-03-25 16:16:20 +01:00
Phillip Webb cb7f997962 Defensively copy array returned from forAnnotations
Update the proxy used in `AnnotatedElementUtils.forAnnotations` so
that it returns a cloned array for calls to `getDeclaredAnnotations`
or `getAnnotations`. This matches the behavior of standard JDK
`AnnotatedElement` implementations.

Closes gh-22655
2019-03-25 07:53:42 -07:00
Juergen Hoeller 78fd882141 Remove superfluous empty lines after code blocks 2019-03-25 14:21:49 +01:00
Juergen Hoeller 3c02331983 Merge branch '5.1.x' 2019-03-25 13:59:24 +01:00
Juergen Hoeller fc178ef7c2 Upgrade to Tomcat 9.0.17 and OkHttp 3.14 2019-03-25 13:54:15 +01:00
Juergen Hoeller 6f1b583130 Polishing 2019-03-25 13:54:02 +01:00
Juergen Hoeller 507d4ba825 StringUtils.parseLocale consistently handles invalid locale values
Closes gh-22603
2019-03-25 13:53:54 +01:00
Sebastien Deleuze 8494c7a75a Add missing KDoc comments 2019-03-25 09:34:55 +01:00
Sebastien Deleuze 67c8d3753b Upgrade to Dokka 0.9.18 2019-03-25 09:34:55 +01:00
www 4517f40f57 Remove redundant 'String.substring()' call 2019-03-25 09:34:29 +01:00
Stephane Nicoll 80c48648d7 Merge pull request #22649 from ttddyy
* pr/22649:
  Fix typo on MergedAnnotations
2019-03-25 09:25:32 +01:00
Tadaya Tsuyukubo 860ec44c50 Fix typo on MergedAnnotations
Closes gh-22649
2019-03-25 09:25:16 +01:00
Sam Brannen 3a0f309e2c Update readme.txt in distributed artifacts 2019-03-23 19:43:34 +01:00
Sam Brannen d41c4522da Remove italics from XML examples in Reference Manual 2019-03-23 19:32:01 +01:00
Sam Brannen 4f619787ad Revert change from URL Cleanup 2019-03-23 19:20:40 +01:00
Sam Brannen 57ab877f0d Upgrade to Gradle 5.3
Closes gh-22347
2019-03-23 18:04:44 +01:00
Sam Brannen cd19170ffb Polish BeanUtilsTests 2019-03-23 16:19:42 +01:00
Min-soo 670aa4b7ef Use JUnit 4's expected exception support in BeanUtilsTests
This commit uses JUnit 4's built-in expected exception support in
BeanUtilsTests,

Closes gh-22354
2019-03-23 16:15:07 +01:00
Sam Brannen 9ac2e034e7 Polishing 2019-03-23 16:09:47 +01:00
Johnny Lim 14b1a6fdcb Polish docs (#22645) 2019-03-23 15:48:47 +01:00
Sam Brannen 8d7676a5ec Merge branch 'spring-operator-polish-urls-apache-license-5.1.x' into 5.1.x 2019-03-23 15:41:55 +01:00
Sam Brannen 68de9820dc Upgrade to latest Checkstyle DTDs
See gh-22634
2019-03-23 15:40:10 +01:00
Sam Brannen af99e868c4 Upgrade to spring-javaformat-checkstyle version 0.0.7
See gh-22634
2019-03-23 15:38:44 +01:00
Sam Brannen e98fd762ba URL Cleanup - license headers - target subpackages
This commit updates license headers for source files residing in
subpackages named `target`.

Closes gh-22634
2019-03-23 15:22:44 +01:00
Spring Operator 540759ec41 URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://www.apache.org/licenses/ with 1 occurrences migrated to:
  https://www.apache.org/licenses/ ([https](https://www.apache.org/licenses/) result 200).
* [ ] http://www.apache.org/licenses/LICENSE-2.0 with 6515 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).
2019-03-23 15:19:34 +01:00
Sam Brannen 7bb66c4f49 Replace bit.ly links with real links 2019-03-23 13:54:40 +01:00
Sam Brannen 0c8b473cac Wikipedia -> Wiki 2019-03-23 13:44:59 +01:00
Sam Brannen 9b7215e640 URL Cleanup - update remaining license headers
See gh-22617 gh-22622 gh-22635
2019-03-23 13:11:10 +01:00
Sam Brannen 20764685ec Merge URL Cleanup PRs
This merges the URL Cleanup PRs along with fixes.

Closes gh-22617 gh-22622 gh-22635
2019-03-23 13:01:57 +01:00
Sam Brannen 8a61c56154 URL Cleanup - upgrade to more modern Xalan namespace
See gh-22617 gh-22622 gh-22635
2019-03-23 12:21:21 +01:00
Juergen Hoeller bddba68549 Polishing 2019-03-23 12:14:35 +01:00
Juergen Hoeller 32b46866c7 Make MultipartResolutionDelegate final (aligned with other delegates) 2019-03-23 12:14:21 +01:00
Juergen Hoeller 62e5585c2e Avoid package cycle between beans.factory.annotation and b.f.support
See gh-2060
2019-03-23 12:14:03 +01:00
Juergen Hoeller 5e15338a09 Nullability refinements (no IntelliJ warnings, fewer null checks)
Includes consistent ignoring of all java.lang (meta-)annotations.

Closes gh-22586
2019-03-23 12:13:38 +01:00
Sam Brannen 68837ebb57 URL Cleanup - fix undesirable code change
Namespace handlers are mapped based on the canonical names for XML
namespaces which in Spring do not use "https" as the scheme.

See gh-22617 gh-22622 gh-22635
2019-03-23 11:56:31 +01:00
Sam Brannen 307a74835d URL Cleanup - remove obsolete ATOM schema location
See gh-22617 gh-22622 gh-22635
2019-03-23 11:54:49 +01:00
Sam Brannen 2db36c00e7 URL Cleanup - use HTTPS where possible in links in Testing Chapter
See gh-22617 gh-22622 gh-22635
2019-03-23 11:54:11 +01:00
Sam Brannen 6164664f65 URL Cleanup - fix XSD imports
See gh-22617 gh-22622 gh-22635
2019-03-23 11:53:24 +01:00
Sam Brannen cedcd2fddd URL Cleanup - fix links
See gh-22617 gh-22622 gh-22635
2019-03-23 11:52:49 +01:00
Phillip Webb 75b52309a7 Migrate CommonAnnotationBeanPostProcessor to MergedAnnotations
Closes gh-22585
2019-03-22 20:40:05 +01:00
Phillip Webb 50c257794f Migrate DefaultListableBeanFactory to MergedAnnotations
Closes gh-22584
2019-03-22 20:40:05 +01:00
Phillip Webb 857371ba67 Migrate AutowiredAnnotationBeanPostProcessor to MergedAnnotations
Closes gh-22582
2019-03-22 20:40:05 +01:00
Phillip Webb f065abac93 Migrate AnnotationAwareOrderComparator to MergedAnnotations
Closes gh-22581
2019-03-22 20:40:05 +01:00
Phillip Webb 7244c9aea1 Add more aggressive annotation element filtering
Refine the element filtering performed by `AnnotationsScanner` to also
cover `org.springframework.util` and most `com.sun` classes which turn
out to be referenced quite frequently and which we know contain no
useful annotations.

See gh-21697
2019-03-22 20:40:05 +01:00
Phillip Webb db8eaec131 Cache BridgeMethodResolver results
Add a cache to `BridgeMethodResolver` to help with repeated calls to
resolve the same methods. Since bridge method resolution can be somewhat
expensive (especially when resolving generics), and the number of bridge
methods is quite small, a cache generally helps.

This commit also simplifies the code a little by calling `doWithMethods`
directly rather than relying on `ReflectionUtils.getAllDeclaredMethods`
to do so. The methods list is now always created, but we save the list
creation that `getAllDeclaredMethods` used to do.

Closes gh-22579
2019-03-22 20:40:05 +01:00
Phillip Webb a57d6ba5f3 Optimize StringUtils.cleanPath
Add an early exit to `StringUtils.cleanPath` to save array creating and
string concatenation. With a typical Spring application, the `cleanPath`
method can be called over 600 times, often with a path constructed by
a `ClassPathResource` that is likely to already be clean.

Closes gh-22568
2019-03-22 20:40:05 +01:00
Phillip Webb 19fb697d03 Add more empty array constants in ReflectionUtils
Add some additional empty array constants to `ReflectionUtils` to save
us creating new arrays for zero length results.

See gh-22567
2019-03-22 20:40:05 +01:00
Phillip Webb e3a86be122 Make ConcurrentReferenceHashMap more JIT friendly
Update `ConcurrentReferenceHashMap` to make some methods more inline
friendly, and to manually inline a few others. These minor optimizations
don't make a great deal of difference for most applications, but seem
worthwhile since we use `ConcurrentReferenceHashMap` for many internal
caches.

Closes gh-22566
2019-03-22 20:40:05 +01:00
Phillip Webb aa4e56b251 Optimize @Configuration class parsing a little
Update `ConfigurationClassParser` to skip `java.lang.annotation` types
which were often processed but would never provide useful results. Also
use a single shared immutable `SourceClass` instance to represent
`Object.class`.

Closes gh-22563
2019-03-22 20:40:05 +01:00
Phillip Webb 37255afca4 Complete migration of annotation utility methods
Delete `InternalAnnotationUtils` and `InternalAnnotatedElementUtils` and
migrate exclusively to the new `MergedAnnotations` API.

Closes gh-22562
2019-03-22 20:40:05 +01:00
Phillip Webb a14bfe9a21 Migrate and verify annotation utility methods
Migrate all possible `AnnotationUtils` and `AnnotatedElementUtils`
method to the `MergedAnnotation` API, verify results against the old
implementations.

All migrated methods now call both the new API and the old version and
ensure that the same results or exceptions are raised. A full build of
both Spring Framework and Spring Boot has been executed to ensure, as
much as possible, that the migration does not cause unexpected
regressions.

See gh-22562
2019-03-22 20:40:05 +01:00
Phillip Webb b91ccf038f Start migration annotation utility methods
Create internal variants of the existing `AnnotationUtils` and
`AnnotatedElementUtils` classes and migrate the existing classes to
use them.

The internal variants will be used to check that the same results are
given as we migrate the utils methods to use the new `MergedAnnotations`
API.

See gh-22562
2019-03-22 20:40:05 +01:00
Phillip Webb 4972d85ae0 Create a new API for handling merged annotations
Add new `MergedAnnotations` and `MergedAnnotation` interfaces that
attempt to provide a uniform way for dealing with merged annotations.

Specifically, the new API provides alternatives for the static methods
in `AnnotationUtils` and `AnnotatedElementUtils` and supports Spring's
comprehensive annotation attribute `@AliasFor` features. The interfaces
also open the possibility of the same API being exposed from the
`AnnotationMetadata` interface.

Additional utility classes for collecting, filtering and selecting
annotations have also been added.

Typical usage for the new API would be something like:

	MergedAnnotations.from(Example.class)
		.stream(MyAnnotation.class)
		.map(a -> a.getString("value"))
		.forEach(System.out::println);

Closes gh-21697
2019-03-22 20:40:05 +01:00
Phillip Webb fdacda8b01 Add AnnotationIntrospectionFailureTests
Add a new test class to help cover annotation introspection failure
handling. These tests were previously missing and are important to
ensure that annotation util code changes don't introduce regressions.

See gh-21697
2019-03-22 20:40:05 +01:00
Phillip Webb 8ef609a1b7 Add public variant getDeclaredMethods method
Add a public variant of `getDeclaredMethods` that defensively copies the
cached methods array. This is often more faster and more convenient
for users than calling `doWithLocalMethods`. We still retain most of the
benefits of the cache, namely fewer security manager calls and not as
many `Method` instances being created.

Closes gh-22580
2019-03-22 20:40:05 +01:00
Phillip Webb 5044ee8fe6 Add AssertJ dependency for tests usage
Add AssertJ as a test scope dependency for all sub-projects.

Closes gh-22561
2019-03-22 20:40:05 +01:00
Phillip Webb ecbad874bf Refine eclipse settings 2019-03-22 20:40:05 +01:00
Phillip Webb 9c92b21af8 Polishing 2019-03-22 20:40:05 +01:00
Rossen Stoyanchev f8121515bf Merge branch '5.1.x' 2019-03-22 14:50:51 -04:00
Rossen Stoyanchev c9a86e1ff4 Polish
See gh-22598
2019-03-22 14:39:21 -04:00
wenqi.huang d10174a3e9 Optimize performance of produces condition checks 2019-03-22 13:59:34 -04:00
Sam Brannen 7fe12cc23e URL Cleanup
This merges the URL Cleanup PRs along with fixes.

Closes gh-22617 gh-22622 gh-22635
2019-03-22 16:37:36 +01:00
Sam Brannen 14902e1744 Polish Javadoc 2019-03-22 13:32:24 +01:00
arman simonyan 517812d30a Fix grammar issue 2019-03-22 09:25:21 +01:00
Rob Winch bff3d2f2be Update to spring-javaformat-checkstyle 0.0.7
Remove unnecessary lambdas to fix updated checkstyle
2019-03-22 00:35:32 -05:00
Rob Winch 62ea7382d7 Polish URL Cleanup
Update Apache Headers
2019-03-22 00:24:06 -05:00
Spring Operator dc6f63f610 URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://www.apache.org/licenses/ with 1 occurrences migrated to:
  https://www.apache.org/licenses/ ([https](https://www.apache.org/licenses/) result 200).
* [ ] http://www.apache.org/licenses/LICENSE-2.0 with 6625 occurrences migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).
2019-03-21 23:49:28 -05:00
Rob Winch 263868f018 Polish URL Cleanup 2019-03-21 23:47:38 -05:00
Rossen Stoyanchev 2f95859715 Upgrade to RSocket 0.12.1-RC3-SNAPSHOT
Closes gh-22629
2019-03-21 19:31:06 -04:00
Spring Operator d99edd154f URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* [ ] http://aopalliance.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://aopalliance.sourceforge.net) result AnnotatedConnectException).
* [ ] http://cglib.sourceforge.net (200) with 2 occurrences could not be migrated:
   ([https](https://cglib.sourceforge.net) result AnnotatedConnectException).
* [ ] http://classdoc.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://classdoc.sourceforge.net) result AnnotatedConnectException).
* [ ] http://code.jquery.com:80/jquery.js (200) with 1 occurrences could not be migrated:
   ([https](https://code.jquery.com:80/jquery.js) result ClosedChannelException).
* [ ] http://dbunit.sourceforge.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://dbunit.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://docs.groovy-lang.org/docs/next/html/documentation/template-engines.html (200) with 1 occurrences could not be migrated:
   ([https](https://docs.groovy-lang.org/docs/next/html/documentation/template-engines.html) result SSLProtocolException).
* [ ] http://domain3.com (200) with 6 occurrences could not be migrated:
   ([https](https://domain3.com) result ConnectTimeoutException).
* [ ] http://forum.thymeleaf.org/Thymeleaf-3-0-8-JUST-PUBLISHED-td4030687.html (200) with 1 occurrences could not be migrated:
   ([https](https://forum.thymeleaf.org/Thymeleaf-3-0-8-JUST-PUBLISHED-td4030687.html) result SSLHandshakeException).
* [ ] http://grinder.sourceforge.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://grinder.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://groovy-lang.org/templating.html (200) with 3 occurrences could not be migrated:
   ([https](https://groovy-lang.org/templating.html) result SSLProtocolException).
* [ ] http://hsqldb.org (200) with 1 occurrences could not be migrated:
   ([https](https://hsqldb.org) result SSLHandshakeException).
* [ ] http://htmlunit.sourceforge.net/ (200) with 3 occurrences could not be migrated:
   ([https](https://htmlunit.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://htmlunit.sourceforge.net/gettingStarted.html (200) with 1 occurrences could not be migrated:
   ([https](https://htmlunit.sourceforge.net/gettingStarted.html) result AnnotatedConnectException).
* [ ] http://htmlunit.sourceforge.net/javascript.html (200) with 1 occurrences could not be migrated:
   ([https](https://htmlunit.sourceforge.net/javascript.html) result AnnotatedConnectException).
* [ ] http://javadiff.cvs.sourceforge.net/ (200) with 3 occurrences could not be migrated:
   ([https](https://javadiff.cvs.sourceforge.net/) result SSLHandshakeException).
* [ ] http://jibx.sourceforge.net/ (200) with 2 occurrences could not be migrated:
   ([https](https://jibx.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://joda-time.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://joda-time.sourceforge.net) result AnnotatedConnectException).
* [ ] http://jotm.objectweb.org/ (200) with 1 occurrences could not be migrated:
   ([https](https://jotm.objectweb.org/) result NotSslRecordException).
* [ ] http://json-b.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://json-b.net/) result SSLHandshakeException).
* [ ] http://mx4j.sourceforge.net (200) with 1 occurrences could not be migrated:
   ([https](https://mx4j.sourceforge.net) result AnnotatedConnectException).
* [ ] http://mx4j.sourceforge.net/ (200) with 1 occurrences could not be migrated:
   ([https](https://mx4j.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://mydomain3.com (200) with 9 occurrences could not be migrated:
   ([https](https://mydomain3.com) result ConnectTimeoutException).
* [ ] http://objenesis.org (200) with 1 occurrences could not be migrated:
   ([https](https://objenesis.org) result SSLHandshakeException).
* [ ] http://objenesis.org/tutorial.html (200) with 1 occurrences could not be migrated:
   ([https](https://objenesis.org/tutorial.html) result SSLHandshakeException).
* [ ] http://other.com/ (200) with 2 occurrences could not be migrated:
   ([https](https://other.com/) result SSLHandshakeException).
* [ ] http://reactivex.io/ (200) with 1 occurrences could not be migrated:
   ([https](https://reactivex.io/) result SSLHandshakeException).
* [ ] http://reactivex.io/documentation/operators.html (200) with 1 occurrences could not be migrated:
   ([https](https://reactivex.io/documentation/operators.html) result SSLHandshakeException).
* [ ] http://url.somewhereelse.com (200) with 4 occurrences could not be migrated:
   ([https](https://url.somewhereelse.com) result SSLHandshakeException).
* [ ] http://www.beanshell.org (200) with 1 occurrences could not be migrated:
   ([https](https://www.beanshell.org) result SSLHandshakeException).
* [ ] http://www.beanshell.org/ (200) with 1 occurrences could not be migrated:
   ([https](https://www.beanshell.org/) result SSLHandshakeException).
* [ ] http://www.doclet.com (200) with 1 occurrences could not be migrated:
   ([https](https://www.doclet.com) result AnnotatedConnectException).
* [ ] http://www.gebish.org/ (200) with 1 occurrences could not be migrated:
   ([https](https://www.gebish.org/) result SSLHandshakeException).
* [ ] http://www.gebish.org/manual/current/ (200) with 3 occurrences could not be migrated:
   ([https](https://www.gebish.org/manual/current/) result SSLHandshakeException).
* [ ] http://www.groovy-lang.org/ (200) with 2 occurrences could not be migrated:
   ([https](https://www.groovy-lang.org/) result SSLProtocolException).
* [ ] http://www.groovy-lang.org/operators.html (200) with 2 occurrences could not be migrated:
   ([https](https://www.groovy-lang.org/operators.html) result SSLProtocolException).
* [ ] http://www.hsqldb.org (200) with 1 occurrences could not be migrated:
   ([https](https://www.hsqldb.org) result SSLHandshakeException).
* [ ] http://www.jensgulden.de (200) with 1 occurrences could not be migrated:
   ([https](https://www.jensgulden.de) result AnnotatedConnectException).
* [ ] http://www.mockobjects.com (200) with 1 occurrences could not be migrated:
   ([https](https://www.mockobjects.com) result ClosedChannelException).
* [ ] http://www.mockobjects.com/ (200) with 1 occurrences could not be migrated:
   ([https](https://www.mockobjects.com/) result ClosedChannelException).
* [ ] http://www.w3.org/TR/cors/ (200) with 19 occurrences could not be migrated:
   ([https](https://www.w3.org/TR/cors/) result SSLException).
* [ ] http://xmlunit.sourceforge.net/ (200) with 2 occurrences could not be migrated:
   ([https](https://xmlunit.sourceforge.net/) result AnnotatedConnectException).
* [ ] http://www.easymock.org (301) with 1 occurrences could not be migrated:
   ([https](https://www.easymock.org) result SSLHandshakeException).
* [ ] http://www.easymock.org/ (301) with 1 occurrences could not be migrated:
   ([https](https://www.easymock.org/) result SSLHandshakeException).
* [ ] http://www.jmock.org/ (301) with 1 occurrences could not be migrated:
   ([https](https://www.jmock.org/) result SSLHandshakeException).
* [ ] http://foo.com (301) with 4 occurrences could not be migrated:
   ([https](https://foo.com) result SSLHandshakeException).
* [ ] http://foo.com/ (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/) result SSLHandshakeException).
* [ ] http://foo.com/a (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/a) result SSLHandshakeException).
* [ ] http://foo.com/a?foo=bar&foo=baz (301) with 4 occurrences could not be migrated:
   ([https](https://foo.com/a?foo=bar&foo=baz) result SSLHandshakeException).
* [ ] http://foo.com/bar (301) with 5 occurrences could not be migrated:
   ([https](https://foo.com/bar) result SSLHandshakeException).
* [ ] http://foo.com/baz (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/baz) result SSLHandshakeException).
* [ ] http://foo.com/rest/books/6.json (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/rest/books/6.json) result SSLHandshakeException).
* [ ] http://foo.com/rest/books/6/pages/1.json (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/rest/books/6/pages/1.json) result SSLHandshakeException).
* [ ] http://foo.com/v1 (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/v1) result SSLHandshakeException).
* [ ] http://foo.com/v1/123 (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/v1/123) result SSLHandshakeException).
* [ ] http://foo.com/v1/bar (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/v1/bar) result SSLHandshakeException).
* [ ] http://foo.com/v1?id=123 (301) with 2 occurrences could not be migrated:
   ([https](https://foo.com/v1?id=123) result SSLHandshakeException).
* [ ] http://foo.com/wrong (301) with 1 occurrences could not be migrated:
   ([https](https://foo.com/wrong) result SSLHandshakeException).
* [ ] http://mydomain4.com (301) with 3 occurrences could not be migrated:
   ([https](https://mydomain4.com) result SSLHandshakeException).
* [ ] http://xml.org/sax/features/ (301) with 4 occurrences could not be migrated:
   ([https](https://xml.org/sax/features/) result SSLHandshakeException).
* [ ] http://xml.org/sax/features/external-general-entities (301) with 10 occurrences could not be migrated:
   ([https](https://xml.org/sax/features/external-general-entities) result SSLHandshakeException).
* [ ] http://xml.org/sax/features/is-standalone (301) with 1 occurrences could not be migrated:
   ([https](https://xml.org/sax/features/is-standalone) result SSLHandshakeException).
* [ ] http://xml.org/sax/features/namespace-prefixes (301) with 13 occurrences could not be migrated:
   ([https](https://xml.org/sax/features/namespace-prefixes) result SSLHandshakeException).
* [ ] http://xml.org/sax/features/namespaces (301) with 12 occurrences could not be migrated:
   ([https](https://xml.org/sax/features/namespaces) result SSLHandshakeException).
* [ ] http://xml.org/sax/features/namespaces-prefixes (301) with 1 occurrences could not be migrated:
   ([https](https://xml.org/sax/features/namespaces-prefixes) result SSLHandshakeException).
* [ ] http://xml.org/sax/properties/lexical-handler (301) with 12 occurrences could not be migrated:
   ([https](https://xml.org/sax/properties/lexical-handler) result SSLHandshakeException).
* [ ] http://www.caucho.com/hessian (302) with 6 occurrences could not be migrated:
   ([https](https://www.caucho.com/hessian) result SSLHandshakeException).
* [ ] http://example.com:80/test/this/here (404) with 3 occurrences could not be migrated:
   ([https](https://example.com:80/test/this/here) result NotSslRecordException).
* [ ] http://www.foo.com/schema/component/component.xsd (404) with 1 occurrences could not be migrated:
   ([https](https://www.foo.com/schema/component/component.xsd) result SSLHandshakeException).
* [ ] http://www.foo.com/schema/jcache (404) with 2 occurrences could not be migrated:
   ([https](https://www.foo.com/schema/jcache) result SSLHandshakeException).
* [ ] http://www.mycompany.com/schema/myns/myns.xsd (404) with 1 occurrences could not be migrated:
   ([https](https://www.mycompany.com/schema/myns/myns.xsd) result ConnectTimeoutException).
* [ ] http://xunitpatterns.com/Test%20Spy.html (404) with 1 occurrences could not be migrated:
   ([https](https://xunitpatterns.com/Test%20Spy.html) result AnnotatedConnectException).

These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* [ ] http://mydomain2.com (302) with 22 occurrences migrated to:
  /QTifZ/ ([https](https://mydomain2.com) result IllegalArgumentException).
* [ ] http://www.jdiff.org (302) with 1 occurrences migrated to:
  /VQYNZ/ ([https](https://www.jdiff.org) result IllegalArgumentException).
* [ ] http://192.168.0.1/mvc-showcase (301) with 1 occurrences migrated to:
  /admin/ ([https](https://192.168.0.1/mvc-showcase) result IllegalArgumentException).
* [ ] http://bugs.sun.com/view_bug.do?bug_id=6342411 (302) with 1 occurrences migrated to:
  https://bugs.java.com/view_bug.do?bug_id=6342411 ([https](https://bugs.sun.com/view_bug.do?bug_id=6342411) result SSLHandshakeException).
* [ ] http://bugs.sun.com/view_bug.do?bug_id=7023180 (302) with 2 occurrences migrated to:
  https://bugs.java.com/view_bug.do?bug_id=7023180 ([https](https://bugs.sun.com/view_bug.do?bug_id=7023180) result SSLHandshakeException).
* [ ] http://www.freemarker.org (301) with 5 occurrences migrated to:
  https://freemarker.apache.org/ ([https](https://www.freemarker.org) result ConnectTimeoutException).
* [ ] http://sockjs.org (303) with 2 occurrences migrated to:
  https://github.com/sockjs/sockjs-client ([https](https://sockjs.org) result AnnotatedConnectException).
* [ ] http://projects.eclipse.org/projects/tools.buildship (301) with 1 occurrences migrated to:
  https://projects.eclipse.org/projects/tools.buildship ([https](https://projects.eclipse.org/projects/tools.buildship) result SSLException).
* [ ] http://tools.ietf.org/html/rfc6202 (301) with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc6202 ([https](https://tools.ietf.org/html/rfc6202) result ReadTimeoutException).
* [ ] http://tools.ietf.org/html/rfc7239 (301) with 7 occurrences migrated to:
  https://tools.ietf.org/html/rfc7239 ([https](https://tools.ietf.org/html/rfc7239) result ReadTimeoutException).
* [ ] http://aaa.org:8080/a (301) with 1 occurrences migrated to:
  https://www.aaa.org/articles/ ([https](https://aaa.org:8080/a) result NotSslRecordException).
* [ ] http://www.caucho.com (302) with 1 occurrences migrated to:
  https://www.caucho.com/ ([https](https://www.caucho.com) result SSLHandshakeException).
* [ ] http://jruby.org (301) with 4 occurrences migrated to:
  https://www.jruby.org ([https](https://jruby.org) result SSLHandshakeException).
* [ ] http://jruby.org/ (301) with 1 occurrences migrated to:
  https://www.jruby.org ([https](https://jruby.org/) result SSLHandshakeException).
* [ ] http://bbb.org:9090/b (AnnotatedConnectException) with 2 occurrences migrated to:
  https://bbb.org:9090/b ([https](https://bbb.org:9090/b) result AnnotatedConnectException).
* [ ] http://192.168.28.42/1.jsp (ConnectTimeoutException) with 3 occurrences migrated to:
  https://192.168.28.42/1.jsp ([https](https://192.168.28.42/1.jsp) result ConnectTimeoutException).
* [ ] http://abc.com/v2/accounts?q=12 (ConnectTimeoutException) with 1 occurrences migrated to:
  https://abc.com/v2/accounts?q=12 ([https](https://abc.com/v2/accounts?q=12) result ConnectTimeoutException).
* [ ] http://example.com:8080/ (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.com:8080/ ([https](https://example.com:8080/) result ConnectTimeoutException).
* [ ] http://example.com:8080/bar (ConnectTimeoutException) with 5 occurrences migrated to:
  https://example.com:8080/bar ([https](https://example.com:8080/bar) result ConnectTimeoutException).
* [ ] http://example.org:9090 (ConnectTimeoutException) with 2 occurrences migrated to:
  https://example.org:9090 ([https](https://example.org:9090) result ConnectTimeoutException).
* [ ] http://example.org:9090/base (ConnectTimeoutException) with 12 occurrences migrated to:
  https://example.org:9090/base ([https](https://example.org:9090/base) result ConnectTimeoutException).
* [ ] http://example.org:9090/base/people (ConnectTimeoutException) with 2 occurrences migrated to:
  https://example.org:9090/base/people ([https](https://example.org:9090/base/people) result ConnectTimeoutException).
* [ ] http://example.org:9090/base/something/1/foo (ConnectTimeoutException) with 2 occurrences migrated to:
  https://example.org:9090/base/something/1/foo ([https](https://example.org:9090/base/something/1/foo) result ConnectTimeoutException).
* [ ] http://example.org:9090/base/something/else (ConnectTimeoutException) with 2 occurrences migrated to:
  https://example.org:9090/base/something/else ([https](https://example.org:9090/base/something/else) result ConnectTimeoutException).
* [ ] http://example.org:9999/base (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/base ([https](https://example.org:9999/base) result ConnectTimeoutException).
* [ ] http://example.org:9999/base/api/people/123/addresses (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/base/api/people/123/addresses ([https](https://example.org:9999/base/api/people/123/addresses) result ConnectTimeoutException).
* [ ] http://example.org:9999/base/api/people/123/addresses/DE (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/base/api/people/123/addresses/DE ([https](https://example.org:9999/base/api/people/123/addresses/DE) result ConnectTimeoutException).
* [ ] http://example.org:9999/base/people/123/addresses/DE (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/base/people/123/addresses/DE ([https](https://example.org:9999/base/people/123/addresses/DE) result ConnectTimeoutException).
* [ ] http://example.org:9999/next (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/next ([https](https://example.org:9999/next) result ConnectTimeoutException).
* [ ] http://example.org:9999/path?q=foo (ConnectTimeoutException) with 1 occurrences migrated to:
  https://example.org:9999/path?q=foo ([https](https://example.org:9999/path?q=foo) result ConnectTimeoutException).
* [ ] http://foo.com:8080/v1/bar?id=123 (ConnectTimeoutException) with 1 occurrences migrated to:
  https://foo.com:8080/v1/bar?id=123 ([https](https://foo.com:8080/v1/bar?id=123) result ConnectTimeoutException).
* [ ] http://mydomain1.com:123 (ConnectTimeoutException) with 1 occurrences migrated to:
  https://mydomain1.com:123 ([https](https://mydomain1.com:123) result ConnectTimeoutException).
* [ ] http://site1.com (ConnectTimeoutException) with 13 occurrences migrated to:
  https://site1.com ([https](https://site1.com) result ConnectTimeoutException).
* [ ] http://wwws.sun.com/software/xml/developers/diffmk/ (ConnectTimeoutException) with 1 occurrences migrated to:
  https://wwws.sun.com/software/xml/developers/diffmk/ ([https](https://wwws.sun.com/software/xml/developers/diffmk/) result ConnectTimeoutException).
* [ ] http://aaa.org:8080/app/b/c/d (ReadTimeoutException) with 1 occurrences migrated to:
  https://aaa.org:8080/app/b/c/d ([https](https://aaa.org:8080/app/b/c/d) result NotSslRecordException).
* [ ] http://aaa.org:8080/b/c/d (ReadTimeoutException) with 1 occurrences migrated to:
  https://aaa.org:8080/b/c/d ([https](https://aaa.org:8080/b/c/d) result NotSslRecordException).
* [ ] http://www.w3.org/2000/xmlns/ (ReadTimeoutException) with 5 occurrences migrated to:
  https://www.w3.org/2000/xmlns/ ([https](https://www.w3.org/2000/xmlns/) result SSLException).
* [ ] http://www.w3.org/2004/08/xop/include (ReadTimeoutException) with 2 occurrences migrated to:
  https://www.w3.org/2004/08/xop/include ([https](https://www.w3.org/2004/08/xop/include) result SSLException).
* [ ] http://www.w3.org/DesignIssues/MatrixURIs.html (ReadTimeoutException) with 2 occurrences migrated to:
  https://www.w3.org/DesignIssues/MatrixURIs.html ([https](https://www.w3.org/DesignIssues/MatrixURIs.html) result SSLException).
* [ ] http://www.w3.org/TR/2004/WD-soap12-mtom-20040608/ (ReadTimeoutException) with 2 occurrences migrated to:
  https://www.w3.org/TR/2004/WD-soap12-mtom-20040608/ ([https](https://www.w3.org/TR/2004/WD-soap12-mtom-20040608/) result SSLException).
* [ ] http://www.w3.org/TR/2005/REC-xop10-20050125/ (ReadTimeoutException) with 6 occurrences migrated to:
  https://www.w3.org/TR/2005/REC-xop10-20050125/ ([https](https://www.w3.org/TR/2005/REC-xop10-20050125/) result SSLException).
* [ ] http://www.w3.org/TR/eventsource/ (ReadTimeoutException) with 2 occurrences migrated to:
  https://www.w3.org/TR/eventsource/ ([https](https://www.w3.org/TR/eventsource/) result SSLException).
* [ ] http://www.w3.org/TR/html4/loose.dtd (ReadTimeoutException) with 5 occurrences migrated to:
  https://www.w3.org/TR/html4/loose.dtd ([https](https://www.w3.org/TR/html4/loose.dtd) result SSLException).
* [ ] http://www.w3.org/TR/xhtml1/ (ReadTimeoutException) with 1 occurrences migrated to:
  https://www.w3.org/TR/xhtml1/ ([https](https://www.w3.org/TR/xhtml1/) result SSLException).
* [ ] http://www.w3.org/TR/xhtml1/diffs.html (ReadTimeoutException) with 1 occurrences migrated to:
  https://www.w3.org/TR/xhtml1/diffs.html ([https](https://www.w3.org/TR/xhtml1/diffs.html) result SSLException).
* [ ] http://www.w3.org/TR/xhtml1/dtds.html (ReadTimeoutException) with 1 occurrences migrated to:
  https://www.w3.org/TR/xhtml1/dtds.html ([https](https://www.w3.org/TR/xhtml1/dtds.html) result SSLException).
* [ ] http://www.w3.org/XML/1998/namespace (ReadTimeoutException) with 5 occurrences migrated to:
  https://www.w3.org/XML/1998/namespace ([https](https://www.w3.org/XML/1998/namespace) result SSLException).
* [ ] http://Additional-namespace-name-URI (UnknownHostException) with 1 occurrences migrated to:
  https://Additional-namespace-name-URI ([https](https://Additional-namespace-name-URI) result UnknownHostException).
* [ ] http://DOMAIN2.com (UnknownHostException) with 2 occurrences migrated to:
  https://DOMAIN2.com ([https](https://DOMAIN2.com) result UnknownHostException).
* [ ] http://Default-namespace-name-URI (UnknownHostException) with 1 occurrences migrated to:
  https://Default-namespace-name-URI ([https](https://Default-namespace-name-URI) result UnknownHostException).
* [ ] http://HOST:8080/remoting/AccountService (UnknownHostException) with 1 occurrences migrated to:
  https://HOST:8080/remoting/AccountService ([https](https://HOST:8080/remoting/AccountService) result UnknownHostException).
* [ ] http://Namespace-name-URI (UnknownHostException) with 1 occurrences migrated to:
  https://Namespace-name-URI ([https](https://Namespace-name-URI) result UnknownHostException).
* [ ] http://Unbound-namespace-name-URI (UnknownHostException) with 1 occurrences migrated to:
  https://Unbound-namespace-name-URI ([https](https://Unbound-namespace-name-URI) result UnknownHostException).
* [ ] http://a.example.org/mvc-showcase (UnknownHostException) with 1 occurrences migrated to:
  https://a.example.org/mvc-showcase ([https](https://a.example.org/mvc-showcase) result UnknownHostException).
* [ ] http://anotherHost/mvc-showcase (UnknownHostException) with 1 occurrences migrated to:
  https://anotherHost/mvc-showcase ([https](https://anotherHost/mvc-showcase) result UnknownHostException).
* [ ] http://arjen:foobar@java.sun.com:80 (UnknownHostException) with 1 occurrences migrated to:
  https://arjen:foobar@java.sun.com:80 ([https](https://arjen:foobar@java.sun.com:80) result UnknownHostException).
* [ ] http://barfoo:8888 (UnknownHostException) with 1 occurrences migrated to:
  https://barfoo:8888 ([https](https://barfoo:8888) result UnknownHostException).
* [ ] http://dev.bar.com (UnknownHostException) with 3 occurrences migrated to:
  https://dev.bar.com ([https](https://dev.bar.com) result UnknownHostException).
* [ ] http://domain1.com (UnknownHostException) with 25 occurrences migrated to:
  https://domain1.com ([https](https://domain1.com) result UnknownHostException).
* [ ] http://domain1.com/test.html (UnknownHostException) with 4 occurrences migrated to:
  https://domain1.com/test.html ([https](https://domain1.com/test.html) result UnknownHostException).
* [ ] http://domain2.com (UnknownHostException) with 98 occurrences migrated to:
  https://domain2.com ([https](https://domain2.com) result UnknownHostException).
* [ ] http://example.com&quot;,HttpMethod.GET (UnknownHostException) with 6 occurrences migrated to:
  https://example.com&quot;,HttpMethod.GET ([https](https://example.com&quot;,HttpMethod.GET) result UnknownHostException).
* [ ] http://example/ (UnknownHostException) with 1 occurrences migrated to:
  https://example/ ([https](https://example/) result UnknownHostException).
* [ ] http://fake-service (UnknownHostException) with 7 occurrences migrated to:
  https://fake-service ([https](https://fake-service) result UnknownHostException).
* [ ] http://foo (UnknownHostException) with 3 occurrences migrated to:
  https://foo ([https](https://foo) result UnknownHostException).
* [ ] http://foo.bar.com (UnknownHostException) with 4 occurrences migrated to:
  https://foo.bar.com ([https](https://foo.bar.com) result UnknownHostException).
* [ ] http://foobar:8088 (UnknownHostException) with 1 occurrences migrated to:
  https://foobar:8088 ([https](https://foobar:8088) result UnknownHostException).
* [ ] http://host:port/myApp/myEndpoint/ (UnknownHostException) with 1 occurrences migrated to:
  https://host:port/myApp/myEndpoint/ ([https](https://host:port/myApp/myEndpoint/) result UnknownHostException).
* [ ] http://jaxws.remoting.springframework.org/ (UnknownHostException) with 4 occurrences migrated to:
  https://jaxws.remoting.springframework.org/ ([https](https://jaxws.remoting.springframework.org/) result UnknownHostException).
* [ ] http://joe.openid.example.org/ (UnknownHostException) with 2 occurrences migrated to:
  https://joe.openid.example.org/ ([https](https://joe.openid.example.org/) result UnknownHostException).
* [ ] http://myserver (UnknownHostException) with 1 occurrences migrated to:
  https://myserver ([https](https://myserver) result UnknownHostException).
* [ ] http://myserver/logo.png (UnknownHostException) with 1 occurrences migrated to:
  https://myserver/logo.png ([https](https://myserver/logo.png) result UnknownHostException).
* [ ] http://myurl (UnknownHostException) with 12 occurrences migrated to:
  https://myurl ([https](https://myurl) result UnknownHostException).
* [ ] http://remotehost:8080/remoting/AccountService (UnknownHostException) with 2 occurrences migrated to:
  https://remotehost:8080/remoting/AccountService ([https](https://remotehost:8080/remoting/AccountService) result UnknownHostException).
* [ ] http://samples.springframework.org/order (UnknownHostException) with 2 occurrences migrated to:
  https://samples.springframework.org/order ([https](https://samples.springframework.org/order) result UnknownHostException).
* [ ] http://somethingDifferent (UnknownHostException) with 1 occurrences migrated to:
  https://somethingDifferent ([https](https://somethingDifferent) result UnknownHostException).
* [ ] http://url.somewhere.com (UnknownHostException) with 25 occurrences migrated to:
  https://url.somewhere.com ([https](https://url.somewhere.com) result UnknownHostException).
* [ ] http://url.somewhere.com/path (UnknownHostException) with 1 occurrences migrated to:
  https://url.somewhere.com/path ([https](https://url.somewhere.com/path) result UnknownHostException).
* [ ] http://url.somewhere.com/path?id=1 (UnknownHostException) with 1 occurrences migrated to:
  https://url.somewhere.com/path?id=1 ([https](https://url.somewhere.com/path?id=1) result UnknownHostException).
* [ ] http://url.somewhere.com/test.htm (UnknownHostException) with 2 occurrences migrated to:
  https://url.somewhere.com/test.htm ([https](https://url.somewhere.com/test.htm) result UnknownHostException).
* [ ] http://url.somewhere.com?a=b&c=d (UnknownHostException) with 1 occurrences migrated to:
  https://url.somewhere.com?a=b&c=d ([https](https://url.somewhere.com?a=b&c=d) result UnknownHostException).
* [ ] http://url.somewhere.com?foo= (UnknownHostException) with 2 occurrences migrated to:
  https://url.somewhere.com?foo= ([https](https://url.somewhere.com?foo=) result UnknownHostException).
* [ ] http://url.somewhere.com?foo=bar (UnknownHostException) with 4 occurrences migrated to:
  https://url.somewhere.com?foo=bar ([https](https://url.somewhere.com?foo=bar) result UnknownHostException).
* [ ] http://url.somewhere.com?foo=bar&a=b&c=d (UnknownHostException) with 2 occurrences migrated to:
  https://url.somewhere.com?foo=bar&a=b&c=d ([https](https://url.somewhere.com?foo=bar&a=b&c=d) result UnknownHostException).
* [ ] http://wiki.fasterxml.com/JacksonHome (UnknownHostException) with 3 occurrences migrated to:
  https://wiki.fasterxml.com/JacksonHome ([https](https://wiki.fasterxml.com/JacksonHome) result UnknownHostException).
* [ ] http://wiki.fasterxml.com/JacksonJsonViews (UnknownHostException) with 4 occurrences migrated to:
  https://wiki.fasterxml.com/JacksonJsonViews ([https](https://wiki.fasterxml.com/JacksonJsonViews) result UnknownHostException).
* [ ] http://www (UnknownHostException) with 1 occurrences migrated to:
  https://www ([https](https://www) result UnknownHostException).
* [ ] http://x.y.z (UnknownHostException) with 2 occurrences migrated to:
  https://x.y.z ([https](https://x.y.z) result UnknownHostException).
* [ ] http://abc.com/v1 (301) with 1 occurrences migrated to:
  https://abc.go.com/v1 ([https](https://abc.com/v1) result 404).
* [ ] http://abc.com/v1/accounts/43 (301) with 1 occurrences migrated to:
  https://abc.go.com/v1/accounts/43 ([https](https://abc.com/v1/accounts/43) result 404).
* [ ] http://abc.com/v1/accounts?q=12 (301) with 1 occurrences migrated to:
  https://abc.go.com/v1/accounts?q=12 ([https](https://abc.com/v1/accounts?q=12) result 404).
* [ ] http://apache.org/xml/features/disallow-doctype-decl (404) with 10 occurrences migrated to:
  https://apache.org/xml/features/disallow-doctype-decl ([https](https://apache.org/xml/features/disallow-doctype-decl) result 404).
* [ ] http://docs.spring.io/v1/bar (301) with 1 occurrences migrated to:
  https://docs.spring.io/v1/bar ([https](https://docs.spring.io/v1/bar) result 404).
* [ ] http://example.com/-foo (404) with 2 occurrences migrated to:
  https://example.com/-foo ([https](https://example.com/-foo) result 404).
* [ ] http://example.com/1 (404) with 1 occurrences migrated to:
  https://example.com/1 ([https](https://example.com/1) result 404).
* [ ] http://example.com/1/2 (404) with 2 occurrences migrated to:
  https://example.com/1/2 ([https](https://example.com/1/2) result 404).
* [ ] http://example.com/2 (404) with 1 occurrences migrated to:
  https://example.com/2 ([https](https://example.com/2) result 404).
* [ ] http://example.com/a%20b?q=a%2Bb (404) with 1 occurrences migrated to:
  https://example.com/a%20b?q=a%2Bb ([https](https://example.com/a%20b?q=a%2Bb) result 404).
* [ ] http://example.com/abc/ (404) with 1 occurrences migrated to:
  https://example.com/abc/ ([https](https://example.com/abc/) result 404).
* [ ] http://example.com/abc/x/y (404) with 1 occurrences migrated to:
  https://example.com/abc/x/y ([https](https://example.com/abc/x/y) result 404).
* [ ] http://example.com/abc/x/y/z (404) with 3 occurrences migrated to:
  https://example.com/abc/x/y/z ([https](https://example.com/abc/x/y/z) result 404).
* [ ] http://example.com/app/login/authenticate (404) with 1 occurrences migrated to:
  https://example.com/app/login/authenticate ([https](https://example.com/app/login/authenticate) result 404).
* [ ] http://example.com/arbitrary/path (404) with 1 occurrences migrated to:
  https://example.com/arbitrary/path ([https](https://example.com/arbitrary/path) result 404).
* [ ] http://example.com/bar (404) with 6 occurrences migrated to:
  https://example.com/bar ([https](https://example.com/bar) result 404).
* [ ] http://example.com/context.xml (404) with 4 occurrences migrated to:
  https://example.com/context.xml ([https](https://example.com/context.xml) result 404).
* [ ] http://example.com/example (404) with 6 occurrences migrated to:
  https://example.com/example ([https](https://example.com/example) result 404).
* [ ] http://example.com/example/?name (404) with 1 occurrences migrated to:
  https://example.com/example/?name ([https](https://example.com/example/?name) result 404).
* [ ] http://example.com/example/?name= (404) with 1 occurrences migrated to:
  https://example.com/example/?name= ([https](https://example.com/example/?name=) result 404).
* [ ] http://example.com/example/?name=%20 (404) with 1 occurrences migrated to:
  https://example.com/example/?name=%20 ([https](https://example.com/example/?name=%20) result 404).
* [ ] http://example.com/example/?name=row%5B0%5D (404) with 1 occurrences migrated to:
  https://example.com/example/?name=row%5B0%5D ([https](https://example.com/example/?name=row%5B0%5D) result 404).
* [ ] http://example.com/example/?name=value (404) with 1 occurrences migrated to:
  https://example.com/example/?name=value ([https](https://example.com/example/?name=value) result 404).
* [ ] http://example.com/example/?name=value&param2=value+2 (404) with 1 occurrences migrated to:
  https://example.com/example/?name=value&param2=value+2 ([https](https://example.com/example/?name=value&param2=value+2) result 404).
* [ ] http://example.com/example/?row%5B0%5D=value (404) with 1 occurrences migrated to:
  https://example.com/example/?row%5B0%5D=value ([https](https://example.com/example/?row%5B0%5D=value) result 404).
* [ ] http://example.com/foo (404) with 7 occurrences migrated to:
  https://example.com/foo ([https](https://example.com/foo) result 404).
* [ ] http://example.com/foo/../bar (404) with 1 occurrences migrated to:
  https://example.com/foo/../bar ([https](https://example.com/foo/../bar) result 404).
* [ ] http://example.com/foo/foo2?bar (404) with 1 occurrences migrated to:
  https://example.com/foo/foo2?bar ([https](https://example.com/foo/foo2?bar) result 404).
* [ ] http://example.com/foo?bar (404) with 4 occurrences migrated to:
  https://example.com/foo?bar ([https](https://example.com/foo?bar) result 404).
* [ ] http://example.com/foo?bar= (404) with 2 occurrences migrated to:
  https://example.com/foo?bar= ([https](https://example.com/foo?bar=) result 404).
* [ ] http://example.com/foo?bar=baz (404) with 2 occurrences migrated to:
  https://example.com/foo?bar=baz ([https](https://example.com/foo?bar=baz) result 404).
* [ ] http://example.com/foo?baz=42 (404) with 1 occurrences migrated to:
  https://example.com/foo?baz=42 ([https](https://example.com/foo?baz=42) result 404).
* [ ] http://example.com/foo?foo=bar&baz=qux (404) with 2 occurrences migrated to:
  https://example.com/foo?foo=bar&baz=qux ([https](https://example.com/foo?foo=bar&baz=qux) result 404).
* [ ] http://example.com/hotel (404) with 3 occurrences migrated to:
  https://example.com/hotel ([https](https://example.com/hotel) result 404).
* [ ] http://example.com/hotel%20list (404) with 1 occurrences migrated to:
  https://example.com/hotel%20list ([https](https://example.com/hotel%20list) result 404).
* [ ] http://example.com/hotel%20list/Z (404) with 1 occurrences migrated to:
  https://example.com/hotel%20list/Z ([https](https://example.com/hotel%20list/Z) result 404).
* [ ] http://example.com/hotel%20list/Z%C3%BCrich (404) with 3 occurrences migrated to:
  https://example.com/hotel%20list/Z%C3%BCrich ([https](https://example.com/hotel%20list/Z%C3%BCrich) result 404).
* [ ] http://example.com/hotels (404) with 3 occurrences migrated to:
  https://example.com/hotels ([https](https://example.com/hotels) result 404).
* [ ] http://example.com/hotels/ (404) with 15 occurrences migrated to:
  https://example.com/hotels/ ([https](https://example.com/hotels/) result 404).
* [ ] http://example.com/hotels/1/bookings/42 (404) with 1 occurrences migrated to:
  https://example.com/hotels/1/bookings/42 ([https](https://example.com/hotels/1/bookings/42) result 404).
* [ ] http://example.com/hotels/1/pic/pics%2Flogo.png/size/150x150 (404) with 2 occurrences migrated to:
  https://example.com/hotels/1/pic/pics%2Flogo.png/size/150x150 ([https](https://example.com/hotels/1/pic/pics%2Flogo.png/size/150x150) result 404).
* [ ] http://example.com/hotels/1/pic/pics/logo.png (404) with 1 occurrences migrated to:
  https://example.com/hotels/1/pic/pics/logo.png ([https](https://example.com/hotels/1/pic/pics/logo.png) result 404).
* [ ] http://example.com/hotels/42/bookings/21 (404) with 1 occurrences migrated to:
  https://example.com/hotels/42/bookings/21 ([https](https://example.com/hotels/42/bookings/21) result 404).
* [ ] http://example.com/hotels/42/bookings/42 (404) with 1 occurrences migrated to:
  https://example.com/hotels/42/bookings/42 ([https](https://example.com/hotels/42/bookings/42) result 404).
* [ ] http://example.com/hotels/Rest%20%26%20Relax/bookings/42 (404) with 2 occurrences migrated to:
  https://example.com/hotels/Rest%20%26%20Relax/bookings/42 ([https](https://example.com/hotels/Rest%20%26%20Relax/bookings/42) result 404).
* [ ] http://example.com/info (404) with 2 occurrences migrated to:
  https://example.com/info ([https](https://example.com/info) result 404).
* [ ] http://example.com/invalid (404) with 1 occurrences migrated to:
  https://example.com/invalid ([https](https://example.com/invalid) result 404).
* [ ] http://example.com/jquery-1.11.0.min.js (404) with 2 occurrences migrated to:
  https://example.com/jquery-1.11.0.min.js ([https](https://example.com/jquery-1.11.0.min.js) result 404).
* [ ] http://example.com/match (404) with 1 occurrences migrated to:
  https://example.com/match ([https](https://example.com/match) result 404).
* [ ] http://example.com/myFileUpload (404) with 1 occurrences migrated to:
  https://example.com/myFileUpload ([https](https://example.com/myFileUpload) result 404).
* [ ] http://example.com/myForm (404) with 1 occurrences migrated to:
  https://example.com/myForm ([https](https://example.com/myForm) result 404).
* [ ] http://example.com/path (404) with 4 occurrences migrated to:
  https://example.com/path ([https](https://example.com/path) result 404).
* [ ] http://example.com/path?query (404) with 2 occurrences migrated to:
  https://example.com/path?query ([https](https://example.com/path?query) result 404).
* [ ] http://example.com/path?query=foo (404) with 1 occurrences migrated to:
  https://example.com/path?query=foo ([https](https://example.com/path?query=foo) result 404).
* [ ] http://example.com/people (404) with 1 occurrences migrated to:
  https://example.com/people ([https](https://example.com/people) result 404).
* [ ] http://example.com/people/ (404) with 1 occurrences migrated to:
  https://example.com/people/ ([https](https://example.com/people/) result 404).
* [ ] http://example.com/prefix/path (404) with 2 occurrences migrated to:
  https://example.com/prefix/path ([https](https://example.com/prefix/path) result 404).
* [ ] http://example.com/resource (404) with 5 occurrences migrated to:
  https://example.com/resource ([https](https://example.com/resource) result 404).
* [ ] http://example.com/resource?access_token=123 (404) with 1 occurrences migrated to:
  https://example.com/resource?access_token=123 ([https](https://example.com/resource?access_token=123) result 404).
* [ ] http://example.com/spaces (404) with 1 occurrences migrated to:
  https://example.com/spaces ([https](https://example.com/spaces) result 404).
* [ ] http://example.com/spaces%20and%20%E2%82%AC (404) with 3 occurrences migrated to:
  https://example.com/spaces%20and%20%E2%82%AC ([https](https://example.com/spaces%20and%20%E2%82%AC) result 404).
* [ ] http://example.com/spring/ (404) with 1 occurrences migrated to:
  https://example.com/spring/ ([https](https://example.com/spring/) result 404).
* [ ] http://example.com/test/this/here (404) with 1 occurrences migrated to:
  https://example.com/test/this/here ([https](https://example.com/test/this/here) result 404).
* [ ] http://example.com/upload (404) with 1 occurrences migrated to:
  https://example.com/upload ([https](https://example.com/upload) result 404).
* [ ] http://example.com/user (404) with 1 occurrences migrated to:
  https://example.com/user ([https](https://example.com/user) result 404).
* [ ] http://example.org/fonts/css (404) with 6 occurrences migrated to:
  https://example.org/fonts/css ([https](https://example.org/fonts/css) result 404).
* [ ] http://example.org/foo/page.html (404) with 1 occurrences migrated to:
  https://example.org/foo/page.html ([https](https://example.org/foo/page.html) result 404).
* [ ] http://example.org/image.png (404) with 4 occurrences migrated to:
  https://example.org/image.png ([https](https://example.org/image.png) result 404).
* [ ] http://example.org/music/people (404) with 4 occurrences migrated to:
  https://example.org/music/people ([https](https://example.org/music/people) result 404).
* [ ] http://example.org/page.cache.html (404) with 1 occurrences migrated to:
  https://example.org/page.cache.html ([https](https://example.org/page.cache.html) result 404).
* [ ] http://example.org/path (404) with 3 occurrences migrated to:
  https://example.org/path ([https](https://example.org/path) result 404).
* [ ] http://springframework.org/oxm-test (404) with 2 occurrences migrated to:
  https://springframework.org/oxm-test ([https](https://springframework.org/oxm-test) result 404).
* [ ] http://www.example.com/favicon.ico (404) with 2 occurrences migrated to:
  https://www.example.com/favicon.ico ([https](https://www.example.com/favicon.ico) result 404).
* [ ] http://www.example.com/foo/bar (404) with 1 occurrences migrated to:
  https://www.example.com/foo/bar ([https](https://www.example.com/foo/bar) result 404).
* [ ] http://www.example.com/hotels (404) with 2 occurrences migrated to:
  https://www.example.com/hotels ([https](https://www.example.com/hotels) result 404).
* [ ] http://www.example.com/user/ (404) with 4 occurrences migrated to:
  https://www.example.com/user/ ([https](https://www.example.com/user/) result 404).
* [ ] http://www.example.com/user/john%3Bdoe/dashboard (404) with 4 occurrences migrated to:
  https://www.example.com/user/john%3Bdoe/dashboard ([https](https://www.example.com/user/john%3Bdoe/dashboard) result 404).
* [ ] http://www.example.com/user/john;doe/dashboard (404) with 2 occurrences migrated to:
  https://www.example.com/user/john;doe/dashboard ([https](https://www.example.com/user/john;doe/dashboard) result 404).
* [ ] http://www.ibm.com/developerworks/websphere/library/techarticles/0404_tang/0404_tang.html (301) with 1 occurrences migrated to:
  https://www.ibm.com/developerworks/websphere/library/techarticles/0404_tang/0404_tang.html ([https](https://www.ibm.com/developerworks/websphere/library/techarticles/0404_tang/0404_tang.html) result 404).
* [ ] http://mydomain1.com:80/path (301) with 2 occurrences migrated to:
  https://www.mydomain1.com/path ([https](https://mydomain1.com:80/path) result 404).
* [ ] http://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-03 (404) with 1 occurrences migrated to:
  https://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-03 ([https](https://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/tutorial-lesson-03) result 404).
* [ ] http://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html (301) with 1 occurrences migrated to:
  https://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html ([https](https://www.utoronto.ca/webdocs/HTMLdocs/Book/Book-3ed/appb/mimetype.html) result 404).
* [ ] http://xml.apache.org/xslt (404) with 3 occurrences migrated to:
  https://xml.apache.org/xslt ([https](https://xml.apache.org/xslt) result 404).
* [ ] http://myhost.com/resource/path/myTemplate.txt (500) with 1 occurrences migrated to:
  https://myhost.com/resource/path/myTemplate.txt ([https](https://myhost.com/resource/path/myTemplate.txt) result 500).
* [ ] http://myhost.com/some/arbitrary/path (500) with 1 occurrences migrated to:
  https://myhost.com/some/arbitrary/path ([https](https://myhost.com/some/arbitrary/path) result 500).

These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* [ ] http://activemq.apache.org/delete-inactive-destinations.html with 1 occurrences migrated to:
  https://activemq.apache.org/delete-inactive-destinations.html ([https](https://activemq.apache.org/delete-inactive-destinations.html) result 200).
* [ ] http://activemq.apache.org/stomp.html with 1 occurrences migrated to:
  https://activemq.apache.org/stomp.html ([https](https://activemq.apache.org/stomp.html) result 200).
* [ ] http://ant.apache.org with 1 occurrences migrated to:
  https://ant.apache.org ([https](https://ant.apache.org) result 200).
* [ ] http://asciidoctor.org/ with 1 occurrences migrated to:
  https://asciidoctor.org/ ([https](https://asciidoctor.org/) result 200).
* [ ] http://asciidoctor.org/docs/editing-asciidoc-with-live-preview/ with 2 occurrences migrated to:
  https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/ ([https](https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/) result 200).
* [ ] http://beanvalidation.org/ with 1 occurrences migrated to:
  https://beanvalidation.org/ ([https](https://beanvalidation.org/) result 200).
* [ ] http://caniuse.com/ with 2 occurrences migrated to:
  https://caniuse.com/ ([https](https://caniuse.com/) result 200).
* [ ] http://cbor.io/ with 1 occurrences migrated to:
  https://cbor.io/ ([https](https://cbor.io/) result 200).
* [ ] http://code.jquery.com/jquery-1.11.0.min.js with 2 occurrences migrated to:
  https://code.jquery.com/jquery-1.11.0.min.js ([https](https://code.jquery.com/jquery-1.11.0.min.js) result 200).
* [ ] http://code.jquery.com/jquery.js with 1 occurrences migrated to:
  https://code.jquery.com/jquery.js ([https](https://code.jquery.com/jquery.js) result 200).
* [ ] http://commons.apache.org/proper/commons-lang/ with 2 occurrences migrated to:
  https://commons.apache.org/proper/commons-lang/ ([https](https://commons.apache.org/proper/commons-lang/) result 200).
* [ ] http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html ([https](https://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html) result 200).
* [ ] http://docs.oracle.com/javase/8/docs/api/java/beans/package-summary.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/8/docs/api/java/beans/package-summary.html ([https](https://docs.oracle.com/javase/8/docs/api/java/beans/package-summary.html) result 200).
* [ ] http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html ([https](https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html) result 200).
* [ ] http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html ([https](https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html) result 200).
* [ ] http://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngineFactory.html with 2 occurrences migrated to:
  https://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngineFactory.html ([https](https://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngineFactory.html) result 200).
* [ ] http://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html ([https](https://docs.oracle.com/javase/tutorial/javabeans/advanced/customization.html) result 200).
* [ ] http://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html with 1 occurrences migrated to:
  https://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html ([https](https://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html) result 200).
* [ ] http://docs.seleniumhq.org/ with 1 occurrences migrated to:
  https://docs.seleniumhq.org/ ([https](https://docs.seleniumhq.org/) result 200).
* [ ] http://docs.seleniumhq.org/projects/webdriver/ with 1 occurrences migrated to:
  https://docs.seleniumhq.org/projects/webdriver/ ([https](https://docs.seleniumhq.org/projects/webdriver/) result 200).
* [ ] http://docs.spring.io/spring-framework/docs/current/javadoc-api/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-framework/docs/current/javadoc-api/ ([https](https://docs.spring.io/spring-framework/docs/current/javadoc-api/) result 200).
* [ ] http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/view/script/ScriptTemplateView.html with 1 occurrences migrated to:
  https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/view/script/ScriptTemplateView.html ([https](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/view/script/ScriptTemplateView.html) result 200).
* [ ] http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/ ([https](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/) result 200).
* [ ] http://docs.spring.io/spring-session/docs/current/reference/html5/ with 1 occurrences migrated to:
  https://docs.spring.io/spring-session/docs/current/reference/html5/ ([https](https://docs.spring.io/spring-session/docs/current/reference/html5/) result 200).
* [ ] http://en.wikipedia.org/wiki/Adapter_pattern with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Adapter_pattern ([https](https://en.wikipedia.org/wiki/Adapter_pattern) result 200).
* [ ] http://en.wikipedia.org/wiki/Halting_Problem with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Halting_Problem ([https](https://en.wikipedia.org/wiki/Halting_Problem) result 200).
* [ ] http://en.wikipedia.org/wiki/List_of_HTTP_status_codes with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/List_of_HTTP_status_codes ([https](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) result 200).
* [ ] http://en.wikipedia.org/wiki/MIME with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/MIME ([https](https://en.wikipedia.org/wiki/MIME) result 200).
* [ ] http://en.wikipedia.org/wiki/Mock_Object with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Mock_Object ([https](https://en.wikipedia.org/wiki/Mock_Object) result 200).
* [ ] http://en.wikipedia.org/wiki/Polyfill with 2 occurrences migrated to:
  https://en.wikipedia.org/wiki/Polyfill ([https](https://en.wikipedia.org/wiki/Polyfill) result 200).
* [ ] http://example.com with 150 occurrences migrated to:
  https://example.com ([https](https://example.com) result 200).
* [ ] http://example.com/ with 16 occurrences migrated to:
  https://example.com/ ([https](https://example.com/) result 200).
* [ ] http://example.com?foo with 2 occurrences migrated to:
  https://example.com?foo ([https](https://example.com?foo) result 200).
* [ ] http://example.com?foo=bar with 8 occurrences migrated to:
  https://example.com?foo=bar ([https](https://example.com?foo=bar) result 200).
* [ ] http://example.com?foo=bar@baz with 1 occurrences migrated to:
  https://example.com?foo=bar@baz ([https](https://example.com?foo=bar@baz) result 200).
* [ ] http://example.org with 18 occurrences migrated to:
  https://example.org ([https](https://example.org) result 200).
* [ ] http://example.org/ with 1 occurrences migrated to:
  https://example.org/ ([https](https://example.org/) result 200).
* [ ] http://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/DeserializationFeature.html with 2 occurrences migrated to:
  https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/DeserializationFeature.html ([https](https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/DeserializationFeature.html) result 200).
* [ ] http://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/MapperFeature.html with 2 occurrences migrated to:
  https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/MapperFeature.html ([https](https://fasterxml.github.io/jackson-databind/javadoc/2.6/com/fasterxml/jackson/databind/MapperFeature.html) result 200).
* [ ] http://h2database.com with 1 occurrences migrated to:
  https://h2database.com ([https](https://h2database.com) result 200).
* [ ] http://handlebarsjs.com with 2 occurrences migrated to:
  https://handlebarsjs.com ([https](https://handlebarsjs.com) result 200).
* [ ] http://handlebarsjs.com/ with 2 occurrences migrated to:
  https://handlebarsjs.com/ ([https](https://handlebarsjs.com/) result 200).
* [ ] http://hc.apache.org/httpcomponents-asyncclient-dev/ with 1 occurrences migrated to:
  https://hc.apache.org/httpcomponents-asyncclient-dev/ ([https](https://hc.apache.org/httpcomponents-asyncclient-dev/) result 200).
* [ ] http://hc.apache.org/httpcomponents-client-ga/ with 2 occurrences migrated to:
  https://hc.apache.org/httpcomponents-client-ga/ ([https](https://hc.apache.org/httpcomponents-client-ga/) result 200).
* [ ] http://hc.apache.org/httpcomponents-client-ga/httpclient/ with 1 occurrences migrated to:
  https://hc.apache.org/httpcomponents-client-ga/httpclient/ ([https](https://hc.apache.org/httpcomponents-client-ga/httpclient/) result 200).
* [ ] http://www.hibernate.org/ (301) with 1 occurrences migrated to:
  https://hibernate.org/ ([https](https://www.hibernate.org/) result 200).
* [ ] http://www.hibernate.org (301) with 1 occurrences migrated to:
  https://hibernate.org/ ([https](https://www.hibernate.org) result 200).
* [ ] http://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html with 1 occurrences migrated to:
  https://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html ([https](https://jcp.org/aboutJava/communityprocess/final/jsr003/index3.html) result 200).
* [ ] http://jcp.org/aboutJava/communityprocess/final/jsr160/index.html with 1 occurrences migrated to:
  https://jcp.org/aboutJava/communityprocess/final/jsr160/index.html ([https](https://jcp.org/aboutJava/communityprocess/final/jsr160/index.html) result 200).
* [ ] http://jcp.org/en/jsr/detail?id=107 with 1 occurrences migrated to:
  https://jcp.org/en/jsr/detail?id=107 ([https](https://jcp.org/en/jsr/detail?id=107) result 200).
* [ ] http://joel-costigliola.github.io/assertj/ with 3 occurrences migrated to:
  https://joel-costigliola.github.io/assertj/ ([https](https://joel-costigliola.github.io/assertj/) result 200).
* [ ] http://jsonassert.skyscreamer.org with 1 occurrences migrated to:
  https://jsonassert.skyscreamer.org ([https](https://jsonassert.skyscreamer.org) result 200).
* [ ] http://jsonassert.skyscreamer.org/ with 5 occurrences migrated to:
  https://jsonassert.skyscreamer.org/ ([https](https://jsonassert.skyscreamer.org/) result 200).
* [ ] http://junit.org/junit5/docs/current/user-guide/ with 2 occurrences migrated to:
  https://junit.org/junit5/docs/current/user-guide/ ([https](https://junit.org/junit5/docs/current/user-guide/) result 200).
* [ ] http://kotlinlang.org/ with 2 occurrences migrated to:
  https://kotlinlang.org/ ([https](https://kotlinlang.org/) result 200).
* [ ] http://kotlinlang.org/docs/reference/ with 1 occurrences migrated to:
  https://kotlinlang.org/docs/reference/ ([https](https://kotlinlang.org/docs/reference/) result 200).
* [ ] http://kotlinlang.org/docs/reference/classes.html with 3 occurrences migrated to:
  https://kotlinlang.org/docs/reference/classes.html ([https](https://kotlinlang.org/docs/reference/classes.html) result 200).
* [ ] http://mydomain.com with 5 occurrences migrated to:
  https://mydomain.com ([https](https://mydomain.com) result 200).
* [ ] http://netty.io/ with 1 occurrences migrated to:
  https://netty.io/ ([https](https://netty.io/) result 200).
* [ ] http://openjdk.java.net/jeps/290 with 1 occurrences migrated to:
  https://openjdk.java.net/jeps/290 ([https](https://openjdk.java.net/jeps/290) result 200).
* [ ] http://openjdk.java.net/projects/nashorn/ with 10 occurrences migrated to:
  https://openjdk.java.net/projects/nashorn/ ([https](https://openjdk.java.net/projects/nashorn/) result 200).
* [ ] http://pivotal.io/security/cve-2015-5211 with 1 occurrences migrated to:
  https://pivotal.io/security/cve-2015-5211 ([https](https://pivotal.io/security/cve-2015-5211) result 200).
* [ ] http://poi.apache.org with 3 occurrences migrated to:
  https://poi.apache.org ([https](https://poi.apache.org) result 200).
* [ ] http://projects.spring.io/spring-boot/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-boot/ ([https](https://projects.spring.io/spring-boot/) result 200).
* [ ] http://projects.spring.io/spring-data/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-data/ ([https](https://projects.spring.io/spring-data/) result 200).
* [ ] http://projects.spring.io/spring-framework/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-framework/ ([https](https://projects.spring.io/spring-framework/) result 200).
* [ ] http://projects.spring.io/spring-integration/ with 1 occurrences migrated to:
  https://projects.spring.io/spring-integration/ ([https](https://projects.spring.io/spring-integration/) result 200).
* [ ] http://projects.spring.io/spring-security/ with 3 occurrences migrated to:
  https://projects.spring.io/spring-security/ ([https](https://projects.spring.io/spring-security/) result 200).
* [ ] http://repo1.maven.org/maven2/javax/inject/javax.inject/1/ with 2 occurrences migrated to:
  https://repo1.maven.org/maven2/javax/inject/javax.inject/1/ ([https](https://repo1.maven.org/maven2/javax/inject/javax.inject/1/) result 200).
* [ ] http://schema.spring.io/mvc/spring-mvc.xsd with 1 occurrences migrated to:
  https://schema.spring.io/mvc/spring-mvc.xsd ([https](https://schema.spring.io/mvc/spring-mvc.xsd) result 200).
* [ ] http://search.maven.org/ with 2 occurrences migrated to:
  https://search.maven.org/ ([https](https://search.maven.org/) result 200).
* [ ] http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html with 3 occurrences migrated to:
  https://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html ([https](https://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html) result 200).
* [ ] http://sourceforge.net with 1 occurrences migrated to:
  https://sourceforge.net ([https](https://sourceforge.net) result 200).
* [ ] http://sourceforge.net/projects/javadiff/ with 1 occurrences migrated to:
  https://sourceforge.net/projects/javadiff/ ([https](https://sourceforge.net/projects/javadiff/) result 200).
* [ ] http://sourceforge.net/sflogo.php?group_id=37160 with 1 occurrences migrated to:
  https://sourceforge.net/sflogo.php?group_id=37160 ([https](https://sourceforge.net/sflogo.php?group_id=37160) result 200).
* [ ] http://spring.io/blog/ with 1 occurrences migrated to:
  https://spring.io/blog/ ([https](https://spring.io/blog/) result 200).
* [ ] http://spring.io/blog/category/news with 1 occurrences migrated to:
  https://spring.io/blog/category/news ([https](https://spring.io/blog/category/news) result 200).
* [ ] http://square.github.io/okhttp/ with 1 occurrences migrated to:
  https://square.github.io/okhttp/ ([https](https://square.github.io/okhttp/) result 200).
* [ ] http://stackoverflow.com/questions/1481251/what-does-document-domain-document-domain-do with 1 occurrences migrated to:
  https://stackoverflow.com/questions/1481251/what-does-document-domain-document-domain-do ([https](https://stackoverflow.com/questions/1481251/what-does-document-domain-document-domain-do) result 200).
* [ ] http://stackoverflow.com/questions/19394570/java-jre-7u45-breaks-classloader-getresources with 2 occurrences migrated to:
  https://stackoverflow.com/questions/19394570/java-jre-7u45-breaks-classloader-getresources ([https](https://stackoverflow.com/questions/19394570/java-jre-7u45-breaks-classloader-getresources) result 200).
* [ ] http://stackoverflow.com/questions/22986109/testing-spring-managed-servlet with 1 occurrences migrated to:
  https://stackoverflow.com/questions/22986109/testing-spring-managed-servlet ([https](https://stackoverflow.com/questions/22986109/testing-spring-managed-servlet) result 200).
* [ ] http://stackoverflow.com/questions/24725438/what-could-cause-a-class-implementing-applicationlistenercontextrefreshedevent with 1 occurrences migrated to:
  https://stackoverflow.com/questions/24725438/what-could-cause-a-class-implementing-applicationlistenercontextrefreshedevent ([https](https://stackoverflow.com/questions/24725438/what-could-cause-a-class-implementing-applicationlistenercontextrefreshedevent) result 200).
* [ ] http://stackoverflow.com/questions/35733344/can-contextconfiguration-in-a-custom-annotation-be-merged with 1 occurrences migrated to:
  https://stackoverflow.com/questions/35733344/can-contextconfiguration-in-a-custom-annotation-be-merged ([https](https://stackoverflow.com/questions/35733344/can-contextconfiguration-in-a-custom-annotation-be-merged) result 200).
* [ ] http://start.spring.io/ with 2 occurrences migrated to:
  https://start.spring.io/ ([https](https://start.spring.io/) result 200).
* [ ] http://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html with 1 occurrences migrated to:
  https://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html ([https](https://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html) result 200).
* [ ] http://stomp.github.io/stomp-specification-1.2.html with 9 occurrences migrated to:
  https://stomp.github.io/stomp-specification-1.2.html ([https](https://stomp.github.io/stomp-specification-1.2.html) result 200).
* [ ] http://struts.apache.org with 1 occurrences migrated to:
  https://struts.apache.org ([https](https://struts.apache.org) result 200).
* [ ] http://struts.apache.org/ with 1 occurrences migrated to:
  https://struts.apache.org/ ([https](https://struts.apache.org/) result 200).
* [ ] http://tapestry.apache.org/ with 2 occurrences migrated to:
  https://tapestry.apache.org/ ([https](https://tapestry.apache.org/) result 200).
* [ ] http://tiles.apache.org with 4 occurrences migrated to:
  https://tiles.apache.org ([https](https://tiles.apache.org) result 200).
* [ ] http://tiles.apache.org/framework/dependency-management.html with 1 occurrences migrated to:
  https://tiles.apache.org/framework/dependency-management.html ([https](https://tiles.apache.org/framework/dependency-management.html) result 200).
* [ ] http://tomcat.apache.org/ with 1 occurrences migrated to:
  https://tomcat.apache.org/ ([https](https://tomcat.apache.org/) result 200).
* [ ] http://tools.ietf.org/html/rfc1945 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc1945 ([https](https://tools.ietf.org/html/rfc1945) result 200).
* [ ] http://tools.ietf.org/html/rfc2109 with 2 occurrences migrated to:
  https://tools.ietf.org/html/rfc2109 ([https](https://tools.ietf.org/html/rfc2109) result 200).
* [ ] http://tools.ietf.org/html/rfc2295 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2295 ([https](https://tools.ietf.org/html/rfc2295) result 200).
* [ ] http://tools.ietf.org/html/rfc2324 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2324 ([https](https://tools.ietf.org/html/rfc2324) result 200).
* [ ] http://tools.ietf.org/html/rfc2518 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2518 ([https](https://tools.ietf.org/html/rfc2518) result 200).
* [ ] http://tools.ietf.org/html/rfc2616 with 3 occurrences migrated to:
  https://tools.ietf.org/html/rfc2616 ([https](https://tools.ietf.org/html/rfc2616) result 200).
* [ ] http://tools.ietf.org/html/rfc2774 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2774 ([https](https://tools.ietf.org/html/rfc2774) result 200).
* [ ] http://tools.ietf.org/html/rfc2817 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2817 ([https](https://tools.ietf.org/html/rfc2817) result 200).
* [ ] http://tools.ietf.org/html/rfc2965 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc2965 ([https](https://tools.ietf.org/html/rfc2965) result 200).
* [ ] http://tools.ietf.org/html/rfc3229 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc3229 ([https](https://tools.ietf.org/html/rfc3229) result 200).
* [ ] http://tools.ietf.org/html/rfc3986 with 4 occurrences migrated to:
  https://tools.ietf.org/html/rfc3986 ([https](https://tools.ietf.org/html/rfc3986) result 200).
* [ ] http://tools.ietf.org/html/rfc4918 with 5 occurrences migrated to:
  https://tools.ietf.org/html/rfc4918 ([https](https://tools.ietf.org/html/rfc4918) result 200).
* [ ] http://tools.ietf.org/html/rfc5842 with 2 occurrences migrated to:
  https://tools.ietf.org/html/rfc5842 ([https](https://tools.ietf.org/html/rfc5842) result 200).
* [ ] http://tools.ietf.org/html/rfc5988 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc5988 ([https](https://tools.ietf.org/html/rfc5988) result 200).
* [ ] http://tools.ietf.org/html/rfc6266 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc6266 ([https](https://tools.ietf.org/html/rfc6266) result 200).
* [ ] http://tools.ietf.org/html/rfc6454 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc6454 ([https](https://tools.ietf.org/html/rfc6454) result 200).
* [ ] http://tools.ietf.org/html/rfc6455 with 2 occurrences migrated to:
  https://tools.ietf.org/html/rfc6455 ([https](https://tools.ietf.org/html/rfc6455) result 200).
* [ ] http://tools.ietf.org/html/rfc6585 with 4 occurrences migrated to:
  https://tools.ietf.org/html/rfc6585 ([https](https://tools.ietf.org/html/rfc6585) result 200).
* [ ] http://tools.ietf.org/html/rfc7230 with 10 occurrences migrated to:
  https://tools.ietf.org/html/rfc7230 ([https](https://tools.ietf.org/html/rfc7230) result 200).
* [ ] http://tools.ietf.org/html/rfc7231 with 56 occurrences migrated to:
  https://tools.ietf.org/html/rfc7231 ([https](https://tools.ietf.org/html/rfc7231) result 200).
* [ ] http://tools.ietf.org/html/rfc7232 with 8 occurrences migrated to:
  https://tools.ietf.org/html/rfc7232 ([https](https://tools.ietf.org/html/rfc7232) result 200).
* [ ] http://tools.ietf.org/html/rfc7233 with 12 occurrences migrated to:
  https://tools.ietf.org/html/rfc7233 ([https](https://tools.ietf.org/html/rfc7233) result 200).
* [ ] http://tools.ietf.org/html/rfc7234 with 5 occurrences migrated to:
  https://tools.ietf.org/html/rfc7234 ([https](https://tools.ietf.org/html/rfc7234) result 200).
* [ ] http://tools.ietf.org/html/rfc7235 with 6 occurrences migrated to:
  https://tools.ietf.org/html/rfc7235 ([https](https://tools.ietf.org/html/rfc7235) result 200).
* [ ] http://tools.ietf.org/html/rfc7238 with 1 occurrences migrated to:
  https://tools.ietf.org/html/rfc7238 ([https](https://tools.ietf.org/html/rfc7238) result 200).
* [ ] http://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt with 3 occurrences migrated to:
  https://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt ([https](https://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt) result 200).
* [ ] http://www.amazon.com/exec/obidos/tg/detail/-/0764543857/ with 10 occurrences migrated to:
  https://www.amazon.com/exec/obidos/tg/detail/-/0764543857/ ([https](https://www.amazon.com/exec/obidos/tg/detail/-/0764543857/) result 200).
* [ ] http://www.apache.org with 1 occurrences migrated to:
  https://www.apache.org ([https](https://www.apache.org) result 200).
* [ ] http://www.apple.com/DTDs/PropertyList-1.0.dtd with 6 occurrences migrated to:
  https://www.apple.com/DTDs/PropertyList-1.0.dtd ([https](https://www.apple.com/DTDs/PropertyList-1.0.dtd) result 200).
* [ ] http://www.atomikos.com/ with 1 occurrences migrated to:
  https://www.atomikos.com/ ([https](https://www.atomikos.com/) result 200).
* [ ] http://www.baeldung.com/kotlin-null-safety with 1 occurrences migrated to:
  https://www.baeldung.com/kotlin-null-safety ([https](https://www.baeldung.com/kotlin-null-safety) result 200).
* [ ] http://www.eclipse.org/ajdt/ with 1 occurrences migrated to:
  https://www.eclipse.org/ajdt/ ([https](https://www.eclipse.org/ajdt/) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/next/progguide/index.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/next/progguide/index.html ([https](https://www.eclipse.org/aspectj/doc/next/progguide/index.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.html ([https](https://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/adk15notebook/index.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/adk15notebook/index.html ([https](https://www.eclipse.org/aspectj/doc/released/adk15notebook/index.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/devguide/antTasks.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/devguide/antTasks.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/antTasks.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/devguide/index.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/devguide/index.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/index.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/ltw-configuration.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/devguide/ltw.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/devguide/ltw.html ([https](https://www.eclipse.org/aspectj/doc/released/devguide/ltw.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/progguide/index.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/progguide/index.html ([https](https://www.eclipse.org/aspectj/doc/released/progguide/index.html) result 200).
* [ ] http://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html ([https](https://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html) result 200).
* [ ] http://www.eclipse.org/aspectj/dtd/aspectj.dtd with 1 occurrences migrated to:
  https://www.eclipse.org/aspectj/dtd/aspectj.dtd ([https](https://www.eclipse.org/aspectj/dtd/aspectj.dtd) result 200).
* [ ] http://ehcache.sourceforge.net (301) with 1 occurrences migrated to:
  https://www.ehcache.org/ ([https](https://ehcache.sourceforge.net) result 200).
* [ ] http://ehcache.org/ (301) with 1 occurrences migrated to:
  https://www.ehcache.org/ ([https](https://ehcache.org/) result 200).
* [ ] http://www.embeddedjs.com/ with 2 occurrences migrated to:
  https://www.embeddedjs.com/ ([https](https://www.embeddedjs.com/) result 200).
* [ ] http://www.enterpriseintegrationpatterns.com with 1 occurrences migrated to:
  https://www.enterpriseintegrationpatterns.com ([https](https://www.enterpriseintegrationpatterns.com) result 200).
* [ ] http://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D with 1 occurrences migrated to:
  https://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D ([https](https://www.example.org/?param=aGVsbG9Xb3JsZA%3D%3D) result 200).
* [ ] http://www.google.com with 2 occurrences migrated to:
  https://www.google.com ([https](https://www.google.com) result 200).
* [ ] http://www.h2database.com with 1 occurrences migrated to:
  https://www.h2database.com ([https](https://www.h2database.com) result 200).
* [ ] http://www.h2database.com/html/grammar.html with 1 occurrences migrated to:
  https://www.h2database.com/html/grammar.html ([https](https://www.h2database.com/html/grammar.html) result 200).
* [ ] http://www.ietf.org with 1 occurrences migrated to:
  https://www.ietf.org ([https](https://www.ietf.org) result 200).
* [ ] http://www.ietf.org/rfc/rfc1867.txt with 1 occurrences migrated to:
  https://www.ietf.org/rfc/rfc1867.txt ([https](https://www.ietf.org/rfc/rfc1867.txt) result 200).
* [ ] http://www.ietf.org/rfc/rfc2396.txt with 2 occurrences migrated to:
  https://www.ietf.org/rfc/rfc2396.txt ([https](https://www.ietf.org/rfc/rfc2396.txt) result 200).
* [ ] http://www.ietf.org/rfc/rfc3986.txt with 11 occurrences migrated to:
  https://www.ietf.org/rfc/rfc3986.txt ([https](https://www.ietf.org/rfc/rfc3986.txt) result 200).
* [ ] http://www.infoq.com/ with 1 occurrences migrated to:
  https://www.infoq.com/ ([https](https://www.infoq.com/) result 200).
* [ ] http://www.infoq.com/minibooks/JTDS with 1 occurrences migrated to:
  https://www.infoq.com/minibooks/JTDS ([https](https://www.infoq.com/minibooks/JTDS) result 200).
* [ ] http://www.jetbrains.com/idea/ with 1 occurrences migrated to:
  https://www.jetbrains.com/idea/ ([https](https://www.jetbrains.com/idea/) result 200).
* [ ] http://www.json.org/ with 1 occurrences migrated to:
  https://www.json.org/ ([https](https://www.json.org/) result 200).
* [ ] http://www.jython.org with 2 occurrences migrated to:
  https://www.jython.org ([https](https://www.jython.org) result 200).
* [ ] http://www.jython.org/ with 2 occurrences migrated to:
  https://www.jython.org/ ([https](https://www.jython.org/) result 200).
* [ ] http://www.lowagie.com/iText with 2 occurrences migrated to:
  https://www.lowagie.com/iText ([https](https://www.lowagie.com/iText) result 200).
* [ ] http://www.manpagez.com/man/5/crontab/ with 1 occurrences migrated to:
  https://www.manpagez.com/man/5/crontab/ ([https](https://www.manpagez.com/man/5/crontab/) result 200).
* [ ] http://mydomain1.com:80/ (301) with 2 occurrences migrated to:
  https://www.mydomain1.com/ ([https](https://mydomain1.com:80/) result 200).
* [ ] http://mydomain1.com:80 (301) with 1 occurrences migrated to:
  https://www.mydomain1.com/ ([https](https://mydomain1.com:80) result 200).
* [ ] http://www.oracle.com/technetwork/articles/javaee/jpa-137156.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/articles/javaee/jpa-137156.html ([https](https://www.oracle.com/technetwork/articles/javaee/jpa-137156.html) result 200).
* [ ] http://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html ([https](https://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html) result 200).
* [ ] http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html ([https](https://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html) result 200).
* [ ] http://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html ([https](https://www.oracle.com/technetwork/java/javase/tech/download-jsp-141676.html) result 200).
* [ ] http://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html ([https](https://www.oracle.com/technetwork/java/javase/tech/javamanagement-140525.html) result 200).
* [ ] http://www.oracle.com/technetwork/middleware/weblogic/overview/index-085209.html with 1 occurrences migrated to:
  https://www.oracle.com/technetwork/middleware/weblogic/overview/index-085209.html ([https](https://www.oracle.com/technetwork/middleware/weblogic/overview/index-085209.html) result 200).
* [ ] http://www.ow2.org/ with 1 occurrences migrated to:
  https://www.ow2.org/ ([https](https://www.ow2.org/) result 200).
* [ ] http://www.owasp.org/index.php/HTTPOnly with 4 occurrences migrated to:
  https://www.owasp.org/index.php/HTTPOnly ([https](https://www.owasp.org/index.php/HTTPOnly) result 200).
* [ ] http://quartz-scheduler.org (301) with 3 occurrences migrated to:
  https://www.quartz-scheduler.org/ ([https](https://quartz-scheduler.org) result 200).
* [ ] http://www.rabbitmq.com/stomp.html with 1 occurrences migrated to:
  https://www.rabbitmq.com/stomp.html ([https](https://www.rabbitmq.com/stomp.html) result 200).
* [ ] http://www.reactive-streams.org with 1 occurrences migrated to:
  https://www.reactive-streams.org ([https](https://www.reactive-streams.org) result 200).
* [ ] http://www.reactive-streams.org/ with 2 occurrences migrated to:
  https://www.reactive-streams.org/ ([https](https://www.reactive-streams.org/) result 200).
* [ ] http://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Publisher.html with 1 occurrences migrated to:
  https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Publisher.html ([https](https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Publisher.html) result 200).
* [ ] http://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Subscriber.html with 1 occurrences migrated to:
  https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Subscriber.html ([https](https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/org/reactivestreams/Subscriber.html) result 200).
* [ ] http://seleniumhq.org/projects/webdriver/ (301) with 1 occurrences migrated to:
  https://www.seleniumhq.org ([https](https://seleniumhq.org/projects/webdriver/) result 200).
* [ ] http://www.springbyexample.org/examples/custom-thread-scope-module.html with 1 occurrences migrated to:
  https://www.springbyexample.org/examples/custom-thread-scope-module.html ([https](https://www.springbyexample.org/examples/custom-thread-scope-module.html) result 200).
* [ ] http://www.springframework.org/dtd/spring-beans-2.0.dtd with 3 occurrences migrated to:
  https://www.springframework.org/dtd/spring-beans-2.0.dtd ([https](https://www.springframework.org/dtd/spring-beans-2.0.dtd) result 200).
* [ ] http://www.springframework.org/schema/aop/spring-aop.xsd with 12 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop.xsd ([https](https://www.springframework.org/schema/aop/spring-aop.xsd) result 200).
* [ ] http://www.springframework.org/schema/beans/spring-beans.xsd with 80 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans.xsd ([https](https://www.springframework.org/schema/beans/spring-beans.xsd) result 200).
* [ ] http://www.springframework.org/schema/cache/spring-cache.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/cache/spring-cache.xsd ([https](https://www.springframework.org/schema/cache/spring-cache.xsd) result 200).
* [ ] http://www.springframework.org/schema/context/spring-context.xsd with 13 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context.xsd ([https](https://www.springframework.org/schema/context/spring-context.xsd) result 200).
* [ ] http://www.springframework.org/schema/jdbc/spring-jdbc.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc.xsd) result 200).
* [ ] http://www.springframework.org/schema/jee/spring-jee.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/jee/spring-jee.xsd ([https](https://www.springframework.org/schema/jee/spring-jee.xsd) result 200).
* [ ] http://www.springframework.org/schema/jms/spring-jms.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/jms/spring-jms.xsd ([https](https://www.springframework.org/schema/jms/spring-jms.xsd) result 200).
* [ ] http://www.springframework.org/schema/lang/spring-lang.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang.xsd ([https](https://www.springframework.org/schema/lang/spring-lang.xsd) result 200).
* [ ] http://www.springframework.org/schema/mvc/spring-mvc.xsd with 3 occurrences migrated to:
  https://www.springframework.org/schema/mvc/spring-mvc.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc.xsd) result 200).
* [ ] http://www.springframework.org/schema/oxm/spring-oxm.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/oxm/spring-oxm.xsd ([https](https://www.springframework.org/schema/oxm/spring-oxm.xsd) result 200).
* [ ] http://www.springframework.org/schema/tool/spring-tool.xsd with 13 occurrences migrated to:
  https://www.springframework.org/schema/tool/spring-tool.xsd ([https](https://www.springframework.org/schema/tool/spring-tool.xsd) result 200).
* [ ] http://www.springframework.org/schema/tx/spring-tx.xsd with 8 occurrences migrated to:
  https://www.springframework.org/schema/tx/spring-tx.xsd ([https](https://www.springframework.org/schema/tx/spring-tx.xsd) result 200).
* [ ] http://www.springframework.org/schema/util/spring-util.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util.xsd ([https](https://www.springframework.org/schema/util/spring-util.xsd) result 200).
* [ ] http://www.springframework.org/schema/websocket/spring-websocket.xsd with 12 occurrences migrated to:
  https://www.springframework.org/schema/websocket/spring-websocket.xsd ([https](https://www.springframework.org/schema/websocket/spring-websocket.xsd) result 200).
* [ ] http://www.stuartellis.eu/articles/erb/ (301) with 2 occurrences migrated to:
  https://www.stuartellis.name/articles/erb/ ([https](https://www.stuartellis.eu/articles/erb/) result 200).
* [ ] http://www.thymeleaf.org/ with 2 occurrences migrated to:
  https://www.thymeleaf.org/ ([https](https://www.thymeleaf.org/) result 200).
* [ ] http://www.thymeleaf.org/documentation.html with 2 occurrences migrated to:
  https://www.thymeleaf.org/documentation.html ([https](https://www.thymeleaf.org/documentation.html) result 200).
* [ ] http://www.webjars.org with 4 occurrences migrated to:
  https://www.webjars.org ([https](https://www.webjars.org) result 200).
* [ ] http://www.webjars.org/ with 2 occurrences migrated to:
  https://www.webjars.org/ ([https](https://www.webjars.org/) result 200).
* [ ] http://www.webjars.org/documentation with 2 occurrences migrated to:
  https://www.webjars.org/documentation ([https](https://www.webjars.org/documentation) result 200).
* [ ] http://www.wildfly.org/ with 1 occurrences migrated to:
  https://www.wildfly.org/ ([https](https://www.wildfly.org/) result 200).
* [ ] http://x-stream.github.io/ with 2 occurrences migrated to:
  https://x-stream.github.io/ ([https](https://x-stream.github.io/) result 200).
* [ ] http://youtrack.jetbrains.com/issue/IDEA-53476 with 1 occurrences migrated to:
  https://youtrack.jetbrains.com/issue/IDEA-53476 ([https](https://youtrack.jetbrains.com/issue/IDEA-53476) result 200).
* [ ] http://youtrack.jetbrains.com/issue/IDEA-64446 with 1 occurrences migrated to:
  https://youtrack.jetbrains.com/issue/IDEA-64446 ([https](https://youtrack.jetbrains.com/issue/IDEA-64446) result 200).
* [ ] http://bit.ly/TRlX2r with 1 occurrences migrated to:
  https://bit.ly/TRlX2r ([https](https://bit.ly/TRlX2r) result 301).
* [ ] http://bit.ly/UzccDt with 1 occurrences migrated to:
  https://bit.ly/UzccDt ([https](https://bit.ly/UzccDt) result 301).
* [ ] http://bit.ly/p9rIvx with 1 occurrences migrated to:
  https://bit.ly/p9rIvx ([https](https://bit.ly/p9rIvx) result 301).
* [ ] http://bit.ly/qUwvwz with 1 occurrences migrated to:
  https://bit.ly/qUwvwz ([https](https://bit.ly/qUwvwz) result 301).
* [ ] http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx with 1 occurrences migrated to:
  https://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx ([https](https://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx) result 301).
* [ ] http://code.google.com/p/beanshell2/ with 1 occurrences migrated to:
  https://code.google.com/p/beanshell2/ ([https](https://code.google.com/p/beanshell2/) result 301).
* [ ] http://code.google.com/p/browsersec/wiki/Part2 with 1 occurrences migrated to:
  https://code.google.com/p/browsersec/wiki/Part2 ([https](https://code.google.com/p/browsersec/wiki/Part2) result 301).
* [ ] http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal with 1 occurrences migrated to:
  https://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal ([https](https://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal) result 301).
* [ ] http://code.google.com/p/xml-matchers/ with 3 occurrences migrated to:
  https://code.google.com/p/xml-matchers/ ([https](https://code.google.com/p/xml-matchers/) result 301).
* [ ] http://commons.apache.org/proper/commons-dbcp with 2 occurrences migrated to:
  https://commons.apache.org/proper/commons-dbcp ([https](https://commons.apache.org/proper/commons-dbcp) result 301).
* [ ] http://commons.apache.org/proper/commons-fileupload with 2 occurrences migrated to:
  https://commons.apache.org/proper/commons-fileupload ([https](https://commons.apache.org/proper/commons-fileupload) result 301).
* [ ] http://confluence.jetbrains.net/display/IDEADEV/Gradle+integration with 1 occurrences migrated to:
  https://confluence.jetbrains.net/display/IDEADEV/Gradle+integration ([https](https://confluence.jetbrains.net/display/IDEADEV/Gradle+integration) result 301).
* [ ] http://contributor-covenant.org with 1 occurrences migrated to:
  https://contributor-covenant.org ([https](https://contributor-covenant.org) result 301).
* [ ] http://contributor-covenant.org/version/1/3/0/ with 1 occurrences migrated to:
  https://contributor-covenant.org/version/1/3/0/ ([https](https://contributor-covenant.org/version/1/3/0/) result 301).
* [ ] http://db.apache.org/derby with 2 occurrences migrated to:
  https://db.apache.org/derby ([https](https://db.apache.org/derby) result 301).
* [ ] http://dev.w3.org/html5/eventsource/ with 2 occurrences migrated to:
  https://dev.w3.org/html5/eventsource/ ([https](https://dev.w3.org/html5/eventsource/) result 301).
* [ ] http://domain.com with 24 occurrences migrated to:
  https://domain.com ([https](https://domain.com) result 301).
* [ ] http://domain.com/ with 1 occurrences migrated to:
  https://domain.com/ ([https](https://domain.com/) result 301).
* [ ] http://en.wikipedia.org/wiki/Cache_ with 1 occurrences migrated to:
  https://en.wikipedia.org/wiki/Cache_ ([https](https://en.wikipedia.org/wiki/Cache_) result 301).
* [ ] http://facebook.github.io/react/ with 2 occurrences migrated to:
  https://facebook.github.io/react/ ([https](https://facebook.github.io/react/) result 301).
* [ ] http://forum.springframework.org/showthread.php?t=41350 with 1 occurrences migrated to:
  https://forum.springframework.org/showthread.php?t=41350 ([https](https://forum.springframework.org/showthread.php?t=41350) result 301).
* [ ] http://github.com/SpringSource/spring-framework with 1 occurrences migrated to:
  https://github.com/SpringSource/spring-framework ([https](https://github.com/SpringSource/spring-framework) result 301).
* [ ] http://hdiv.org/ with 1 occurrences migrated to:
  https://hdiv.org/ ([https](https://hdiv.org/) result 301).
* [ ] http://jakarta.apache.org/commons/fileupload with 1 occurrences migrated to:
  https://jakarta.apache.org/commons/fileupload ([https](https://jakarta.apache.org/commons/fileupload) result 301).
* [ ] http://jira.springframework.org/browse/SPR-5708 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/SPR-5708 ([https](https://jira.springframework.org/browse/SPR-5708) result 301).
* [ ] http://jira.springframework.org/browse/SPR-6124 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/SPR-6124 ([https](https://jira.springframework.org/browse/SPR-6124) result 301).
* [ ] http://jira.springframework.org/browse/SPR-6128 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/SPR-6128 ([https](https://jira.springframework.org/browse/SPR-6128) result 301).
* [ ] http://jira.springframework.org/browse/SPR-7064 with 1 occurrences migrated to:
  https://jira.springframework.org/browse/SPR-7064 ([https](https://jira.springframework.org/browse/SPR-7064) result 301).
* [ ] http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html with 1 occurrences migrated to:
  https://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html ([https](https://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html) result 301).
* [ ] http://mockito.org/ (301) with 1 occurrences migrated to:
  https://mockito.github.io ([https](https://mockito.org/) result 301).
* [ ] http://mydomain1.com with 37 occurrences migrated to:
  https://mydomain1.com ([https](https://mydomain1.com) result 301).
* [ ] http://mydomain1.com/ with 2 occurrences migrated to:
  https://mydomain1.com/ ([https](https://mydomain1.com/) result 301).
* [ ] http://mydomain1.com/path with 2 occurrences migrated to:
  https://mydomain1.com/path ([https](https://mydomain1.com/path) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-2660 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-2660 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-2660) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-2754 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-2754 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-2754) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-2789 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-2789 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-2789) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3127 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3127 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3127) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3775 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3775 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3775) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3880 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3880 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3880) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3896 with 7 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3896 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3896) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-3949 with 1 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-3949 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-3949) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-4008 with 2 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-4008 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-4008) result 301).
* [ ] http://opensource.atlassian.com/projects/spring/browse/SPR-4040 with 2 occurrences migrated to:
  https://opensource.atlassian.com/projects/spring/browse/SPR-4040 ([https](https://opensource.atlassian.com/projects/spring/browse/SPR-4040) result 301).
* [ ] http://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//topic/com.ibm.websphere.base.doc/info/aes/ae/rdat_extiapi.html with 1 occurrences migrated to:
  https://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//topic/com.ibm.websphere.base.doc/info/aes/ae/rdat_extiapi.html ([https](https://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//topic/com.ibm.websphere.base.doc/info/aes/ae/rdat_extiapi.html) result 301).
* [ ] http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.javadoc.doc/public_html/api/com/ibm/websphere/rsadapter/JDBCConnectionSpec.html with 1 occurrences migrated to:
  https://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.javadoc.doc/public_html/api/com/ibm/websphere/rsadapter/JDBCConnectionSpec.html ([https](https://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.javadoc.doc/public_html/api/com/ibm/websphere/rsadapter/JDBCConnectionSpec.html) result 301).
* [ ] http://site2.com with 3 occurrences migrated to:
  https://site2.com ([https](https://site2.com) result 301).
* [ ] http://slack.kotlinlang.org/ with 2 occurrences migrated to:
  https://slack.kotlinlang.org/ ([https](https://slack.kotlinlang.org/) result 301).
* [ ] http://sourceforge.net/projects/c3p0 with 2 occurrences migrated to:
  https://sourceforge.net/projects/c3p0 ([https](https://sourceforge.net/projects/c3p0) result 301).
* [ ] http://sourceforge.net/projects/javadiff with 1 occurrences migrated to:
  https://sourceforge.net/projects/javadiff ([https](https://sourceforge.net/projects/javadiff) result 301).
* [ ] http://springframework.org with 2 occurrences migrated to:
  https://springframework.org ([https](https://springframework.org) result 301).
* [ ] http://www-01.ibm.com/software/webservers/appserv/was/ with 1 occurrences migrated to:
  https://www-01.ibm.com/software/webservers/appserv/was/ ([https](https://www-01.ibm.com/software/webservers/appserv/was/) result 301).
* [ ] http://www.atomenabled.org/developers/syndication/ with 1 occurrences migrated to:
  https://www.atomenabled.org/developers/syndication/ ([https](https://www.atomenabled.org/developers/syndication/) result 301).
* [ ] http://www.eclipse.org/aspectj with 2 occurrences migrated to:
  https://www.eclipse.org/aspectj ([https](https://www.eclipse.org/aspectj) result 301).
* [ ] http://www.google.com/ig/calculator?q=1USD=?EUR with 1 occurrences migrated to:
  https://www.google.com/ig/calculator?q=1USD=?EUR ([https](https://www.google.com/ig/calculator?q=1USD=?EUR) result 301).
* [ ] http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html with 1 occurrences migrated to:
  https://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html ([https](https://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html) result 301).
* [ ] http://www.jboss.org/jbossas/ with 1 occurrences migrated to:
  https://www.jboss.org/jbossas/ ([https](https://www.jboss.org/jbossas/) result 301).
* [ ] http://www.junit.org/ with 1 occurrences migrated to:
  https://www.junit.org/ ([https](https://www.junit.org/) result 301).
* [ ] http://www.mnot.net/cache_docs with 1 occurrences migrated to:
  https://www.mnot.net/cache_docs ([https](https://www.mnot.net/cache_docs) result 301).
* [ ] http://www.sf.net/home.view?siteLanguage=nl with 1 occurrences migrated to:
  https://www.sf.net/home.view?siteLanguage=nl ([https](https://www.sf.net/home.view?siteLanguage=nl) result 301).
* [ ] http://www.springframework.org with 7 occurrences migrated to:
  https://www.springframework.org ([https](https://www.springframework.org) result 301).
* [ ] http://www.springframework.org/ with 3 occurrences migrated to:
  https://www.springframework.org/ ([https](https://www.springframework.org/) result 301).
* [ ] http://xyz.com/path with 2 occurrences migrated to:
  https://xyz.com/path ([https](https://xyz.com/path) result 301).
* [ ] http://commons.apache.org/codec/ with 1 occurrences migrated to:
  https://commons.apache.org/codec/ ([https](https://commons.apache.org/codec/) result 302).
* [ ] http://commons.apache.org/logging with 2 occurrences migrated to:
  https://commons.apache.org/logging ([https](https://commons.apache.org/logging) result 302).
* [ ] http://download.oracle.com/javaee/6/api/javax/inject/Scope.html with 1 occurrences migrated to:
  https://download.oracle.com/javaee/6/api/javax/inject/Scope.html ([https](https://download.oracle.com/javaee/6/api/javax/inject/Scope.html) result 302).
* [ ] http://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html with 4 occurrences migrated to:
  https://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html ([https](https://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html) result 302).
* [ ] http://download.oracle.com/javase/6/docs/technotes/guides/jar/jar.html with 1 occurrences migrated to:
  https://download.oracle.com/javase/6/docs/technotes/guides/jar/jar.html ([https](https://download.oracle.com/javase/6/docs/technotes/guides/jar/jar.html) result 302).
* [ ] http://download.oracle.com/javase/8/docs/api/java/beans/ConstructorProperties.html with 1 occurrences migrated to:
  https://download.oracle.com/javase/8/docs/api/java/beans/ConstructorProperties.html ([https](https://download.oracle.com/javase/8/docs/api/java/beans/ConstructorProperties.html) result 302).
* [ ] http://download.oracle.com/javase/jndi/tutorial/beyond/misc/policy.html with 1 occurrences migrated to:
  https://download.oracle.com/javase/jndi/tutorial/beyond/misc/policy.html ([https](https://download.oracle.com/javase/jndi/tutorial/beyond/misc/policy.html) result 302).
* [ ] http://gafter.blogspot.nl/2006/12/super-type-tokens.html with 1 occurrences migrated to:
  https://gafter.blogspot.nl/2006/12/super-type-tokens.html ([https](https://gafter.blogspot.nl/2006/12/super-type-tokens.html) result 302).
* [ ] http://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project with 1 occurrences migrated to:
  https://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project ([https](https://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project) result 302).
* [ ] http://git-scm.com/book/en/Git-Tools-Rewriting-History with 1 occurrences migrated to:
  https://git-scm.com/book/en/Git-Tools-Rewriting-History ([https](https://git-scm.com/book/en/Git-Tools-Rewriting-History) result 302).
* [ ] http://glassfish.dev.java.net/ with 1 occurrences migrated to:
  https://glassfish.dev.java.net/ ([https](https://glassfish.dev.java.net/) result 302).
* [ ] http://java.sun.com/docs/books/jls/third_edition/html/conversions.html with 1 occurrences migrated to:
  https://java.sun.com/docs/books/jls/third_edition/html/conversions.html ([https](https://java.sun.com/docs/books/jls/third_edition/html/conversions.html) result 302).
* [ ] http://java.sun.com/docs/books/jls/third_edition/html/expressions.html with 1 occurrences migrated to:
  https://java.sun.com/docs/books/jls/third_edition/html/expressions.html ([https](https://java.sun.com/docs/books/jls/third_edition/html/expressions.html) result 302).
* [ ] http://java.sun.com/j2se/ with 2 occurrences migrated to:
  https://java.sun.com/j2se/ ([https](https://java.sun.com/j2se/) result 302).
* [ ] http://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/javadoc.html with 1 occurrences migrated to:
  https://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/javadoc.html ([https](https://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/javadoc.html) result 302).
* [ ] http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html with 1 occurrences migrated to:
  https://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html ([https](https://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html) result 302).
* [ ] http://java.sun.com/j2se/javadoc with 1 occurrences migrated to:
  https://java.sun.com/j2se/javadoc ([https](https://java.sun.com/j2se/javadoc) result 302).
* [ ] http://java.sun.com/j2se/javadoc/ with 1 occurrences migrated to:
  https://java.sun.com/j2se/javadoc/ ([https](https://java.sun.com/j2se/javadoc/) result 302).
* [ ] http://java.sun.com/j2se/javadoc/faq.html with 1 occurrences migrated to:
  https://java.sun.com/j2se/javadoc/faq.html ([https](https://java.sun.com/j2se/javadoc/faq.html) result 302).
* [ ] http://java.sun.com/webservices/jaxb/ with 1 occurrences migrated to:
  https://java.sun.com/webservices/jaxb/ ([https](https://java.sun.com/webservices/jaxb/) result 302).
* [ ] http://java.sun.com/xml/jaxp/properties/schemaLanguage with 1 occurrences migrated to:
  https://java.sun.com/xml/jaxp/properties/schemaLanguage ([https](https://java.sun.com/xml/jaxp/properties/schemaLanguage) result 302).
* [ ] http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd with 1 occurrences migrated to:
  https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd ([https](https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd) result 302).
* [ ] http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd with 2 occurrences migrated to:
  https://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ([https](https://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd) result 302).
* [ ] http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd with 2 occurrences migrated to:
  https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd ([https](https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd) result 302).
* [ ] http://java.sun.com/xml/stream/properties/report-cdata-event with 1 occurrences migrated to:
  https://java.sun.com/xml/stream/properties/report-cdata-event ([https](https://java.sun.com/xml/stream/properties/report-cdata-event) result 302).
* [ ] http://sourceforge.net/projects/cglib/files/cglib3/3.0/cglib-3.0.jar/download with 1 occurrences migrated to:
  https://sourceforge.net/projects/cglib/files/cglib3/3.0/cglib-3.0.jar/download ([https](https://sourceforge.net/projects/cglib/files/cglib3/3.0/cglib-3.0.jar/download) result 302).
* [ ] http://other.info/foo/bar (301) with 1 occurrences migrated to:
  https://weibo.com/otherinfo/foo/bar ([https](https://other.info/foo/bar) result 302).
* [ ] http://www.iana.org/assignments/http-status-codes with 1 occurrences migrated to:
  https://www.iana.org/assignments/http-status-codes ([https](https://www.iana.org/assignments/http-status-codes) result 302).
* [ ] http://www.iana.org/assignments/media-types/ with 1 occurrences migrated to:
  https://www.iana.org/assignments/media-types/ ([https](https://www.iana.org/assignments/media-types/) result 302).
* [ ] http://www.springsource.org/download with 1 occurrences migrated to:
  https://www.springsource.org/download ([https](https://www.springsource.org/download) result 302).
* [ ] http://www.sys-con.com/java with 1 occurrences migrated to:
  https://www.sys-con.com/java ([https](https://www.sys-con.com/java) result 302).

These URLs were intentionally ignored.

* http://java.sun.com/jsp/jstl/core with 1 occurrences
* http://java.sun.com/xml/ns/j2ee with 6 occurrences
* http://java.sun.com/xml/ns/javaee with 4 occurrences
* http://java.sun.com/xml/ns/persistence with 1 occurrences
* http://localhost with 86 occurrences
* http://localhost/ with 16 occurrences
* http://localhost/42 with 1 occurrences
* http://localhost/?cookie=foo with 1 occurrences
* http://localhost/FILE.TXT with 1 occurrences
* http://localhost/abc with 1 occurrences
* http://localhost/abc/def with 1 occurrences
* http://localhost/app%20/path/ with 1 occurrences
* http://localhost/app/path%20with%20spaces/ with 1 occurrences
* http://localhost/bar with 2 occurrences
* http://localhost/context/a with 3 occurrences
* http://localhost/contextPath/main/path with 2 occurrences
* http://localhost/file.foo with 1 occurrences
* http://localhost/file.txt with 1 occurrences
* http://localhost/foo with 2 occurrences
* http://localhost/foo%20bar with 1 occurrences
* http://localhost/foo/bar with 1 occurrences
* http://localhost/foo/bar/baz with 1 occurrences
* http://localhost/forward with 1 occurrences
* http://localhost/hotels/42/bookings/21 with 4 occurrences
* http://localhost/input with 1 occurrences
* http://localhost/jquery-1.11.0.min.js with 5 occurrences
* http://localhost/messages/form with 1 occurrences
* http://localhost/mvc-showcase with 2 occurrences
* http://localhost/mvc-showcase/app with 1 occurrences
* http://localhost/mvc-showcase/data/foo%20bar with 1 occurrences
* http://localhost/mvc-showcase/data/param with 1 occurrences
* http://localhost/mvc-showcase/data/param?foo=123 with 2 occurrences
* http://localhost/myapp/main with 1 occurrences
* http://localhost/myapp/people/1/addresses/DE with 1 occurrences
* http://localhost/path with 3 occurrences
* http://localhost/path;a=b/with/semicolon with 1 occurrences
* http://localhost/persons with 1 occurrences
* http://localhost/prefix with 1 occurrences
* http://localhost/prefix/app with 1 occurrences
* http://localhost/prefix/bar with 1 occurrences
* http://localhost/prefix/mvc-showcase with 3 occurrences
* http://localhost/query= with 1 occurrences
* http://localhost/query=foo@bar with 1 occurrences
* http://localhost/resources/child/response.txt with 1 occurrences
* http://localhost/resources/foo with 2 occurrences
* http://localhost/resources/foo.txt with 1 occurrences
* http://localhost/resources/response.txt with 2 occurrences
* http://localhost/rest/books/6/pages/1.json with 1 occurrences
* http://localhost/something/1/foo with 1 occurrences
* http://localhost/something/optional-param with 1 occurrences
* http://localhost/test with 4 occurrences
* http://localhost/test.html with 1 occurrences
* http://localhost/test/this with 2 occurrences
* http://localhost:7070/example/adminhandle.vm with 1 occurrences
* http://localhost:7070/example/bingo.html with 1 occurrences
* http://localhost:80/jquery-1.11.0.min.js with 1 occurrences
* http://localhost:8080 with 34 occurrences
* http://localhost:8080/ with 4 occurrences
* http://localhost:8080/OrderService with 3 occurrences
* http://localhost:8080/aA/bB/cC with 1 occurrences
* http://localhost:8080/context with 1 occurrences
* http://localhost:8080/context/myapiresource with 1 occurrences
* http://localhost:8080/gamecast/admin/index.html with 1 occurrences
* http://localhost:8080/gamecast/display.html with 1 occurrences
* http://localhost:8080/gamecast/displayShoppingCart.html with 1 occurrences
* http://localhost:8080/jquery-1.11.0.min.js with 1 occurrences
* http://localhost:8080/mvc-showcase with 1 occurrences
* http://localhost:8080/myapiresource with 1 occurrences
* http://localhost:8080/myapp/js/sockjs-client.js with 1 occurrences
* http://localhost:8080/path with 3 occurrences
* http://localhost:8080/people with 2 occurrences
* http://localhost:8080/portfolio with 1 occurrences
* http://localhost:8080/spring/ with 2 occurrences
* http://localhost:8080/test/ with 2 occurrences
* http://localhost:8080/test/print?value=%EA%B0%80+%EB%82%98 with 1 occurrences
* http://localhost:8081 with 1 occurrences
* http://localhost:8081/ with 1 occurrences
* http://localhost:8181 with 1 occurrences
* http://localhost:8888/AccountServiceEndpoint?WSDL with 1 occurrences
* http://localhost:9000 with 7 occurrences
* http://localhost:9090 with 18 occurrences
* http://localhost:9090/jquery-1.11.0.min.js with 2 occurrences
* http://localhost:9990/mail/messages/form with 1 occurrences
* http://localhost:9999/ with 1 occurrences
* http://localhost:9999/OrderService?wsdl with 4 occurrences
* http://localhosta/testbean with 3 occurrences
* http://samples.springframework.org/flight with 27 occurrences
* http://springframework.org/spring-ws with 17 occurrences
* http://test.com with 1 occurrences
* http://test.com/ with 1 occurrences
* http://testng.org/ with 1 occurrences
* http://tiles.apache.org/tags-tiles with 1 occurrences
* http://www.foo.com/schema/component with 6 occurrences
* http://www.mycompany.com/schema/myns with 4 occurrences
* http://www.springframework.org/schema/aop with 30 occurrences
* http://www.springframework.org/schema/beans with 169 occurrences
* http://www.springframework.org/schema/beans/test with 2 occurrences
* http://www.springframework.org/schema/c with 1 occurrences
* http://www.springframework.org/schema/cache with 5 occurrences
* http://www.springframework.org/schema/context with 28 occurrences
* http://www.springframework.org/schema/jdbc with 8 occurrences
* http://www.springframework.org/schema/jee with 9 occurrences
* http://www.springframework.org/schema/jms with 5 occurrences
* http://www.springframework.org/schema/lang with 10 occurrences
* http://www.springframework.org/schema/mvc with 8 occurrences
* http://www.springframework.org/schema/oxm with 4 occurrences
* http://www.springframework.org/schema/p with 4 occurrences
* http://www.springframework.org/schema/task with 2 occurrences
* http://www.springframework.org/schema/tool with 27 occurrences
* http://www.springframework.org/schema/tx with 18 occurrences
* http://www.springframework.org/schema/util with 8 occurrences
* http://www.springframework.org/schema/websocket with 26 occurrences
* http://www.springframework.org/spring-ws with 1 occurrences
* http://www.springframework.org/tags with 4 occurrences
* http://www.springframework.org/tags/form with 2 occurrences
* http://www.w3.org/1999/XSL/Transform with 8 occurrences
* http://www.w3.org/2001/XMLSchema with 24 occurrences
* http://www.w3.org/2001/XMLSchema-instance with 79 occurrences
* http://www.w3.org/2005/Atom with 4 occurrences
* http://www.w3.org/TR/html4/charset.html with 5 occurrences
* http://www.w3.org/TR/html4/sgml/entities.html with 14 occurrences
2019-03-21 15:08:55 -05:00
Rob Winch c8732d0258 Polish URL Cleanup
Closes gh-22617
2019-03-21 15:07:40 -05:00
Spring Operator 6a0ef1aa64 URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# HTTP URLs that Could Not Be Fixed
These URLs were unable to be fixed. Please review them to see if they can be manually resolved.

* http://www.foo.com/schema/component/component.xsd (404) with 1 occurrences could not be migrated:
   ([https](https://www.foo.com/schema/component/component.xsd) result SSLHandshakeException).

# Fixed URLs

## Fixed But Review Recommended
These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* http://www.kbcafe.com/rss/atom.xsd.xml (ConnectTimeoutException) with 1 occurrences migrated to:
  https://www.kbcafe.com/rss/atom.xsd.xml ([https](https://www.kbcafe.com/rss/atom.xsd.xml) result ConnectTimeoutException).
* http://domain1.com (UnknownHostException) with 2 occurrences migrated to:
  https://domain1.com ([https](https://domain1.com) result UnknownHostException).
* http://domain2.com (UnknownHostException) with 1 occurrences migrated to:
  https://domain2.com ([https](https://domain2.com) result UnknownHostException).
* http://mydomain1.com,http://mydomain2.com (UnknownHostException) with 1 occurrences migrated to:
  https://mydomain1.com,http://mydomain2.com ([https](https://mydomain1.com,https://mydomain2.com) result UnknownHostException).
* http://mydomain2.com (UnknownHostException) with 2 occurrences migrated to:
  https://mydomain2.com ([https](https://mydomain2.com) result UnknownHostException).
* http://mydomain3.com,http://mydomain4.com (UnknownHostException) with 1 occurrences migrated to:
  https://mydomain3.com,http://mydomain4.com ([https](https://mydomain3.com,https://mydomain4.com) result UnknownHostException).
* http://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd (404) with 1 occurrences migrated to:
  https://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd ([https](https://www.springframework.org/schema/beans/factory/xml/support/CustomNamespaceHandlerTests.xsd) result 404).

## Fixed Success
These URLs were switched to an https URL with a 2xx status. While the status was successful, your review is still recommended.

* http://example.com with 1 occurrences migrated to:
  https://example.com ([https](https://example.com) result 200).
* http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd (301) with 2 occurrences migrated to:
  https://hibernate.org/dtd/hibernate-mapping-3.0.dtd ([https](https://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd) result 200).
* http://testng.org/testng-1.0.dtd with 3 occurrences migrated to:
  https://testng.org/testng-1.0.dtd ([https](https://testng.org/testng-1.0.dtd) result 200).
* http://tiles.apache.org/dtds/tiles-config_2_0.dtd with 2 occurrences migrated to:
  https://tiles.apache.org/dtds/tiles-config_2_0.dtd ([https](https://tiles.apache.org/dtds/tiles-config_2_0.dtd) result 200).
* http://tiles.apache.org/dtds/tiles-config_2_1.dtd with 2 occurrences migrated to:
  https://tiles.apache.org/dtds/tiles-config_2_1.dtd ([https](https://tiles.apache.org/dtds/tiles-config_2_1.dtd) result 200).
* http://tiles.apache.org/dtds/tiles-config_3_0.dtd with 4 occurrences migrated to:
  https://tiles.apache.org/dtds/tiles-config_3_0.dtd ([https](https://tiles.apache.org/dtds/tiles-config_3_0.dtd) result 200).
* http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd with 1 occurrences migrated to:
  https://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd ([https](https://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd) result 200).
* http://www.springframework.org/dtd/spring-beans-2.0.dtd with 168 occurrences migrated to:
  https://www.springframework.org/dtd/spring-beans-2.0.dtd ([https](https://www.springframework.org/dtd/spring-beans-2.0.dtd) result 200).
* http://www.springframework.org/schema/aop/spring-aop-2.0.xsd with 68 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop-2.0.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-2.0.xsd) result 200).
* http://www.springframework.org/schema/aop/spring-aop-2.5.xsd with 11 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop-2.5.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-2.5.xsd) result 200).
* http://www.springframework.org/schema/aop/spring-aop-3.0.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop-3.0.xsd ([https](https://www.springframework.org/schema/aop/spring-aop-3.0.xsd) result 200).
* http://www.springframework.org/schema/aop/spring-aop.xsd with 7 occurrences migrated to:
  https://www.springframework.org/schema/aop/spring-aop.xsd ([https](https://www.springframework.org/schema/aop/spring-aop.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-2.0.xsd with 112 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-2.0.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-2.0.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-2.5.xsd with 46 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-2.5.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-2.5.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-3.0.xsd with 10 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-3.0.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.0.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-3.1.xsd with 33 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-3.1.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.1.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-3.2.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-3.2.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-3.2.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-4.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-4.0.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-4.0.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-4.1.xsd with 3 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-4.1.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-4.1.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-4.2.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-4.2.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-4.2.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans-4.3.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans-4.3.xsd ([https](https://www.springframework.org/schema/beans/spring-beans-4.3.xsd) result 200).
* http://www.springframework.org/schema/beans/spring-beans.xsd with 142 occurrences migrated to:
  https://www.springframework.org/schema/beans/spring-beans.xsd ([https](https://www.springframework.org/schema/beans/spring-beans.xsd) result 200).
* http://www.springframework.org/schema/cache/spring-cache.xsd with 10 occurrences migrated to:
  https://www.springframework.org/schema/cache/spring-cache.xsd ([https](https://www.springframework.org/schema/cache/spring-cache.xsd) result 200).
* http://www.springframework.org/schema/context/spring-context-2.5.xsd with 41 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-2.5.xsd ([https](https://www.springframework.org/schema/context/spring-context-2.5.xsd) result 200).
* http://www.springframework.org/schema/context/spring-context-3.0.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-3.0.xsd ([https](https://www.springframework.org/schema/context/spring-context-3.0.xsd) result 200).
* http://www.springframework.org/schema/context/spring-context-3.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-3.1.xsd ([https](https://www.springframework.org/schema/context/spring-context-3.1.xsd) result 200).
* http://www.springframework.org/schema/context/spring-context-3.2.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-3.2.xsd ([https](https://www.springframework.org/schema/context/spring-context-3.2.xsd) result 200).
* http://www.springframework.org/schema/context/spring-context-4.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-4.0.xsd ([https](https://www.springframework.org/schema/context/spring-context-4.0.xsd) result 200).
* http://www.springframework.org/schema/context/spring-context-4.2.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-4.2.xsd ([https](https://www.springframework.org/schema/context/spring-context-4.2.xsd) result 200).
* http://www.springframework.org/schema/context/spring-context-4.3.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context-4.3.xsd ([https](https://www.springframework.org/schema/context/spring-context-4.3.xsd) result 200).
* http://www.springframework.org/schema/context/spring-context.xsd with 10 occurrences migrated to:
  https://www.springframework.org/schema/context/spring-context.xsd ([https](https://www.springframework.org/schema/context/spring-context.xsd) result 200).
* http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd with 9 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd) result 200).
* http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd with 5 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd) result 200).
* http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd with 9 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd) result 200).
* http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd) result 200).
* http://www.springframework.org/schema/jdbc/spring-jdbc.xsd with 8 occurrences migrated to:
  https://www.springframework.org/schema/jdbc/spring-jdbc.xsd ([https](https://www.springframework.org/schema/jdbc/spring-jdbc.xsd) result 200).
* http://www.springframework.org/schema/jee/spring-jee-3.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/jee/spring-jee-3.1.xsd ([https](https://www.springframework.org/schema/jee/spring-jee-3.1.xsd) result 200).
* http://www.springframework.org/schema/jms/spring-jms-4.1.xsd with 9 occurrences migrated to:
  https://www.springframework.org/schema/jms/spring-jms-4.1.xsd ([https](https://www.springframework.org/schema/jms/spring-jms-4.1.xsd) result 200).
* http://www.springframework.org/schema/jms/spring-jms-4.2.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/jms/spring-jms-4.2.xsd ([https](https://www.springframework.org/schema/jms/spring-jms-4.2.xsd) result 200).
* http://www.springframework.org/schema/lang/spring-lang-2.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-2.0.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-2.0.xsd) result 200).
* http://www.springframework.org/schema/lang/spring-lang-2.5.xsd with 3 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-2.5.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-2.5.xsd) result 200).
* http://www.springframework.org/schema/lang/spring-lang-3.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-3.0.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-3.0.xsd) result 200).
* http://www.springframework.org/schema/lang/spring-lang-3.1.xsd with 5 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-3.1.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-3.1.xsd) result 200).
* http://www.springframework.org/schema/lang/spring-lang-4.2.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang-4.2.xsd ([https](https://www.springframework.org/schema/lang/spring-lang-4.2.xsd) result 200).
* http://www.springframework.org/schema/lang/spring-lang.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/lang/spring-lang.xsd ([https](https://www.springframework.org/schema/lang/spring-lang.xsd) result 200).
* http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd) result 200).
* http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd) result 200).
* http://www.springframework.org/schema/mvc/spring-mvc.xsd with 26 occurrences migrated to:
  https://www.springframework.org/schema/mvc/spring-mvc.xsd ([https](https://www.springframework.org/schema/mvc/spring-mvc.xsd) result 200).
* http://www.springframework.org/schema/oxm/spring-oxm.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/oxm/spring-oxm.xsd ([https](https://www.springframework.org/schema/oxm/spring-oxm.xsd) result 200).
* http://www.springframework.org/schema/task/spring-task-4.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/task/spring-task-4.1.xsd ([https](https://www.springframework.org/schema/task/spring-task-4.1.xsd) result 200).
* http://www.springframework.org/schema/task/spring-task.xsd with 6 occurrences migrated to:
  https://www.springframework.org/schema/task/spring-task.xsd ([https](https://www.springframework.org/schema/task/spring-task.xsd) result 200).
* http://www.springframework.org/schema/tx/spring-tx-2.5.xsd with 3 occurrences migrated to:
  https://www.springframework.org/schema/tx/spring-tx-2.5.xsd ([https](https://www.springframework.org/schema/tx/spring-tx-2.5.xsd) result 200).
* http://www.springframework.org/schema/tx/spring-tx-4.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/tx/spring-tx-4.0.xsd ([https](https://www.springframework.org/schema/tx/spring-tx-4.0.xsd) result 200).
* http://www.springframework.org/schema/tx/spring-tx.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/tx/spring-tx.xsd ([https](https://www.springframework.org/schema/tx/spring-tx.xsd) result 200).
* http://www.springframework.org/schema/util/spring-util-2.0.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-2.0.xsd ([https](https://www.springframework.org/schema/util/spring-util-2.0.xsd) result 200).
* http://www.springframework.org/schema/util/spring-util-2.5.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-2.5.xsd ([https](https://www.springframework.org/schema/util/spring-util-2.5.xsd) result 200).
* http://www.springframework.org/schema/util/spring-util-3.0.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-3.0.xsd ([https](https://www.springframework.org/schema/util/spring-util-3.0.xsd) result 200).
* http://www.springframework.org/schema/util/spring-util-3.1.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-3.1.xsd ([https](https://www.springframework.org/schema/util/spring-util-3.1.xsd) result 200).
* http://www.springframework.org/schema/util/spring-util-4.1.xsd with 1 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-4.1.xsd ([https](https://www.springframework.org/schema/util/spring-util-4.1.xsd) result 200).
* http://www.springframework.org/schema/util/spring-util-4.2.xsd with 4 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util-4.2.xsd ([https](https://www.springframework.org/schema/util/spring-util-4.2.xsd) result 200).
* http://www.springframework.org/schema/util/spring-util.xsd with 2 occurrences migrated to:
  https://www.springframework.org/schema/util/spring-util.xsd ([https](https://www.springframework.org/schema/util/spring-util.xsd) result 200).
* http://www.springframework.org/schema/websocket/spring-websocket.xsd with 11 occurrences migrated to:
  https://www.springframework.org/schema/websocket/spring-websocket.xsd ([https](https://www.springframework.org/schema/websocket/spring-websocket.xsd) result 200).
* http://mydomain1.com with 2 occurrences migrated to:
  https://mydomain1.com ([https](https://mydomain1.com) result 301).
* http://www.springframework.org with 1 occurrences migrated to:
  https://www.springframework.org ([https](https://www.springframework.org) result 301).
* http://help.sap.com/saphelp_hanaplatform/helpdata/en/20/a78d3275191014b41bae7c4a46d835/content.htm with 1 occurrences migrated to:
  https://help.sap.com/saphelp_hanaplatform/helpdata/en/20/a78d3275191014b41bae7c4a46d835/content.htm ([https](https://help.sap.com/saphelp_hanaplatform/helpdata/en/20/a78d3275191014b41bae7c4a46d835/content.htm) result 302).
* http://java.sun.com/dtd/properties.dtd with 4 occurrences migrated to:
  https://java.sun.com/dtd/properties.dtd ([https](https://java.sun.com/dtd/properties.dtd) result 302).
* http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd with 1 occurrences migrated to:
  https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd ([https](https://java.sun.com/xml/ns/j2ee/connector_1_5.xsd) result 302).
* http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd with 1 occurrences migrated to:
  https://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd ([https](https://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd) result 302).
* http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd with 12 occurrences migrated to:
  https://java.sun.com/xml/ns/persistence/persistence_1_0.xsd ([https](https://java.sun.com/xml/ns/persistence/persistence_1_0.xsd) result 302).
* http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd with 1 occurrences migrated to:
  https://java.sun.com/xml/ns/persistence/persistence_2_0.xsd ([https](https://java.sun.com/xml/ns/persistence/persistence_2_0.xsd) result 302).

# Ignored
These URLs were intentionally ignored.

* http://java.sun.com/xml/ns/j2ee with 2 occurrences
* http://java.sun.com/xml/ns/javaee with 2 occurrences
* http://java.sun.com/xml/ns/persistence with 27 occurrences
* http://localhost:8080 with 3 occurrences
* http://samples.springframework.org/flight with 3 occurrences
* http://www.foo.com/schema/component with 2 occurrences
* http://www.greeting.com/goodbye/ with 1 occurrences
* http://www.greeting.com/hello/ with 1 occurrences
* http://www.quartz-scheduler.org/xml/JobSchedulingData with 2 occurrences
* http://www.springframework.org/schema/aop with 176 occurrences
* http://www.springframework.org/schema/beans with 715 occurrences
* http://www.springframework.org/schema/beans/test with 2 occurrences
* http://www.springframework.org/schema/c with 9 occurrences
* http://www.springframework.org/schema/cache with 20 occurrences
* http://www.springframework.org/schema/context with 126 occurrences
* http://www.springframework.org/schema/jdbc with 66 occurrences
* http://www.springframework.org/schema/jee with 2 occurrences
* http://www.springframework.org/schema/jms with 20 occurrences
* http://www.springframework.org/schema/lang with 27 occurrences
* http://www.springframework.org/schema/mvc with 58 occurrences
* http://www.springframework.org/schema/oxm with 2 occurrences
* http://www.springframework.org/schema/p with 16 occurrences
* http://www.springframework.org/schema/task with 14 occurrences
* http://www.springframework.org/schema/tx with 12 occurrences
* http://www.springframework.org/schema/util with 28 occurrences
* http://www.springframework.org/schema/websocket with 22 occurrences
* http://www.w3.org/2001/XMLSchema-instance with 375 occurrences
* http://www.w3.org/2005/Atom with 2 occurrences
2019-03-21 15:07:40 -05:00
armansimonyan13 3e4f8905a7 Fix grammar issue (#22628) 2019-03-21 19:32:10 +01:00
Sebastien Deleuze 5a0ac42b85 Merge branch '5.1.x' 2019-03-21 19:17:22 +01:00
Sebastien Deleuze d4714847a0 Restore 2 digit days format in HttpHeaders
As recommended by RFC 7231, this commit restore using 2 digit days
when formatting dates while still using
DateTimeFormatter.RFC_1123_DATE_TIME for parsing.

Closes gh-22478
2019-03-21 18:31:45 +01:00
Sebastien Deleuze 0d8fbb4c65 Merge branch '5.1.x' 2019-03-21 11:34:10 +01:00
Sebastien Deleuze 35010149f8 Fix Jackson builder modulesToInstall override behavior
This commit updates Jackson2ObjectMapperBuilder in order
to ensure that modules specified via modulesToInstall
eventually override the default ones.

Closes gh-22576
2019-03-21 11:24:03 +01:00
arman simonyan b7f5d1f031 Fix grammar issues 2019-03-21 10:05:31 +01:00
Rossen Stoyanchev 4938831575 Register custom before default codecs
Closes gh-22612
2019-03-20 20:52:57 -04:00
Rossen Stoyanchev e9819b7535 Raise ISE if @RequestBody is used for form data
Closes gh-22486
2019-03-20 20:30:36 -04:00
Arjen Poutsma b67039d19a Fix checkstyle issue 2019-03-20 20:29:43 +01:00
Rossen Stoyanchev 2e7f98d7f6 Merge branch '5.1.x' 2019-03-20 14:47:02 -04:00
Rossen Stoyanchev c6a655275d Allow overriding of FormHttpMessageWriter#getMediaType
Closes gh-22588
2019-03-20 14:46:38 -04:00
Arjen Poutsma 0e9ea2c94d Fix review remarks on Servlet.fn
This commit incoporates the remarks made during the Servlet.fn review.

See gh-21490
2019-03-20 16:47:50 +01:00
Arjen Poutsma 2f682e1035 Polishing 2019-03-20 16:47:27 +01:00
Arjen Poutsma e638fef508 Add Servlet.fn integration with DispatcherServlet
This commit adds support for HandlerFunctions and RouterFunctions to
DispatcherServlet, in the form of a HandlerAdapter and HandlerMapping.

See gh-21490
2019-03-20 16:47:27 +01:00
Arjen Poutsma 85082fc10c Add Tests for Servlet.fn
This commit adds tests for Servlet.fn, the servlet-based version of
HandlerFunctions and RouterFunctions.

See gh-21490
2019-03-20 16:47:27 +01:00
Arjen Poutsma 5d2fd75cf9 Introduce Servlet.fn
This commit introduces Servlet.fn, a servlet-based version of
WebFlux.fn, i.e. HandlerFunctions and RouterFunctions.

This commit contains the web framework only, further commits provide
tests and DispatcherServlet integration.

See gh-21490
2019-03-20 16:47:27 +01:00
Rossen Stoyanchev 5f111098b1 Check for Reactor Netty disconnected client errors
Extend the list of disconnected client errors in HttpWebHandlerAdapter
to include the Reactor Netty AbortedException as well exceptions with
the message "connection reset by peer".

Closes gh-21790
2019-03-20 09:01:22 -04:00
Sam Brannen 7d498ba681 Fix Checkstyle error and polish Javadoc for ResourceHttpMessageReader 2019-03-20 11:03:54 +01:00
Rossen Stoyanchev 4a397f108a ResourceDecoder supports filename hint
Closes gh-22267
2019-03-19 17:50:06 -04:00
Rossen Stoyanchev 5a3ff35215 Map arg resolver backs out if annotations present
Closes gh-21874
2019-03-19 16:41:26 -04:00
Rossen Stoyanchev a2fcf0a821 ReactorNettyWebSocketSession uses correct frame size
See gh-22367
2019-03-19 15:42:06 -04:00
Rossen Stoyanchev 48ec875a7f Merge branch '5.1.x' 2019-03-19 14:41:00 -04:00
Rossen Stoyanchev c7401dbe1f Fix @since typo 2019-03-19 14:40:34 -04:00
Rossen Stoyanchev 581e77c0fb Merge branch '5.1.x' 2019-03-19 14:18:52 -04:00
Rossen Stoyanchev f52c1fda3b Polish 2019-03-19 14:18:33 -04:00
Sam Brannen 3e2dbd03b9 Merge branch '5.1.x' 2019-03-19 19:00:12 +01:00
Sam Brannen ef11aa4583 Update documentation for WebJar support
Prior to this commit, documentation for WebJar support referenced the
webjars-locator artifact; however, Spring now uses the
webjars-locator-core artifact.

This commit updates the documentation to reflect this.

Closes gh-22613
2019-03-19 18:59:03 +01:00
Sam Brannen 2bbd52c9f3 Polishing 2019-03-19 18:46:05 +01:00
Arjen Poutsma 228cae216e Merge branch '5.1.x' 2019-03-19 11:30:43 +01:00
Arjen Poutsma 4651039b1f Use ChannelListener for Undertow zero-copy file transfers
This commit changes the UndertowServerHttpResponse to use a
listener-based approach instead of a blocking approach.

Closes gh-22413
2019-03-19 11:16:42 +01:00
Sam Brannen 0fc0849c0a Upgrade to JUnit Jupiter 5.4.1
Closes gh-22308
2019-03-17 23:01:44 +01:00
Sam Brannen 2b88c47477 Polish Javadoc for application event infrastructure 2019-03-17 20:21:47 +01:00
Rossen Stoyanchev e6d206b45a Extra information in WebFlux stacktraces
Use the checkpoint operator at various places in WebFlux to insert
information that Reactor then uses to enrich exceptions, via suppressed
exceptions, when error signals flow through the operator.

Closes gh-22105
2019-03-15 16:25:43 -04:00
Sebastien Deleuze 495ba2f58c Remove static import from InvocableHandlerMethod
See gh-19975
2019-03-15 19:38:14 +01:00
Sebastien Deleuze 9a81d0276e Fix checkstyle issue 2019-03-15 19:02:33 +01:00
Sebastien Deleuze 1382220021 Add support for Deferred to ReactiveAdapterRegistry
See gh-19975
2019-03-15 18:22:19 +01:00
Sebastien Deleuze 1c9cbaf399 Introduce coroutinesVersion
See gh-19975
2019-03-15 18:22:06 +01:00
Sebastien Deleuze 22cf83edba Add support for suspending handler methods in WebFlux
This commit turns Coroutines suspending methods to `Mono` which can be
handled natively by WebFlux.

See gh-19975
2019-03-15 18:21:50 +01:00
Sam Brannen 3cce85b402 Upgrade to latest Checkstyle Suppressions DTD
See https://github.com/checkstyle/checkstyle/blob/master/config/suppressions.xml
2019-03-15 16:49:41 +01:00
Sam Brannen 3967082c77 Upgrade to latest Checkstyle DTD
See http://checkstyle.sourceforge.net/config.html#Configuration_XML_Structure
2019-03-15 16:32:20 +01:00
Stephane Nicoll a46a6e843b Merge branch '5.1.x' 2019-03-15 10:51:59 +01:00
Stephane Nicoll 0552468998 Merge pull request #22597 from lwjli
* pr/22597:
  Polish "Remove outdated link in documentation"
  Remove outdated link in documentation
2019-03-15 10:51:41 +01:00
Stephane Nicoll 5e019e1769 Polish "Remove outdated link in documentation"
Closes gh-22597
2019-03-15 10:51:21 +01:00
lwjli 31a2b4ef46 Remove outdated link in documentation
See gh-22597
2019-03-15 10:50:13 +01:00
Sam Brannen fef43048b2 Polish annotation-driven event listener support 2019-03-14 23:13:41 +01:00
Juergen Hoeller 0b53dbf38f Allow usage of BeanNameGenerator in ImportBeanDefinitionRegistrars
Closes gh-22591
2019-03-14 17:35:04 +01:00
stsypanov e94af52510 Use Arrays::fill instead of hand-written loop 2019-03-14 17:24:51 +01:00
stsypanov 29f382b04e Simplify String concatenation 2019-03-14 17:24:33 +01:00
Sam Brannen 9d2e7ced89 Favor Math.[min|max]() over handcrafted code
In line with the general trend toward favoring core JDK APIs for common
tasks in Spring Framework 5.2, this commit replaces handcrafted
statements with Math.min() and Math.max() were applicable.
2019-03-14 16:48:44 +01:00
valery1707 9cf9d0fa21 Fix copy-n-paste error in Javadoc in ResponseEntityExceptionHandler
Closes gh-22589
2019-03-13 17:22:33 +01:00
Juergen Hoeller 840d80b994 Merge branch '5.1.x' 2019-03-13 16:24:01 +01:00
Juergen Hoeller fcb3957884 Upgrade to Netty 4.1.34 2019-03-13 15:32:37 +01:00
Juergen Hoeller fe56aa6fa4 Polishing 2019-03-13 15:32:24 +01:00
Juergen Hoeller 88049e9b5c EventListenerMethodProcessor skips annotation search on java classes
Closes gh-22564
2019-03-13 15:32:14 +01:00
Sam Brannen 1e417146c9 Merge branch '5.1.x' 2019-03-13 15:28:58 +01:00
Sam Brannen db56d348dc Polishing
See gh-22577
2019-03-13 15:28:15 +01:00
Sam Brannen f9e22a0f02 Merge branch '5.1.x' 2019-03-13 15:16:24 +01:00
Sam Brannen 8f7b118701 Ensure PDF version of Reference Manual does not contain HTML <strong> tags
Prior to this commit, the PDF version of the Spring Reference Manual
contained HTML <strong></strong> tags in code examples due to the fact
that Asciidoctor converts bold formatting (i.e., elements wrapped in
`**` or `*`) within source code blocks into HTML tags even for PDF
rendering.

This commit addresses this issue by removing all bold formatting from
example code blocks.

Closes gh-22577
2019-03-13 15:12:51 +01:00
Juergen Hoeller 4bee5073a0 Proper exception for non-matching argument on unique factory method
See gh-22420
2019-03-13 14:04:17 +01:00
Arjen Poutsma 88ca255c95 Fix checkstyle issue 2019-03-13 11:00:07 +01:00
Juergen Hoeller c0ddaae5c0 Shared empty InjectionMetadata/LifecycleMetadata instance
Closes gh-22570
2019-03-12 22:45:24 +01:00
Juergen Hoeller 62c923711d Consistent use of empty array constants in ReflectionUtils
Closes gh-22567
2019-03-12 22:44:15 +01:00
Juergen Hoeller a7adafdb6a Larger initial size for ASM type descriptor StringBuilder
Closes gh-22565
2019-03-12 22:44:00 +01:00
Rossen Stoyanchev 57a67a3c06 Header predicate option in AbstractRequestLoggingFilter
Closes gh-22244
2019-03-12 17:05:40 -04:00
Rossen Stoyanchev 19c024f91f Improved logging for @MessageMapping methods
Closes gh-20564
2019-03-12 16:39:26 -04:00
Rossen Stoyanchev b88aad6b39 Avoid payload conversion if unnecessary
Closes gh-22386
2019-03-12 16:17:39 -04:00
Rossen Stoyanchev baa7e2e228 Merge pull request #22367 from envious/adding-maxframebuffersize 2019-03-12 15:59:19 -04:00
Rossen Stoyanchev 2d4247b2da Polish 2019-03-12 15:58:25 -04:00
Usman 9f617be909 maxFramePayloadLength property in ReactorNettyWebSocketClient
Closes gh-22367
2019-03-12 15:41:45 -04:00
Rossen Stoyanchev 2b4cd5cf56 Fragment should be expanded last
Closes gh-22447
2019-03-12 15:10:35 -04:00
Sam Brannen 7dc522f0d6 Clean up warnings in Gradle build 2019-03-12 19:36:14 +01:00
Sam Brannen 79f416ddb8 Manual URL Cleanup
See gh-22515
2019-03-12 18:39:27 +01:00
Sam Brannen 00196ea14a Merge branch 'spring-operator-polish-urls-build-5.1.x' into 5.1.x 2019-03-12 18:36:04 +01:00
Sam Brannen 7eb1a421f7 Manual URL Cleanup
Closes gh-22522
2019-03-12 17:52:46 +01:00
Spring Operator 9ca70dc1d3 URL Cleanup
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed But Review Recommended
These URLs were fixed, but the https status was not OK. However, the https status was the same as the http request or http redirected to an https URL, so they were migrated. Your review is recommended.

* http://quartz-scheduler.org/api/2.2.1/ (301) migrated to:
  https://www.quartz-scheduler.org/api/2.2.1/ ([https](https://quartz-scheduler.org/api/2.2.1/) result 404).

## Fixed Success
These URLs were fixed successfully.

* http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/ migrated to:
  https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/ ([https](https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/) result 200).
* http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/ migrated to:
  https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/ ([https](https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/) result 200).
* http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/ migrated to:
  https://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/ ([https](https://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/) result 200).
* http://docs.oracle.com/javaee/7/api/ migrated to:
  https://docs.oracle.com/javaee/7/api/ ([https](https://docs.oracle.com/javaee/7/api/) result 200).
* http://docs.oracle.com/javase/8/docs/api/ migrated to:
  https://docs.oracle.com/javase/8/docs/api/ ([https](https://docs.oracle.com/javase/8/docs/api/) result 200).
* http://fasterxml.github.io/jackson-core/javadoc/2.9/ migrated to:
  https://fasterxml.github.io/jackson-core/javadoc/2.9/ ([https](https://fasterxml.github.io/jackson-core/javadoc/2.9/) result 200).
* http://fasterxml.github.io/jackson-databind/javadoc/2.9/ migrated to:
  https://fasterxml.github.io/jackson-databind/javadoc/2.9/ ([https](https://fasterxml.github.io/jackson-databind/javadoc/2.9/) result 200).
* http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/ migrated to:
  https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/ ([https](https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/) result 200).
* http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/ migrated to:
  https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/ ([https](https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/) result 200).
* http://issues.gradle.org/browse/GRADLE-1116 migrated to:
  https://issues.gradle.org/browse/GRADLE-1116 ([https](https://issues.gradle.org/browse/GRADLE-1116) result 200).
* http://projectreactor.io/docs/core/release/api/ migrated to:
  https://projectreactor.io/docs/core/release/api/ ([https](https://projectreactor.io/docs/core/release/api/) result 200).
* http://tiles.apache.org/framework/apidocs/ migrated to:
  https://tiles.apache.org/framework/apidocs/ ([https](https://tiles.apache.org/framework/apidocs/) result 200).
* http://tiles.apache.org/tiles-request/apidocs/ migrated to:
  https://tiles.apache.org/tiles-request/apidocs/ ([https](https://tiles.apache.org/tiles-request/apidocs/) result 200).
* http://www.apache.org/licenses/LICENSE-2.0 migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).
* http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/ migrated to:
  https://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/ ([https](https://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/) result 200).
* http://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/ migrated to:
  https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/ ([https](https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/) result 200).
* http://docs.spring.io/spring-framework/docs migrated to:
  https://docs.spring.io/spring-framework/docs ([https](https://docs.spring.io/spring-framework/docs) result 301).
* http://glassfish.java.net/nonav/docs/v3/api/ migrated to:
  https://glassfish.java.net/nonav/docs/v3/api/ ([https](https://glassfish.java.net/nonav/docs/v3/api/) result 301).
* http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.javadoc.doc/web/apidocs/ migrated to:
  https://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.javadoc.doc/web/apidocs/ ([https](https://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.javadoc.doc/web/apidocs/) result 301).
* http://projects.spring.io/spring-framework migrated to:
  https://projects.spring.io/spring-framework ([https](https://projects.spring.io/spring-framework) result 301).
* http://springframework.org/schema migrated to:
  https://springframework.org/schema ([https](https://springframework.org/schema) result 301).
* http://ehcache.org/apidocs/2.10.4 (301) migrated to:
  https://www.ehcache.org/apidocs/2.10.4 ([https](https://ehcache.org/apidocs/2.10.4) result 301).
2019-03-12 17:50:04 +01:00
Juergen Hoeller 40c62139ae Early resolution of unique factory methods in configuration classes
Includes consistent bean class resolution in the enhancement step as well as general reflection optimizations for user-declared methods.

Closes gh-22420
2019-03-12 17:17:24 +01:00
Сергей Цыпанов a35adc6ea6 Add missing break statements to stop looping when result is known
Closes gh-22573
2019-03-12 13:15:59 +01:00
Stephane Nicoll 96cd4411e5 Merge branch '5.1.x' 2019-03-12 09:10:49 +01:00
Stephane Nicoll 78bdb58356 Merge pull request #22572 from jorgheymans
* pr/22572:
  Polish "Align RdbmsOperation javadoc with jdbcTemplate defaults"
  Align RdbmsOperation javadoc with jdbcTemplate defaults
2019-03-12 09:10:29 +01:00
Stephane Nicoll 620ee018e7 Polish "Align RdbmsOperation javadoc with jdbcTemplate defaults"
Closes gh-22572
2019-03-12 09:09:34 +01:00
Jorg Heymans abb178d0d5 Align RdbmsOperation javadoc with jdbcTemplate defaults
See gh-22572
2019-03-12 09:08:21 +01:00
Juergen Hoeller e3a9826e56 Bypass method traversal for annotation introspection if possible
The isCandidateClass mechanism is consistently used for a bypass check before method traversal attempts. While by default this is only bypassing standard java types, the same mechanism can be used with index metadata which indicates non-presence of certain annotations.

See gh-22420
2019-03-12 00:12:22 +01:00
Sebastien Deleuze 6266370a7a Polishing 2019-03-11 15:34:46 +01:00
Sebastien Deleuze aabfc5f0a1 Support primitive types in BeanUtils.instantiateClass args
This commit adds support for primitive default values for
BeanUtils.instantiateClass arguments in Java in order to provide
a consistent behavior in both Java and Kotlin languages.

Closes gh-22531
2019-03-11 15:34:46 +01:00
Rossen Stoyanchev 256f8549d0 Merge branch '5.1.x' 2019-03-11 09:23:23 -04:00
Rossen Stoyanchev b343e73eb0 Add streaming responses to Spring MVC Test section
Closes gh-22544
2019-03-11 09:13:49 -04:00
Rossen Stoyanchev 620a898e60 Fix typo in documentation
See gh-22394
2019-03-11 08:42:23 -04:00
Sam Brannen b09e6c8aaf Polishing 2019-03-09 16:53:09 +01:00
Tomasz Linkowski 8ddb1e7201 Fix a typo in @NonNullFields
Prior to this commit, `@NonNullFields` had a redundant `@see NonNullFields`
declaration instead of `@see NonNullApi` in its JavaDoc.

Closes gh-22553
2019-03-09 16:46:15 +01:00
Sam Brannen b109f140a7 Improve documentation for annotation filters with component scanning
Prior to this commit the documentation for annotation-based include and
exclude filters used with component scanning did not explicitly mention
the fact that annotations are considered a match if they are either
present or meta-present on candidate classes.

This commit improves the documentation in this regard.

See gh-22551
2019-03-09 16:30:30 +01:00
Juergen Hoeller c04eaf6b84 Merge branch '5.1.x' 2019-03-08 23:06:37 +01:00
Juergen Hoeller fe0c2d6b6e StringUtils.toStringArray/CollectionUtils.toIterator handle null input
Closes gh-22547
2019-03-08 22:40:18 +01:00
Juergen Hoeller 1a8b3fba94 Configuration classes can opt into lite mode (proxyBeanMethods=false)
Closes gh-22461
2019-03-08 15:59:11 +01:00
Juergen Hoeller f5248ff13f Upgrade to ASM 7.1
Closes gh-22503
2019-03-08 09:58:16 +01:00
Juergen Hoeller a06ab6d0ad Polishing 2019-03-08 09:54:44 +01:00
Lars Grefer a98e3f0481 Migrate CacheControl to use java.time.Duration for durations 2019-03-08 09:12:19 +01:00
Sam Brannen 238286caaf Update @since tag in Eclipse code template 2019-03-07 19:25:44 +01:00
Sam Brannen 45ae47d5cb Polishing 2019-03-07 18:13:17 +01:00
Juergen Hoeller ac4c37d8e2 Merge branch '5.1.x' 2019-03-07 18:05:46 +01:00
Juergen Hoeller 6c87ef09c1 Polishing 2019-03-07 17:55:32 +01:00
Juergen Hoeller 17930d6c27 Consistent formatting and related polishing 2019-03-07 17:25:48 +01:00
stsypanov 60b72d721d Polish: do simple clean-up 2019-03-07 16:51:44 +01:00
stsypanov cb4d6f097c Use StringJoiner where possible to simplify String joining 2019-03-07 16:51:18 +01:00
Sam Brannen f087fd5a93 Report offending class in SpringFactoriesLoader in exception message
Prior to this commit, the exception message generated by
instantiateFactory() in SpringFactoriesLoader did not report the
offending class in the top-level exception message. The offending class
was in fact included in the message of the nested exception, but the
top-level exception message on its own was a bit misleading.

This commit improves the diagnostics for such failures by including the
offending class and the target factory type in the top-level exception
message.

Closes gh-22453
2019-03-06 16:44:41 +01:00
Juergen Hoeller 0b8733747c Upgrade to SnakeYAML 1.24 and HtmlUnit 2.34.1 2019-03-06 16:40:06 +01:00
Juergen Hoeller 5c1776ae8f Merge branch '5.1.x' 2019-03-06 16:26:00 +01:00
Juergen Hoeller b8f29962ac Upgrade to SLF4J 1.7.26, H2 1.4.198, OkHttp 3.13.1, WebJars Locator 0.37
Includes Mockito 2.25, Undertow 2.0.19, OpenPDF 1.2.10, JRuby 9.2.6.
2019-03-06 16:24:14 +01:00
Juergen Hoeller 9cc862246f Local https URL resolution attempt with fallback to parser's default
See gh-22504
2019-03-06 16:23:45 +01:00
Sam Brannen 7abe9c6a08 Polishing 2019-03-06 14:22:16 +01:00
Juergen Hoeller 777b4c809d Merge branch '5.1.x' 2019-03-06 14:06:06 +01:00
Juergen Hoeller 7cbb3b06a0 Consistent local vs external resolution of https schema references
Closes gh-22504
2019-03-06 13:50:40 +01:00
www fd5a7c2dcc Fix Javadoc for AbstractApplicationContext.registerBeanPostProcessors()
Closes gh-22513
2019-03-06 12:12:17 +01:00
Konrad Kamiński 9302cb2f85 Support Kotlin suspending functions in MethodParameter
Before this commit, the return type for Kotlin suspending functions
(as returned by MethodParameter#getParameterType and
MethodParameter#getGenericReturnType methods) was incorrect.

This change leverages Kotlin reflection instead of Java one
to return the correct type.

Closes gh-21058
2019-03-06 10:14:34 +01:00
Spring Operator 5938742afd URL Cleanup (#22515)
This commit updates URLs to prefer the https protocol. Redirects are not followed to avoid accidentally expanding intentionally shortened URLs (i.e. if using a URL shortener).

# Fixed URLs

## Fixed Success
These URLs were fixed successfully.

* http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/ migrated to:
  https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/ ([https](https://docs.jboss.org/jbossas/javadoc/4.0.5/connector/) result 200).
* http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/ migrated to:
  https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/ ([https](https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/) result 200).
* http://docs.oracle.com/javaee/7/api/ migrated to:
  https://docs.oracle.com/javaee/7/api/ ([https](https://docs.oracle.com/javaee/7/api/) result 200).
* http://docs.oracle.com/javase/8/docs/api/ migrated to:
  https://docs.oracle.com/javase/8/docs/api/ ([https](https://docs.oracle.com/javase/8/docs/api/) result 200).
* http://fasterxml.github.io/jackson-core/javadoc/2.9/ migrated to:
  https://fasterxml.github.io/jackson-core/javadoc/2.9/ ([https](https://fasterxml.github.io/jackson-core/javadoc/2.9/) result 200).
* http://fasterxml.github.io/jackson-databind/javadoc/2.9/ migrated to:
  https://fasterxml.github.io/jackson-databind/javadoc/2.9/ ([https](https://fasterxml.github.io/jackson-databind/javadoc/2.9/) result 200).
* http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/ migrated to:
  https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/ ([https](https://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.9/) result 200).
* http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/ migrated to:
  https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/ ([https](https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/) result 200).
* http://issues.gradle.org/browse/GRADLE-1116 migrated to:
  https://issues.gradle.org/browse/GRADLE-1116 ([https](https://issues.gradle.org/browse/GRADLE-1116) result 200).
* http://projectreactor.io/docs/core/release/api/ migrated to:
  https://projectreactor.io/docs/core/release/api/ ([https](https://projectreactor.io/docs/core/release/api/) result 200).
* http://tiles.apache.org/framework/apidocs/ migrated to:
  https://tiles.apache.org/framework/apidocs/ ([https](https://tiles.apache.org/framework/apidocs/) result 200).
* http://tiles.apache.org/tiles-request/apidocs/ migrated to:
  https://tiles.apache.org/tiles-request/apidocs/ ([https](https://tiles.apache.org/tiles-request/apidocs/) result 200).
* http://www.apache.org/licenses/LICENSE-2.0 migrated to:
  https://www.apache.org/licenses/LICENSE-2.0 ([https](https://www.apache.org/licenses/LICENSE-2.0) result 200).
* http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/ migrated to:
  https://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/ ([https](https://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/) result 200).
* http://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/ migrated to:
  https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/ ([https](https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/) result 200).
* http://docs.spring.io/spring-framework/docs migrated to:
  https://docs.spring.io/spring-framework/docs ([https](https://docs.spring.io/spring-framework/docs) result 301).
* http://glassfish.java.net/nonav/docs/v3/api/ migrated to:
  https://glassfish.java.net/nonav/docs/v3/api/ ([https](https://glassfish.java.net/nonav/docs/v3/api/) result 301).
* http://projects.spring.io/spring-framework migrated to:
  https://projects.spring.io/spring-framework ([https](https://projects.spring.io/spring-framework) result 301).
* http://springframework.org/schema migrated to:
  https://springframework.org/schema ([https](https://springframework.org/schema) result 301).
* http://ehcache.org/apidocs/2.10.4 (301) migrated to:
  https://www.ehcache.org/apidocs/2.10.4 ([https](https://ehcache.org/apidocs/2.10.4) result 301).
2019-03-05 23:21:36 +01:00
Juergen Hoeller 18f2e6a12d AnnotationConfigRegistry exposes registerBean with supplier/qualifiers
Closes gh-22457
2019-03-05 18:26:04 +01:00
Juergen Hoeller eeed20d8d9 Polishing 2019-03-05 18:25:36 +01:00
Sam Brannen c0b6488ed5 Fix typo 2019-03-05 16:47:26 +01:00
www ef91313342 Use String::isEmpty instead of "".equals(arg) when arg is not null 2019-03-05 14:32:56 +01:00
Juergen Hoeller b2b0df893a Merge branch '5.1.x' 2019-03-05 14:20:02 +01:00
Juergen Hoeller d034c053b3 Jackson2Tokenizer passes DeserializationContext into all TokenBuffers
See gh-22510
2019-03-05 13:47:26 +01:00
Juergen Hoeller 216e4eeba4 General doc revision: configuration updates, consistent formatting etc 2019-03-05 13:08:34 +01:00
Juergen Hoeller 3eb1042a53 Revised AOP documentation: load-time weaving, CGLIB etc
Includes removal of outdated Spring 1.2/2.0 references.

Closes gh-22429
2019-03-05 13:08:24 +01:00
Juergen Hoeller 013c0bca92 Polishing 2019-03-05 13:08:11 +01:00
Juergen Hoeller f6693e790a Jackson2Tokenizer passes DeserializationContext into TokenBuffer
Closes gh-22510
2019-03-05 13:08:04 +01:00
Juergen Hoeller 6c599208f6 Remove javadoc reference to unsupported FieldInterceptor
Closes gh-22507
2019-03-05 13:07:57 +01:00
Sebastien Deleuze 412c673db2 Add missing MockMvc.head Kotlin extension
See gh-1951
2019-03-05 09:35:39 +01:00
Rossen Stoyanchev 1ec3261062 Initial support for RSocket in spring-messaging 2019-03-04 23:36:27 -05:00
Rossen Stoyanchev 9e7f557b4a Updates for buffer management in RSocket
- Integration tests run with zero copy configuration.
- RSocketBufferLeakTests has been added.
- Updates in MessagingRSocket to ensure proper release

See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 23b39ad27b Explicit handling of void return values
Do give HandlerMethodReturnValueHandler's a chance to handle return
values so the RSocket reply header is always set.

See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev fa95b010cb Direct delegation to RSocketMessageHandler
Simplify handling by eliminating the use of a message channel. Instead
MessageHandlerAcceptor now extends from RSocketMessageHandler and
delegates directly to it.

See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 555dca9aff Refactoring in AbstractMethodMessageHandler
Split out the mechanics of invoking a HandlerMethod and handling the
result into a separate helper class.

See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 4e1c0c6826 @MessageExceptionHandler supports error signal
Before this change if a controller method returned a Publisher whose
first signal was an error, the error signal would not be delegated to
a @MessageExceptionHandler method as expected.

To make this work for now we use a package private local copy of the
ChannelSendOperator from spring-web.

See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev d6f4ec8c33 MessagingAcceptor/RSocket refinements + upgrade to 0.11.17
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 8bdd709683 RSocketRequester, RSocketStrategies, PayloadUtils
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 4e78b5df2f RSocket @MessageMapping handling
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev f2bb95ba7b Payload encoding/decoding and handling refinements
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 33682d74c2 ReactiveMessageChannel and ReactiveSubscribableChannel
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev ceccd9fbee Polish
Updates to synchronize with newly created reactive equivalents.
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 5b3b0b1a7b Polish
The package o.s.messaging.handler.annotation.support was missing
@NonnullApi and @NonNullFields. This commit corrects that and also
adds @Nullable to methods and arguments as needed to address
warnings.
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 567c559da8 Resolvers for destination vars and headers
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev dda40c1516 Reactive @MessageMapping
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev 421090ca35 Reactive AbstractMessageMethodHandler
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev e3e1ffc986 Encoder/Decoder based payload serialization
See gh-21987
2019-03-04 23:35:43 -05:00
Rossen Stoyanchev bcf4f3911b Reactive InvocableHandlerMethod in spring-messaging
See gh-21987
2019-03-04 23:35:43 -05:00
Sebastien Deleuze 9e873af6ab Remove infix qualifier from ResultActionsDsl methods
The infix form limits the extensibility of the API and
prevents calling `andReturn()`.

See gh-1951
2019-03-04 19:17:21 +01:00
Sebastien Deleuze 0c332286f1 Add MockMvc Kotlin DSL
This commit introduces a `MockMvc` Kotlin DSL via a set of
extensions like `MockMvc.get` or `MockMvc.request`
that provide a Kotlin idiomatic and easily discoverable
API while staying close to the original Java API design.

Closes gh-1951
2019-03-04 18:00:49 +01:00
Sam Brannen b7d60b9b89 Improve @EventListener documentation 2019-03-04 14:44:44 +01:00
Sam Brannen 70cf597484 Remove obsolete overview.html files 2019-03-04 14:07:48 +01:00
Brian Clozel 3ac1dddb9d Merge branch '5.1.x' 2019-03-04 13:58:41 +01:00
Andrew Tulloch 090aceb3ad Fix repeated calls to DataBuffer.write(CharSequence, Charset)
Prior to this commit, repeated calls to `DataBuffer.write(CharSequence,
Charset)` would not write the given chars to the expected position in
the original buffer.

This commit fixes that by writing to the `outBuffer.position()`, offset
by the current `DataBuffer.writePosition()`.

Fixes gh-22484
2019-03-04 13:37:06 +01:00
Stephane Nicoll 45b6c0fcb5 Merge branch '5.1.x' 2019-03-04 09:42:10 +01:00
Stephane Nicoll 2137cc4422 Merge pull request #22500 from DamianChlod
* pr/22500:
  Fix typo in `my-property'
2019-03-04 09:41:42 +01:00
DamianChlod fe458aabde Fix typo in `my-property'
Closes gh-22500
2019-03-04 09:40:58 +01:00
Sam Brannen 0ca5afd8e4 Fix broken test 2019-03-03 23:08:44 +01:00
Sam Brannen e7bd305e87 Suppress warnings in tests 2019-03-03 22:17:52 +01:00
Sam Brannen 4112ca7da8 Separate async/sync TestContext event listeners in tests
See gh-18490
2019-03-03 21:30:49 +01:00
Sam Brannen 6daf33deff Document that @Async is not supported in @Configuration classes 2019-03-03 18:29:45 +01:00
Sam Brannen a9f251db42 Fix broken Javadoc links 2019-03-03 17:18:18 +01:00
Sam Brannen 8e2b14a2b6 Fix Javadoc links to Quartz
See https://github.com/quartz-scheduler/quartz-scheduler.org-site/issues/42
2019-03-03 17:04:34 +01:00
Sam Brannen b5fb7437c9 Test exception handling for TestContext event annotations
This commit introduces tests for both synchronous and asynchronous
exception handling for TestContext event annotations.

See gh-18490
2019-03-03 16:36:00 +01:00
Sam Brannen 6853d50ddb Polishing 2019-03-03 16:29:49 +01:00
Sam Brannen e272e2e151 Support conditional processing in TestContext event annotations
This commit introduces support for SpEL expressions for conditional
event processing in annotations such as @BeforeTestClass,
@BeforeTestMethod, etc.

This commit also introduces a new getTestContext() method in
TestContextEvent in order to improve the readability of such SpEL
expressions.

See gh-18490
2019-03-02 17:26:57 +01:00
Sam Brannen f6d62eda8b Add missing @Nullable declarations to TestContext return values 2019-03-02 16:36:23 +01:00
Sam Brannen 8649061acc Polish Javadoc for TestContext 2019-03-02 16:25:23 +01:00
Sam Brannen abda6a6c66 Polishing 2019-03-02 16:17:58 +01:00
Sam Brannen d4f544d42f Add missing precondition check to AutowireUtils.resolveDependency
See gh-2060
2019-03-02 14:39:43 +01:00
Sam Brannen 02be21d0dc Polishing 2019-03-02 14:22:28 +01:00
Sam Brannen 7d926a847d Polish tests for TestContext lifecycle events
See gh-18490
2019-03-01 21:26:37 +01:00
Sam Brannen a16dd95ab7 Polishing 2019-03-01 20:39:25 +01:00
Sam Brannen 74e9825a65 Fix CheckStyle violation 2019-03-01 20:18:04 +01:00
Sam Brannen 416346200f Polishing 2019-03-01 20:07:09 +01:00
Sam Brannen 297fd7629a Polishing 2019-03-01 19:34:13 +01:00
Sam Brannen dd1330d05e Fix CheckStyle violations
See gh-18490
2019-03-01 17:40:32 +01:00
Sam Brannen 2d6624de71 Polish support for publishing TestContext lifecycle events
See gh-18490
2019-03-01 15:25:35 +01:00
Frank Scheffler 34fee867d2 Provide support for publishing TestContext lifecycle events
This commit introduces a new EventPublishingTestExecutionListener for
publishing events to the test ApplicationContext. These may be consumed
by @EventListener annotated methods to react to the TestContext
lifecycle. The listener is not registered by default.

Closes gh-18490
2019-03-01 15:22:54 +01:00
Juergen Hoeller a7db395d9b Merge branch '5.1.x' 2019-02-28 19:29:04 +01:00
Juergen Hoeller 5d8a34fee6 Only prefer JDK 9+ Lookup.defineClass API if ClassLoader matches
Closes gh-22416
2019-02-28 19:28:03 +01:00
Juergen Hoeller 7a7c7f51e3 Polishing 2019-02-28 15:37:47 +01:00
Juergen Hoeller c41616e82d Merge branch '5.1.x' 2019-02-28 11:14:49 +01:00
Juergen Hoeller 9c42fd7f17 JdbcTemplate preserves order of stored procedure output parameters
Closes gh-22491
2019-02-28 11:13:51 +01:00
Juergen Hoeller fc7948c96b Merge branch '5.1.x' 2019-02-27 17:34:46 +01:00
Juergen Hoeller e583da0725 Polishing 2019-02-27 17:26:53 +01:00
Juergen Hoeller 0288878bcc Consistent handling of early FactoryBean instantiation failures
Closes gh-22409
2019-02-27 17:26:35 +01:00
pelladigabor a07245caf8 Exclude jdk package in ShadowingClassLoader
Many Java 11 internal classes are located in the jdk package. ShadowingClassLoader should not load them, because it can cause errors, e.g. java.lang.IllegalAccessError: class jdk.internal.reflect.ConstructorAccessorImpl loaded by org.springframework.instrument.classloading.ShadowingClassLoader @2bea5ab4 cannot access jdk/internal/reflect superclass jdk.internal.reflect.MagicAccessorImpl
2019-02-27 16:57:08 +01:00
Sam Brannen f2a5415111 Fix CheckStyle violations
See gh-2060
2019-02-27 16:41:00 +01:00
Sam Brannen 40da78e9df Polishing 2019-02-27 16:30:05 +01:00
Sam Brannen 6f6be27aae Polish AutowireUtils[Tests]
See gh-2060
2019-02-27 16:25:34 +01:00
Loïc Ledoyen d77b36bf3b Open parameter autowiring utility for external use (#2060)
* Make AutowireUtils public and protect its current API
* Move ParameterAutowireUtils features to AutowireUtils

Closes gh-2060
2019-02-27 15:15:45 +01:00
Sam Brannen 3a42f1154d Polishing 2019-02-27 14:03:11 +01:00
Stephane Nicoll 846ec31dfe Merge branch '5.1.x' 2019-02-27 13:57:40 +01:00
Stephane Nicoll 46a39dbf99 Merge pull request #22482 from izeye
* pr/22482:
  Polish
2019-02-27 13:57:24 +01:00
Johnny Lim 046531fc75 Polish
Closes gh-22482
2019-02-27 13:57:09 +01:00
Juergen Hoeller 3a641d9297 Merge branch '5.1.x' 2019-02-26 17:50:35 +01:00
Juergen Hoeller 79f91b4867 Upgrade to Hibernate ORM 5.3.9 and EclipseLink 2.7.4 2019-02-26 17:42:55 +01:00
Juergen Hoeller 490b23518b Polishing 2019-02-26 17:42:49 +01:00
Juergen Hoeller 227c813c64 Revised AbstractAdvisorAutoProxyCreator javadoc
Closes gh-22473
2019-02-26 17:42:43 +01:00
Juergen Hoeller 00ed8da5c5 JmsTransactionManager supports lazy resource retrieval
Closes gh-22468
2019-02-26 17:42:36 +01:00
Sam Brannen a7770e7448 Remove ApplicationContext dependency from ParameterAutowireUtils
This commit is a prerequisite for gh-2060.
2019-02-26 15:22:25 +01:00
Stephane Nicoll 49bbbb060d Merge pull request #22472 from izeye
* pr/22472:
  Polish
2019-02-26 08:57:16 +01:00
Johnny Lim e21d94f91b Polish
Closes gh-22472
2019-02-26 08:57:03 +01:00
Juergen Hoeller 7158acb8df Merge branch '5.1.x' 2019-02-25 23:20:42 +01:00
Juergen Hoeller 8d9ef46d98 Upgrade to Checkstyle 8.18 and RxJava 2.2.7 2019-02-25 23:18:56 +01:00
Juergen Hoeller 6a7a4a2145 Upgrade to Caffeine 2.7 2019-02-25 23:15:01 +01:00
Juergen Hoeller 5c2f3079fd Sync between MockHttpServletResponse copies
See gh-22466
2019-02-25 23:14:37 +01:00
www c31613dc74 Instantiate ArrayList class with a exact initial capacity 2019-02-25 23:13:35 +01:00
Juergen Hoeller bc0317af3b Merge branch '5.1.x' 2019-02-25 17:57:49 +01:00
Juergen Hoeller 9eb7f7e294 Polishing 2019-02-25 17:36:37 +01:00
Juergen Hoeller cb54f201c2 Break out of loop once an AspectJ advice has been found
Closes gh-22449
2019-02-25 17:24:02 +01:00
Juergen Hoeller f07014ad37 MappingJackson2MessageConverter delegates default encoding to Jackson
Closes gh-22444
2019-02-25 17:21:08 +01:00
Juergen Hoeller 4be41e9e26 Only use payload if it actually matches declared event type
Closes gh-22426
2019-02-25 17:18:07 +01:00
Sam Brannen d61c3d429c Improve Javadoc and exception message for LTW classes 2019-02-25 14:21:23 +01:00
Sam Brannen 8dc82b9689 Re-enable @Ignore'd TxMgt integration test
See: gh-12857
2019-02-25 14:21:23 +01:00
Johnny Lim 625e210676 Polish 2019-02-25 12:17:53 +01:00
stsypanov 1c24dc1f27 Simplify String concatenation 2019-02-25 12:13:35 +01:00
Sebastien Deleuze dc8fb8bc5e Use StringJoiner where possible to simplify String joining 2019-02-25 12:11:57 +01:00
Stephane Nicoll 766a23bd93 Merge pull request #22463 from rupertw
* pr/22463:
  Polish
2019-02-25 08:42:56 +01:00
www f2aa374b73 Polish
Closes gh-22463
2019-02-25 08:41:00 +01:00
Sam Brannen 9093b870dd Move mavenLocal() to bottom of repositories list
This commit moves mavenLocal() to the bottom of the repositories list
so that Gradle's Eclipse IDE support will properly link binary JARs to
their source JARS in generated Eclipse .classpath files.

According to Gradle experts, "`mavenLocal` should basically never be
the first repo in the list."

https://github.com/eclipse/buildship/issues/655#issuecomment-366227296
2019-02-23 00:50:57 +01:00
Sam Brannen 9f751ef914 Polish contribution
See: gh-456
2019-02-22 19:19:59 +01:00
Adib Saikali b4fc7b410b Document that @Transactional is not supported on test lifecycle methods
This commit adds a tip clarifying that TestNG's @BeforeClass and
@BeforeSuite methods can not be annotated with Spring's @Transactional
annotation.

Closes: gh-456
2019-02-22 17:56:19 +01:00
Juergen Hoeller 0652e4b485 Merge branch '5.1.x' 2019-02-22 14:51:00 +01:00
Juergen Hoeller 707b8c02fe Upgrade to Jetty 9.4.15 and Undertow 2.0.18 2019-02-22 14:18:39 +01:00
Juergen Hoeller c3fa900672 Upgrade to Hibernate Validator 5.4.3 and 6.0.15 2019-02-22 14:18:08 +01:00
Sebastien Deleuze e5a595e77d Merge branch '5.1.x' 2019-02-22 09:50:28 +01:00
Sebastien Deleuze f19d7c0375 Fix AbstractTraceInterceptor null-safety annotations
Closes gh-22435
2019-02-22 09:47:14 +01:00
Brian Clozel fb66619187 Merge branch '5.1.x' 2019-02-21 17:52:17 +01:00
Brian Clozel e47f7ef7b5 Remove response content-type before error handling
Prior to this commit, the negotiated content-type during the request
mapping phase would be kept as the response content-type header; this
information is used when rendering the error response and prevents a new
round of content negotiation to choose the media type that fits best.

This commit removes the response content type information at the
beginning of the error handling phase.

Fixes gh-22452
2019-02-21 17:44:03 +01:00
Sebastien Deleuze 25d7f09f8d Polishing 2019-02-18 14:50:27 +01:00
Sebastien Deleuze caa1730169 Polishing 2019-02-18 14:13:51 +01:00
Sebastien Deleuze 19f792db66 Add Coroutines support for WebClient and WebFlux.fn
This commit is the first part of a more complete Coroutines
support coming in Spring Framework 5.2. It introduces suspendable
Kotlin extensions for Mono based methods in WebFlux classes like
WebClient, ServerRequest, ServerResponse as well as a Coroutines
router usable via `coRouter { }`.

Coroutines extensions use `await` prefix or `AndAwait` suffix,
and most are using names close to their Reactive counterparts,
except `exchange` in `WebClient.RequestHeadersSpec`
which translates to `awaitResponse`.

Upcoming expected changes are:
 - Leverage `Dispatchers.Unconfined` (Kotlin/kotlinx.coroutines#972)
 - Expose extensions for `Flux` based API (Kotlin/kotlinx.coroutines#254)
 - Introduce interop with `CoroutineContext` (Kotlin/kotlinx.coroutines#284)
 - Support Coroutines in `ReactiveAdapterRegistry`
 - Support Coroutines for WebFlux annotated controllers
 - Fix return type of Kotlin suspending functions (gh-21058)

See gh-19975
2019-02-18 09:23:31 +01:00
Sebastien Deleuze 04bb114f05 Set Kotlin minimum version to 1.3 for Coroutines
See gh-20945
2019-02-18 09:11:52 +01:00
Sam Brannen c95ffe3db2 Merge branch '5.1.x' 2019-02-17 17:25:47 +01:00
Sam Brannen 7c65b57530 Polish Kotlin chapter 2019-02-17 17:22:04 +01:00
Sebastien Deleuze 1d866053ed Leverage RouterFunctions.Builder in RouterFunctionDsl
Closes gh-22423
2019-02-17 17:20:11 +01:00
Sebastien Deleuze 175c27657e Merge branch '5.1.x' 2019-02-17 10:39:15 +01:00
Sebastien Deleuze ab32dc8937 Document checked exceptions with proxies in Kotlin
Closes gh-22412
2019-02-17 10:37:11 +01:00
Sebastien Deleuze 6089ec1161 Add a warning in Kotlin Script Templates documentation 2019-02-17 10:11:00 +01:00
Ryan Scheidter 6e7c3f2893 Fix a typo in RouterFunctionDsl Javadoc
Closes gh-22419
2019-02-17 09:50:06 +01:00
Juergen Hoeller c515de138a Correct import order 2019-02-15 17:19:21 +01:00
Juergen Hoeller 6db75956b9 Merge branch '5.1.x' 2019-02-15 17:16:28 +01:00
Juergen Hoeller e307dd58db Polishing 2019-02-15 17:06:11 +01:00
Juergen Hoeller c2bd229d4c Clarify role of 'aware' callback interfaces 2019-02-15 17:06:03 +01:00
stsypanov 5e29ea30a3 Use StringJoiner where possible to simplify String joining 2019-02-15 14:55:35 +01:00
stsypanov e44d3dabc4 use Method in fixedInterceptorMap instead of String returned from Method::toString 2019-02-15 14:53:26 +01:00
stsypanov e7dc439f90 Simplify ConcurrentReferenceHashMap 2019-02-15 14:27:43 +01:00
stsypanov d2bfca7900 Extract duplicated code into a separate method 2019-02-15 14:26:44 +01:00
stsypanov 92053bb84e Some very simple improvements regarding ArrayList 2019-02-15 14:25:13 +01:00
Juergen Hoeller 5e0cd9fb60 Merge branch '5.1.x' 2019-02-14 13:39:58 +01:00
Juergen Hoeller ac0e5d8ec6 DefaultConversionService properly converts Object[] to int[]
Closes gh-22410
2019-02-14 13:38:29 +01:00
Stephane Nicoll 9967ece49c Merge branch '5.1.x' 2019-02-14 10:18:46 +01:00
Stephane Nicoll 1152e67bb7 Merge pull request #22385 from vpavic
* pr/22385:
  Polish "Ensure indexer gracefully handle missing meta annotations"
  Ensure indexer gracefully handle missing meta annotations
2019-02-14 10:17:54 +01:00
Stephane Nicoll 0cc77e812c Polish "Ensure indexer gracefully handle missing meta annotations"
Closes gh-22385
2019-02-14 10:16:32 +01:00
Vedran Pavic 87e5f0db01 Ensure indexer gracefully handle missing meta annotations
See gh-22385
2019-02-14 10:16:04 +01:00
Spring Buildmaster 566cc87748 Next Development Version 2019-02-13 05:51:26 +00:00
Stephane Nicoll 77e815135b Merge branch '5.1.x' 2019-02-12 21:30:32 +01:00
Stephane Nicoll d703ca95d7 Upgrade to Reactor Californium SR5 2019-02-12 21:29:25 +01:00
Brian Clozel d463598c09 Defer ExchangeFilterFunction to subscription time
Prior to this commit, the `ExchangeFilterFunction` instances configured
on a `WebClient` instance would be executed as soon as the `exchange`
method would be called. This behavior is not consistent with the server
side and can confuse filter developers as they'd need to manually
`Mono.defer()` their implementations if they want to record metrics.

This commit defers all `ExchangeFilterFunction` processing at
subscription time.

Fixes gh-22375
2019-02-12 10:52:49 +01:00
Juergen Hoeller 4e47006a17 Merge branch '5.1.x' 2019-02-12 09:09:19 +01:00
Juergen Hoeller 106a757098 Polishing 2019-02-12 09:07:58 +01:00
Juergen Hoeller 8637540678 Expose empty annotation array as empty AnnotationAttributes array
Closes gh-22405
2019-02-12 09:07:51 +01:00
Sebastien Deleuze 0bdacddc53 Remove SqlXmlObjectMappingHandler
This class is only known to be used in spring-data-jdbc-ext project
which was never upgraded to Spring Framework 5.x and is no longer
actively developed.

Closes gh-22402
2019-02-11 14:20:51 +01:00
Sebastien Deleuze 5bb1c3e1e3 Deprecate SqlXmlObjectMappingHandler
This class is only known to be used in spring-data-jdbc-ext project
which was never upgraded to Spring Framework 5.x and is no longer
actively developed.

Closes gh-11647
2019-02-11 13:18:28 +01:00
Sebastien Deleuze 9d0f97fa00 Merge branch '5.1.x' 2019-02-11 13:09:35 +01:00
Sebastien Deleuze 2a0a002bd3 Improve Kotlin documentation
Closes gh-22400
2019-02-11 13:08:04 +01:00
dzou 514f7e3328 Add link to Kotlin sample for Spring Cloud GCP
Closes gh-2070
2019-02-11 13:08:04 +01:00
Juergen Hoeller 4ca376ef31 Merge branch '5.1.x' 2019-02-11 11:55:59 +01:00
Juergen Hoeller cdd0456aa4 Upgrade to Tomcat 9.0.16 and Log4J 2.11.2 2019-02-11 11:51:41 +01:00
Juergen Hoeller b5e9fa5f1e TransactionActionSupport evaluates Vavr Try failure as rollback-only
Closes gh-20361
2019-02-11 11:45:43 +01:00
Brian Clozel afbe7b31bb Polish
See gh-22341
2019-02-11 10:46:27 +01:00
Brian Clozel fb4a28f904 Polish
See gh-22340
2019-02-11 10:45:50 +01:00
Sam Brannen f7e53a071b Polishing 2019-02-08 19:41:10 +01:00
Juergen Hoeller 783a7ca46b Merge branch '5.1.x' 2019-02-08 18:16:27 +01:00
Juergen Hoeller 9f03d158ce Upgrade to Checkstyle 8.17 and Mockito 2.24 2019-02-08 18:03:07 +01:00
Juergen Hoeller ba0c48b933 Polishing 2019-02-08 18:02:28 +01:00
Mansur Mustaquim 82dbde13b6 Fix for ScriptUtils failure when '--' occurs inside a multi-line comment on the same line as '*/' (#22392)
* Test for multi-line comment block where the comment end delimiter occurs on a line starting with the single-line comment prefix
* ScriptUtils successfully parses a SQL script containing a multi-line comment block where the comment-end delimiter occurs on a line starting with the single-line comment prefix.
2019-02-08 16:20:51 +01:00
Sam Brannen 4f57d717ba Upgrade to JUnit Jupiter 5.4
Closes gh-22308
2019-02-08 13:22:34 +01:00
Stephane Nicoll f5ae288990 Merge branch '5.1.x' 2019-02-08 08:54:18 +01:00
Stephane Nicoll a698adf125 Merge pull request #22382 from artembilan
* pr/22382:
  Polish contribution
  Polish warning message
2019-02-08 08:49:34 +01:00
Stephane Nicoll 50e4308779 Polish contribution
Closes gh-22382
2019-02-08 08:48:58 +01:00
Artem Bilan 07bac70c09 Polish warning message
See gh-22382
2019-02-08 08:48:18 +01:00
Stephane Nicoll aff9e37b8d Merge pull request #22373 from izeye
* pr/22373:
  Fix casing for GitHub in the contributing guide
2019-02-08 08:41:21 +01:00
Johnny Lim 64c86623ee Fix casing for GitHub in the contributing guide
Closes gh-22373
2019-02-08 08:41:03 +01:00
Juergen Hoeller 7cde283066 Merge branch '5.1.x' 2019-02-07 23:07:22 +01:00
Juergen Hoeller cc740dfd93 Upgrade to Groovy 2.5.6 and Hibernate ORM 5.1.17 2019-02-07 23:02:59 +01:00
Juergen Hoeller 15af0d9787 Polishing 2019-02-07 23:02:35 +01:00
Rossen Stoyanchev b4de3845c0 Merge branch '5.1.x' 2019-02-07 14:35:53 -05:00
Rossen Stoyanchev 2b974da395 Use snapshot instead of libs-snapshot repository
The latter has stale Reactor snapshots
2019-02-07 14:34:59 -05:00
Rossen Stoyanchev cb9db70857 Merge branch '5.1.x' 2019-02-07 12:00:44 -05:00
Rossen Stoyanchev e7c038f2d2 Switch to Reactor Californium snapshots 2019-02-07 11:59:54 -05:00
Juergen Hoeller 0b617a8c93 Deprecate PreferencesPlaceholderConfigurer along with its base class
Also removing common PropertyPlaceholderConfigurer doc references.

See gh-22181
2019-02-07 16:53:05 +01:00
Juergen Hoeller d25783329a Merge branch '5.1.x' 2019-02-07 16:01:14 +01:00
Juergen Hoeller b8e663c531 AbstractAutoProxyCreator ignores unused early proxy references
Closes gh-22370
2019-02-07 15:57:44 +01:00
Juergen Hoeller 0f73a69033 AbstractApplicationContext resets local listeners to pre-refresh state
Closes gh-22325
2019-02-07 15:56:46 +01:00
Juergen Hoeller e9626779ee @Resource provides dependency descriptor for resolving beans by name
Closes gh-22359
2019-02-07 15:56:00 +01:00
Juergen Hoeller 5f4c461d4f Documentation revision for @PostConstruct/PreDestroy and @Required
Closes gh-22348
2019-02-07 15:53:55 +01:00
Juergen Hoeller bb05ee7bff Upgrade to Kotlin 1.3.21
See #20945
2019-02-07 15:28:43 +01:00
Brian Clozel 05d7ab4328 Merge branch '5.1.x' 2019-02-06 20:00:02 +01:00
Brian Clozel ef8652615c Log exception at ERROR level in CompositeLog
Fixes gh-22364
2019-02-06 19:58:41 +01:00
Sebastien Deleuze 72ed274c6f Merge branch '5.1.x' 2019-02-06 19:35:20 +01:00
Sebastien Deleuze d1e5a3af9f Fix truncated Value#value javadoc
Closes gh-22331
2019-02-06 19:28:31 +01:00
Sam Brannen 9bc2c99ce5 Suppress deprecation warning in Gradle build
See gh-22181
2019-02-06 16:37:23 +01:00
Sebastien Deleuze 3787b23a98 Deprecate PropertyPlaceholderConfigurer
This commit deprecates PropertyPlaceholderConfigurer in favor of
PropertySourcesPlaceholderConfigurer.

Closes gh-22181
2019-02-06 16:00:24 +01:00
Sebastien Deleuze 0ad9349d84 Limit ref() and provider() visibility in Kotlin DSL
This commit makes ref() and provider() only available from
inside the bean lambda and not from the root level of the beans DSL.

Closes gh-22177
2019-02-05 16:59:56 +01:00
Juergen Hoeller 34ddb1e3cd Merge branch '5.1.x' 2019-02-05 16:32:58 +01:00
Juergen Hoeller 9895e44d73 Polishing 2019-02-05 16:03:24 +01:00
Juergen Hoeller 643a68f81b Detect existing jar URLs from URLClassLoader.getURLs()
Closes gh-22346
2019-02-05 16:02:50 +01:00
Juergen Hoeller ac4525ddf8 Detect MariaDB as MySQL (for mariadb-java-client 2.4+ compatibility)
Closes gh-22344
2019-02-05 16:02:17 +01:00
Yoann Rodière 17caac8f1f Add tests for SpringBeanContainer (Hibernate ORM integration) and fix the behavior when requesting named beans (#22260)
* Add integration tests for SpringBeanContainer (Hibernate ORM integration)
* Autowire bean properties of beans retrieved by name in SpringBeanContainer
* Add integration tests for fallback cases in SpringBeanContainer (Hibernate ORM integration)
* Fix SpringBeanContainer incorrectly losing the bean name when calling the fallback producer

(cherry picked from commit 00855c4f5f)
2019-02-05 16:01:40 +01:00
Sebastien Deleuze 0b9522c84e Migrate Kotlin Mockito tests to Mockk
Closes gh-22345
2019-02-05 15:47:08 +01:00
Yoann Rodière 00855c4f5f Add tests for SpringBeanContainer (Hibernate ORM integration) and fix the behavior when requesting named beans (#22260)
* Add integration tests for SpringBeanContainer (Hibernate ORM integration)
* Autowire bean properties of beans retrieved by name in SpringBeanContainer
* Add integration tests for fallback cases in SpringBeanContainer (Hibernate ORM integration)
* Fix SpringBeanContainer incorrectly losing the bean name when calling the fallback producer
2019-02-05 15:39:46 +01:00
Juergen Hoeller 4c9ae6494f Concurrency/nullability fine-tuning in MimeType(Utils)
See gh-22340
2019-02-05 15:38:41 +01:00
Brian Clozel 1bf3b36ce8 Polish
See gh-22340
2019-02-05 15:06:33 +01:00
Brian Clozel ba8849dda3 Avoid MimeType garbage creation
Prior to this commit, calls to `MimeType` and `MediaType` would create a
significant amount of garbage:

* during startup time, in the static sections of `MimeType` and
`MediaType` when creating well-known types
* at runtime, when parsing media types for content negotiation or
writing known media types as strings in HTTP response headers

This commit does the following:

* Avoid parsing the well-known types and use regular constructors
instead
* Cache types in a simple LRU cache once they've been parsed, since an
application is likely to deal with a limited set of types
* Avoid using `java.util.stream.Stream` in hot code paths

Benchmarks show that a complete revision of the `MimeTypeUtils` parser
is not required, since the LRU cache is enough there.

Closes gh-22340
2019-02-05 14:33:43 +01:00
Brian Clozel 862fa557bd Avoid java.util.stream.Stream usage in hot paths
Prior to this commit, profiling sessions would show that using
`java.util.stream.Stream` in some hot code paths creates significant
garbage.

Where streams aren't really required, this commit turns those snippets
into imperative logic  because those are likely to be called once or
multiple times per request.

Closes gh-22341
2019-02-05 12:14:51 +01:00
Juergen Hoeller 4ec2f3cd17 Merge branch '5.1.x' 2019-02-05 00:55:20 +01:00
Juergen Hoeller 165d2511b9 Upgrade to Apache HttpClient 4.5.7 and Commons FileUpload 1.4
Includes RxJava 2.2.6, Netty 4.1.33, Undertow 2.0.17.
2019-02-05 00:46:07 +01:00
Juergen Hoeller d27bae245a Polishing 2019-02-05 00:45:28 +01:00
Juergen Hoeller 0ebc020b21 Load-time weaving support for WildFly 13+ (JBoss Modules 1.8+)
Fixes gh-22297
2019-02-05 00:44:52 +01:00
Juergen Hoeller 59a9c8e004 MethodReference.MethodValueRef.setValue throws SpelEvaluationException
Closes gh-22336
2019-02-05 00:43:56 +01:00
Juergen Hoeller ca7634dfe8 Avoid duplicate class introspection during findAnnotationOnBean
Closes gh-22318
2019-02-05 00:42:24 +01:00
Juergen Hoeller 5eca512c46 Ref doc mentions SimpleTransactionScope next to SimpleThreadScope
Closes gh-22180
2019-02-05 00:41:53 +01:00
Juergen Hoeller c700ccbc00 Upgrade to Apache HttpClient 4.5.7
Includes Hibernate ORM 5.4.1 for integration tests.
2019-02-05 00:10:40 +01:00
Juergen Hoeller a27a6470f7 Polishing 2019-02-05 00:10:22 +01:00
kudrevatykh 85474297be Load-time weaving support for WildFly 13+ (#22297)
Load-time weaving support for WildFly 13+ (JBoss Modules 1.8+)
2019-02-04 23:31:21 +01:00
stsypanov 248d3f8e8b Use AtomicInteger instead of unsafe increment on volatile fields 2019-02-04 23:22:20 +01:00
Stephane Nicoll e402a93e41 Merge branch '5.1.x' 2019-02-04 10:34:40 +01:00
Stephane Nicoll 99da6e9723 Merge pull request #22337 from mhewedy
* pr/22337:
  Polish "Fix use CompletableFuture in DeferredResultReturnValueHandlerTest"
  Fix use CompletableFuture in DeferredResultReturnValueHandlerTest
2019-02-04 10:33:58 +01:00
Stephane Nicoll 1241c3b2d1 Merge pull request #22339 from vpavic
* pr/22339:
  Polish "Improve spring-context-indexer documentation"
  Improve spring-context-indexer documentation
2019-02-04 10:33:54 +01:00
Stephane Nicoll 7c62d7cfe2 Polish "Fix use CompletableFuture in DeferredResultReturnValueHandlerTest"
Closes gh-22337
2019-02-04 10:31:31 +01:00
Muhammad Hewedy 6507b09c7f Fix use CompletableFuture in DeferredResultReturnValueHandlerTest
See gh-22337
2019-02-04 10:24:52 +01:00
Stephane Nicoll 229f354df1 Polish "Improve spring-context-indexer documentation"
Closes gh-22339
2019-02-04 10:22:43 +01:00
Vedran Pavic 43ea25e413 Improve spring-context-indexer documentation
See gh-22339
2019-02-04 10:17:34 +01:00
Sam Brannen 0742986e0e Suppress warnings from tests in Gradle build 2019-02-01 11:13:53 +01:00
Sam Brannen 5e7065d829 Upgrade to JUnit Jupiter 5.4 RC2
Issue: #22308
2019-02-01 10:59:20 +01:00
stsypanov af13580fd5 Remove unnecessary array initialization 2019-01-31 09:00:22 -05:00
Juergen Hoeller 7a77e83e10 SpelNodeImpl manages start/end position in separate integer values
Fixes gh-22157
2019-01-28 22:50:56 +01:00
Juergen Hoeller 5aed117b68 Model interface exposes getAttribute method (next to add/contains)
Fixes gh-22145
2019-01-28 22:50:29 +01:00
Juergen Hoeller 80385ced4c Remove java.sql dependency from ReflectionUtils/TransactionDefinition
Fixes gh-21996
2019-01-28 22:50:11 +01:00
Arjen Poutsma d3b5ba7a36 Add test case for HttpRequest with relative URIs
Test case for #19890
2019-01-28 16:43:46 +01:00
Rossen Stoyanchev b8f7c37cc4 Merge branch '5.1.x' 2019-01-25 17:01:51 -05:00
Rossen Stoyanchev 4560dc2818 Improve empty body check
Fixes gh-22265
2019-01-25 15:48:04 -05:00
Sam Brannen 439bc65b0e Upgrade to JUnit Jupiter 5.4 RC1
Issue: #22308
2019-01-25 15:56:16 +01:00
Juergen Hoeller 05f1ea8515 Merge branch '5.1.x' 2019-01-25 15:46:01 +01:00
Juergen Hoeller d0033f12d0 ApplicationListenerMethodAdapter uses target method for order lookup
Fixes #22307
2019-01-25 15:44:43 +01:00
Juergen Hoeller 85ec9b9df2 Avoid Class.getPackage() in favor of plain Class.getName() checks
Fixes #22306
2019-01-25 15:35:49 +01:00
Marten Deinum 6bdf2c2685 Upgrade to Commons-Fileupload 1.4 2019-01-24 17:53:22 +01:00
Arjen Poutsma 6004be9d31 Merge branch '5.1.x' 2019-01-24 15:55:46 +01:00
Arjen Poutsma 4732f83d70 Fix Java 9 Build
Fix Java 9 build by replacing deprecated method.
2019-01-24 15:44:58 +01:00
Juergen Hoeller 160ecdf956 Merge branch '5.1.x' 2019-01-24 15:35:28 +01:00
Juergen Hoeller 7cc700435b HandlerMethod skips interface parameter introspection for return value
Fixes #22303
2019-01-24 15:18:55 +01:00
Juergen Hoeller 493e9c1ff0 Consistent upgrade to Rome 1.12 and WebJars Locator 0.36 2019-01-24 15:18:43 +01:00
Juergen Hoeller 8bed7d9bb0 Upgrade to Hibernate ORM 5.4.1
Includes EclipseLink 2.7.4.

Fixes #22049
2019-01-24 15:02:30 +01:00
Juergen Hoeller b07b10de8c Upgrade to Kotlin 1.3.20
Includes RxJava 2.2.6, Netty 4.1.33, Undertow 2.0.17.

Fixes #20945
2019-01-24 15:02:13 +01:00
Sam Brannen 83d06b8f4e Merge branch '5.1.x' 2019-01-23 16:45:10 +01:00
Sam Brannen edadb9efb6 Remove obsolete PetClinic Example section of Testing chapter
Issue: #22288
2019-01-23 16:40:21 +01:00
Arjen Poutsma a5cef3845c Improve message for HttpStatusCodeException with empty status text
This commit improves the message for HttpStatusCodeException so that it
defaults to the HttpStatus reason phrase if a status text is not
provided.

This commit also fixes SimpleClientHttpResponse so that it does not
return null for getStatusText().

Fixed #22162
2019-01-23 11:44:00 +01:00
Rossen Stoyanchev 155ef5fd77 Merge branch '5.1.x' 2019-01-22 12:04:09 -05:00
Rossen Stoyanchev 810b615471 Correct issus in Spring MVC section
Fixes #22282
2019-01-22 09:06:18 -05:00
Rossen Stoyanchev 51f9e0aaca Typo in webmvc.adoc 2019-01-22 09:06:18 -05:00
Brian Clozel 46c0366594 Merge branch '5.1.x' 2019-01-22 14:56:02 +01:00
Brian Clozel d6aa589c50 Wrap DecodingException in DefaultServerRequest
Prior to this commit, Spring WebFlux function would let
`DecodingException` thrown by codecs bubble up to the web handler level.
Since this exception is not handled by default there, the response would
be turned into a HTTP 500 status.

In the annotation model, `ArgumentResolver` implementations wrap this
exception with a `ServerWebInputException`, which itself extends
`ResponseStatusException`. The latter is supported by the error handling
infrastructure as a HTTP 400 response.

This commit ensures that `DecodingException` instances are properly
wrapped in `ServerWebInputException` at the `ServerRequest` level
directly, thus supporting all setup modes ("standalone" and through the
`DispatcherHandler`).

Fixes #22290
2019-01-22 14:54:44 +01:00
Sebastien Deleuze 81ec1d8284 Merge branch '5.1.x' 2019-01-22 10:55:06 +01:00
Sebastien Deleuze fc6cff53bb Clarify documentation about JSON Views
This commit intends to clarify the documentation by avoiding confusion
between @JsonView and Spring MVC JSON views.

Fixes #22280
2019-01-22 10:51:25 +01:00
Rossen Stoyanchev f6c16815b4 Merge branch '5.1.x' 2019-01-21 10:00:15 -05:00
Rossen Stoyanchev 20f4022e7b Correctly truncate logging of response body
Fixes #22287
2019-01-21 09:57:52 -05:00
Rossen Stoyanchev 020c537c03 Add note to CorsFilter section
Fixes #19841
2019-01-21 09:47:30 -05:00
Stephane Nicoll bd3d7dbc0c Merge pull request #22283 from izeye
* pr/22283:
  Polish AutowireUtils.EXECUTABLE_COMPARATOR
2019-01-20 17:38:06 +01:00
Johnny Lim 963cc09c2e Polish AutowireUtils.EXECUTABLE_COMPARATOR
Closes gh-22283
2019-01-20 17:37:46 +01:00
Rossen Stoyanchev b0a3a6f79f Merge branch '5.1.x' 2019-01-18 18:29:39 -05:00
Rossen Stoyanchev e373b46660 Jackson2JsonDecoder tolerates null literal
Fixes #22042
2019-01-18 18:27:40 -05:00
Rossen Stoyanchev 5dcde9e7d7 Trim decoded SSE data
Fixes #22043
2019-01-18 18:13:58 -05:00
Rossen Stoyanchev ef72ef54fa Avoid NPE when setting warnLogCategory
Fixes #22159
2019-01-18 18:08:48 -05:00
Rossen Stoyanchev a77eee899a Document synchronous use of the WebClient
Fixes #22173
2019-01-18 17:46:16 -05:00
Rossen Stoyanchev f9ba069b9d Add "Affects" field to issue template 2019-01-18 15:27:43 -05:00
Rossen Stoyanchev 4fdfa4246f Merge branch '5.1.x' 2019-01-17 18:01:41 -05:00
Rossen Stoyanchev 9837ec5904 Fix Javadoc typos
Closes #22261
2019-01-17 18:01:08 -05:00
Rossen Stoyanchev 2a57b40515 Merge branch '5.1.x' 2019-01-17 17:13:30 -05:00
Rossen Stoyanchev bdac937a43 Replace more references to issue tracker
Fixes #22254
2019-01-17 17:08:39 -05:00
Sanghyuk Jung 6ca3884759 Update links to issue tracker 2019-01-17 16:44:41 -05:00
Rossen Stoyanchev ffe888ca18 Merge branch '5.1.x' 2019-01-17 12:56:46 -05:00
Rossen Stoyanchev 189e1afc6e Use try-with-resources in documentation samples
Fixes #22269
2019-01-17 12:53:59 -05:00
Rossen Stoyanchev 2043793899 Merge branch '5.1.x' 2019-01-17 12:31:46 -05:00
Rossen Stoyanchev d1862a26dd Typo in web documentation
Fixes #22270
2019-01-17 12:27:00 -05:00
Brian Clozel 0450b07c21 Merge branch '5.1.x' 2019-01-17 11:26:35 -05:00
Brian Clozel 2b65d0e51f Fix error when writing empty String to DataBuffer
Prior to this commit, `DataBuffer.write` would throw an
`IllegalStateException` when called with an empty `String`, since the
`CharsetEncoder` would be flushed on an incorrent state.

This commit skips entirely the encoding phase for empty `String`.

Fixes #22262
2019-01-17 11:09:48 -05:00
Stephane Nicoll 0db4c22656 Merge pull request #22256 from KyleRogers
* pr/22256:
  Fix typo in cache abstraction chapter
2019-01-15 06:24:59 -05:00
Stefan Penndorf 04ce61968d Fix typo in cache abstraction chapter
Closes gh-22256
2019-01-15 06:23:34 -05:00
Rossen Stoyanchev 7a9e2f5edc Update issue template
Closes #22253
2019-01-14 19:26:23 -05:00
Rossen Stoyanchev f557f313c2 Update issue template 2019-01-14 13:48:59 -05:00
Rossen Stoyanchev 2b530bac39 Update issue template 2019-01-14 12:26:38 -05:00
Rossen Stoyanchev 66359e2e9e Update issue templates 2019-01-14 09:40:51 -05:00
Arjen Poutsma 5938ca9a7c Deprecate JiBX marshaller
Resolves #22249
2019-01-14 11:57:15 +01:00
Arjen Poutsma 86fb43900e Deprecate JiBX marshaller
Resolves #22249
2019-01-14 11:50:21 +01:00
Arjen Poutsma 89a7e752ef Remove Castor marshaller
Resolves #22250
2019-01-14 11:28:16 +01:00
Arjen Poutsma bfff9ca0ce Fix typo
Resolves #22241
2019-01-14 10:49:11 +01:00
Brian Clozel 33cbe2e77a Remove admonitions surrounding code snippets 2019-01-09 18:38:31 +01:00
Brian Clozel 8c768e48fa Use Spring Doc Resources for reference docs
This commit removes the custom static resources for the reference
documentation and instead uses the new Spring Doc Resources project
https://github.com/spring-io/spring-doc-resources

The asciidoctor theme is now shared between Spring projects and
integrated in the project build.
2019-01-09 18:38:31 +01:00
Sam Brannen e1e6224acb Document effect of preemptive timeouts on transactional tests
Issue: SPR-17647
2019-01-09 16:38:47 +01:00
Sam Brannen df13e4dd5e Document effect of preemptive timeouts on transactional tests
Issue: SPR-17647
2019-01-09 16:37:56 +01:00
Sam Brannen cf565067fe Document effect of @DirtiesContext when used with constructor injection
Issue: SPR-17654
2019-01-09 15:43:41 +01:00
Sam Brannen 2159518252 Improve documentation for DI options in the TestContext framework 2019-01-09 15:43:31 +01:00
Sam Brannen bd9d3334a2 Document effect of @DirtiesContext when used with constructor injection
Issue: SPR-17654
2019-01-09 15:39:56 +01:00
Sam Brannen 9ea618ede9 Improve documentation for DI options in the TestContext framework 2019-01-09 14:54:14 +01:00
Stephane Nicoll 2a76a65708 Switch master to 5.2.0.BUILD-SNAPSHOT 2019-01-09 14:12:05 +01:00
Spring Buildmaster 754ad4d0d3 Next Development Version 2019-01-09 12:43:27 +00:00
Juergen Hoeller 72dddfbc7b Polishing 2019-01-09 12:26:58 +01:00
Rossen Stoyanchev dc3f953f4b Correction for commit #b219c6c
Issue: SPR-17630
2019-01-08 22:43:42 -05:00
Juergen Hoeller 4058361e84 Upgrade to Reactor Californium SR4 2019-01-08 23:37:26 +01:00
Andrzej Leśkiewicz 952045c216 SPR-17606 @Profile mishandles "not" operand mixed with "&" (#2066)
Correct handling of not/and expressions in ProfilesParser

Issue: SPR-17606
2019-01-08 22:24:15 +01:00
Juergen Hoeller 815f151448 Upgrade to Checkstyle 8.16 2019-01-08 21:57:24 +01:00
Juergen Hoeller 605e2477b9 Polishing 2019-01-08 21:57:13 +01:00
Sam Brannen 304c85ec70 Link explicitly to JUnit 5.3.2 instead of current version 2019-01-08 18:08:31 +01:00
Juergen Hoeller f56fa91430 Polishing 2019-01-08 17:11:34 +01:00
Juergen Hoeller 9cb5369cb9 DependencyDescriptor supports TypeDescriptor resolution for fields
This allows for proper nested type conversion in @Value Optional fields analogous to method parameters, through a new TypeDescriptor-based method in the TypeConverter SPI. As an additional and less involved measure that is worth backporting, DefaultListableBeanFactory defensively checks for pre-converted Optional wrappers.

Issue: SPR-17607
2019-01-08 17:11:27 +01:00
Juergen Hoeller a82f049083 FormHttpMessageConverter officially supports non-String form values
Issue: SPR-17645
2019-01-08 17:11:07 +01:00
Rossen Stoyanchev b219c6ce15 Adjust UriComponentsBuilder#toUriString behavior
Commit #93b7a4 added support for pre-configuring URI variables at the
UriComponentsBuilder level, and also changed toUriString to encode
template and URI variables separately. However this went a bit too far
causing side effects for URLs with curly braces that don't represent
URI variables.

This commit restores the original toUriString behavior which is to
encode template and URI variables sepraately only if URI variables have
been pre-configured.

Issue: SPR-17630
2019-01-08 11:06:33 -05:00
Sam Brannen 17a4193810 Link explicitly to JUnit 4.12 instead of beta version
For details, see: https://github.com/junit-team/junit4/issues/1585
2019-01-08 16:29:46 +01:00
Sam Brannen 29ab38acb2 Provide external links to JUnit in published Javadoc API 2019-01-08 16:19:01 +01:00
Michel Schudel 4938dab0ae Fix XML parser default value handling
The xml parser does not fill in defaults provided in the XSD when
validation is disabled. As a result, attributes like default-lazy-init
will not receive the value "default" but an empty string.

With this commit, BeanDefinitionParserDelegate now takes this into
account, checking default values against empty string as well as
"default".

As a consequence, default-lazy-init attribute should now work correctly
even when the XSD validation is disabled.

Issue: SPR-8335
2019-01-08 15:36:01 +01:00
王诗峣 b94e8c4bef Fix ClassCastException in FormHttpMessageConverter
We should not cast MultiValueMap<String, ?> to MultiValueMap<String, String>
2019-01-08 12:19:51 +01:00
Brian Clozel abc68ef8ea Revert "package list URL for Reactor javadoc in Dokka"
This reverts commit dc2535516c.
The Reactor project reverted its Javadoc changes.
2019-01-08 10:31:00 +01:00
Juergen Hoeller d37a18ff03 Upgrade to Hibernate Validator 6.0.14 and Apache Johnzon 1.1.11
Includes OkHttp MockWebServer 3.12.1.
2019-01-08 00:50:44 +01:00
Juergen Hoeller 11976fa949 Upgrade to Groovy 2.5.5 and RxJava 2.2.5 2019-01-08 00:32:46 +01:00
Juergen Hoeller 6e3f974951 HttpHeaders.writableHttpHeaders properly handles HttpHeaders.EMPTY
Issue: SPR-17633
2019-01-08 00:32:27 +01:00
Juergen Hoeller 1faeeaea14 HandlerMethodParameter defensively handles interface annotation arrays
Issue: SPR-17629
2019-01-08 00:32:09 +01:00
Brian Clozel dc2535516c Fix package list URL for Reactor javadoc in Dokka
Reactor is now building its Javadoc with a recent JDK version, which
changes the structure of the published HTML pages.

Without this change, the build fails during the Dokka generation with
the following exception:

```
Exception while loading package-list from
ExternalDocumentationLinkImpl(
  url=http://projectreactor.io/docs/core/release/api/,
  packageListUrl=http://projectreactor.io/docs/core/release/api/package-list)
```

This commit now points to the `/element-list` page, which seems to
contain the same information as the `package-list` page.
2019-01-07 20:53:56 +01:00
Rossen Stoyanchev 673a20cb10 Defensive initialization of AsyncXMLInputFactory
Aalto's InputFactoryImpl already disables loading of external entities
by default (property "javax.xml.stream.isSupportingExternalEntities").
This commit goes further by applying the same defensive measures as we
do elsewhere for XMLInputFactory, which disables DTD completely.
Arguably there is no good reason to enable that by default in WebFlux.
2019-01-07 13:52:46 -05:00
Brian Clozel f52f3a2f35 Upgrade to Reactor Californium SNAPSHOTs 2019-01-07 18:10:55 +01:00
Stephane Nicoll 77129f5a2b Polish 2019-01-05 09:57:46 +01:00
Stephane Nicoll d289befa2b Fix assertions 2019-01-03 14:20:57 +01:00
Stephane Nicoll b802c28d27 Merge pull request #2068 from Niconal
* pr/2068:
  Polish "Add missing [ in toString of WebSocketMessageBrokerStats"
  Add missing [ in toString of WebSocketMessageBrokerStats
2019-01-03 13:55:40 +01:00
Stephane Nicoll 556656b35a Polish "Add missing [ in toString of WebSocketMessageBrokerStats"
Closes gh-2068
2019-01-03 13:55:03 +01:00
Niconal 74630a1b0c Add missing [ in toString of WebSocketMessageBrokerStats
See gh-2068
2019-01-03 13:54:16 +01:00
Rossen Stoyanchev 63984800e4 Lenient URI template encoding
URI template encoding ignores mismatched curly braces, treating them as
literal parts instead.

Issue: SPR-17630
2019-01-02 16:36:08 -05:00
Rossen Stoyanchev 4b24bcb799 More accurate checks for presence of MediaType.ALL
Typically a straight up equals as well as Collections#contains
checks for MediaType.ALL is susceptible to the presence of
media type parameters.

This commits adds equalsTypeAndSubtype as well as an
isPresentIn(Collection<MimeType>) methods to MimeType to faciliate
with checks for MediaType.ALL.

Issue: SPR-17550
2019-01-02 14:32:50 -05:00
Rossen Stoyanchev 1cb9f2c7b2 Explicit HEAD sorted higher than implicit one
Same fix as #7cdcc1 but for WebFlux.

Issue: SPR-14182
2019-01-02 09:23:05 -05:00
Stephane Nicoll 72fbbb2403 Merge pull request #2064 from pierDipi
* pr/2064:
  Fix typo
2019-01-01 11:07:29 +01:00
Pier Dipi d459e1ad61 Fix typo
Closes gh-2064
2019-01-01 11:07:11 +01:00
Sebastien Deleuze 78a6429c32 Document NumberUtils.parseNumber() trim behavior
Issue: SPR-9523
2018-12-28 09:58:25 +01:00
Chen Dayu bd6432cb79 Fix formatting in data-access.adoc (#2062) 2018-12-26 15:08:44 +01:00
Sébastien Deleuze fced4e1f9c Merge pull request #2061 from Gyllsdorff
Fix spelling of "reactive HttpClient" in doc
2018-12-26 13:54:48 +01:00
Gyllsdorff 56d93bac89 Fix spelling of "reactive HttpClient" in doc 2018-12-26 13:13:09 +01:00
Juergen Hoeller 8d1de75b60 Upgrade to WebJars Locator 0.36 and OkHttp 3.12.1
Includes JRuby 9.2.5 and Jetty Reactive HttpClient 1.0.2.
2018-12-25 13:22:17 +01:00
Juergen Hoeller b2756f5bd2 Relaxed position assertion (for overflows in large inline maps)
Issue: SPR-17605
2018-12-25 13:22:00 +01:00
Juergen Hoeller 31a24720a6 Consistent support for EnumSet subclasses in CollectionFactory
Issue: SPR-17619
2018-12-25 13:20:31 +01:00
Juergen Hoeller 7a7958f275 MockMvcResultMatchers.forwardedUrl argument declared as nullable
Issue: SPR-17623
2018-12-25 13:20:09 +01:00
Stephane Nicoll ca9c34710f Merge pull request #2052 from igor-suhoruko
* pr/2052:
  Polish "Join identical catch branches"
  Join identical catch branches
2018-12-25 09:46:53 +01:00
Stephane Nicoll 9cbd585c30 Polish "Join identical catch branches"
Closes gh-2052
2018-12-25 09:46:35 +01:00
igor-suhorukov a218bf40cd Join identical catch branches
See gh-2052
2018-12-25 09:46:11 +01:00
Stephane Nicoll 93e7a0a59d Merge pull request #1452 from diguage
* pr/1452:
  Polish "Refactor duplicate code"
  Refactor duplicate code
2018-12-21 15:10:05 +01:00
Stephane Nicoll b83ceab88a Polish "Refactor duplicate code"
Closes gh-1452
2018-12-21 15:07:09 +01:00
diguage c15bbd675f Refactor duplicate code
See gh-1452
2018-12-21 15:06:56 +01:00
Arjen Poutsma 5a8b8b11e4 Add test for calculateCapacity
Issue: SPR-17558
Closes gh-2054
2018-12-20 21:34:15 +01:00
Arjen Poutsma a00be62b04 Calculating capacity before allocation.
This commit optimizes the `CharSequenceEncoder` to allocate `DataBuffer`
instances with a predicted capacity.

Issue: SPR-17558
2018-12-20 21:33:50 +01:00
Brian Clozel 4955d08f28 Use DataBuffer.write in CharSequenceEncoder
Since SPR-17558, `DataBuffer` now offers a new method to write Strings
to them. This commit makes `CharSequenceEncoder` use that.

Issue: SPR-17558
2018-12-20 21:33:44 +01:00
Brian Clozel 6361b0cb23 Write CharSequence instances to DataBuffers
Prior to this commit, one could write a `CharSequence` to an existing
`DataBuffer` instance by turning it into a byte array or `ByteBuffer`
first. This had the following disadvantages:

1. Memory allocation was not efficient (not leveraging pooled memory
when available)
2. Dealing with `CharsetEncoder` is not always easy
3. `DataBuffer` implementations, like `NettyDataBuffer` can use
optimized implementations in some cases

This commit adds a new `DataBuffer#write(CharSequence, Charset)` method
for those cases and also an `ensureCapacity` method useful for checking
that the current buffer has enough capacity to write to it..

Issue: SPR-17558
2018-12-20 21:33:33 +01:00
Arjen Poutsma 5e4a8966ee Make TomcatHttpHandlerAdapter aware of request/response wrappers
This commit makes TomcatServerHttpRequest aware of
HttpServletRequestWrappers, and TomcatServerHttpResponse aware of
HttpServletResponseWrappers.

Issue: SPR-17611
2018-12-19 12:16:14 +01:00
Violeta Georgieva 09da10cc6c Propagate the cancel signal to the downstream
Issue: SPR-17609
2018-12-18 15:04:08 -05:00
Sam Brannen 44f39d4ce0 Fix Java comment in Reference Manual 2018-12-18 13:22:24 +01:00
Stephane Nicoll 1d593a970a Merge pull request #2057 from kimsaabyepedersen
* pr/2057:
  Polish "Fix method name in comment"
  Fix method name in comment
2018-12-18 07:56:43 +01:00
Stephane Nicoll e42cf9dc56 Polish "Fix method name in comment"
Closes gh-2057
2018-12-18 07:56:10 +01:00
Kim Saabye Pedersen 65cb935333 Fix method name in comment
See gh-2057
2018-12-18 07:55:49 +01:00
Juergen Hoeller 0e8ed5931d Revised backport version 5.0.11
Issue: SPR-17410
Issue: SPR-17433
2018-12-17 18:19:21 +01:00
Juergen Hoeller a240cfcf2f Consistent support for if-(un)modified-since as ZonedDateTime/Instant
Includes DefaultRequestBodyUriSpec pre-resolving URI for HttpRequest.

Issue: SPR-17571
2018-12-17 16:21:39 +01:00
Juergen Hoeller 199be6aec5 ValidationUtils.invokeValidator assertion for non-null target object 2018-12-17 14:24:56 +01:00
Juergen Hoeller 99da8e1477 Upgrade to Jackson 2.9.8 2018-12-17 14:24:43 +01:00
Juergen Hoeller 2f04cbba51 Upgrade to Gradle 4.10.3
Issue: SPR-17155
2018-12-17 14:24:34 +01:00
Juergen Hoeller fc9d1760be Revised c-namespace example
Issue: SPR-17601
2018-12-17 14:24:21 +01:00
Juergen Hoeller aab421167b Revised format annotation docs 2018-12-13 17:19:50 +01:00
stsypanov 112cc70231 Improve performance of ConcurrentReferenceHashMap creation 2018-12-13 16:57:48 +01:00
igor-suhorukov 93189a6733 String.indexOf() expressions can be replaced with a call to the String.contains() method available in Java 5 and newer. 2018-12-13 12:29:31 +01:00
Stephane Nicoll 81d77b9872 Merge pull request #2050 from diguage
* pr/2050:
  Fix sample in EnableAsync Javadoc
2018-12-13 10:18:08 +01:00
diguage ee95a110bd Fix sample in EnableAsync Javadoc
Closes gh-2050
2018-12-13 10:16:56 +01:00
Juergen Hoeller c48672c4c7 ParameterNameDiscoverer may return individual null entries in an array
Issue: SPR-17565
2018-12-12 21:56:17 +01:00
Juergen Hoeller ef72baad3a Revised @AspectJ vs XML section
Issue: SPR-17597
2018-12-12 21:56:01 +01:00
Rossen Stoyanchev 14e87d2733 Add reference to ConcurrentWebSocketSessionDecorator in the docs.
Issue: SPR-12886
2018-12-12 11:57:51 -05:00
Rossen Stoyanchev 388ce92861 Enable io.netty.leakDetection.level=paranoid in tests
Issue: SPR-17574
2018-12-12 11:40:33 -05:00
Rossen Stoyanchev 38ae282c3b Update log category precision for all tests
Replace the full category capped at 36 chars with the class name only
and 1 char per package, e.g. org.apache.commons.Foo -> o.a.c.Foo
2018-12-12 11:40:33 -05:00
Rossen Stoyanchev 05d616240a StringHttpMessageConverter defaults to UTF-8 for JSON
Issue: SPR-17568
2018-12-12 11:40:33 -05:00
Rossen Stoyanchev 8eef97da33 HTTP header adapters print header values
Issue: SPR-17546
2018-12-12 11:40:33 -05:00
Rossen Stoyanchev 270099383b Add protected method in StandaloneMockMvcBuilder
To allow sub-classes to register additional MVC infrastructure.

Issue: SPR-17520
2018-12-12 11:40:33 -05:00
Juergen Hoeller 0ad35053fb Upgrade to CGLIB 3.2.10
Includes upgrade to JarJar 1.7.2 and Tomcat 9.0.14.

Issue: SPR-17595
2018-12-12 16:03:31 +01:00
Arjen Poutsma 058608021e Fix invalid String representation for composed RequestPredicates
Issue: SPR-17594
2018-12-12 15:33:33 +01:00
Juergen Hoeller 106ae0cc5b Polishing 2018-12-12 13:21:06 +01:00
Juergen Hoeller 7b7a8196f5 Revised HttpHeaders javadoc 2018-12-12 13:20:58 +01:00
Juergen Hoeller 2c98c1b81a Relaxed assertion in NotificationPublisherAwareLazyTargetSource
Issue: SPR-17592
2018-12-12 12:16:14 +01:00
Juergen Hoeller 7b9c30f26e Explicit documentation notes on JMS 2.0 vs 1.1 compatibility
Issue: SPR-17583
2018-12-12 12:15:34 +01:00
Juergen Hoeller 474ac2d975 Revised SimpleEvaluationContext example
Issue: SPR-17581
2018-12-12 12:11:15 +01:00
Juergen Hoeller 6eb0a60df9 Polishing 2018-12-12 11:16:53 +01:00
Juergen Hoeller 5bbbc82e19 Consistent handling of null header values in HttpHeaders
Issue: SPR-17588
2018-12-12 11:16:45 +01:00
Juergen Hoeller 4b4503085a Prefer SLF4J SPI over Log4J in case of log4j-to-slf4j bridge
Issue: SPR-17586
2018-12-12 11:16:36 +01:00
Stephane Nicoll 73a96c5152 Merge pull request #2049 from wonwoo
* pr/2049:
  Fix typo in javadoc
2018-12-12 08:00:48 +01:00
wonwoo 9a13d93a6b Fix typo in javadoc
Closes gh-2049
2018-12-12 08:00:15 +01:00
Kamil Szymanski 894044cea0 Optimize ResourceUrlProvider
Closes gh-2008
2018-12-11 12:12:15 +01:00
Stephane Nicoll 0550c08f86 Merge pull request #2044 from chendy560
* pr/2044:
  Fix typo
2018-12-08 16:03:17 +01:00
chendayu 073f304db9 Fix typo
Closes gh-2044
2018-12-08 16:02:52 +01:00
Stephane Nicoll 58a99e3983 Merge pull request #2043 from marchpig
* pr/2043:
  Fix typo in webflux.adoc
2018-12-08 16:00:48 +01:00
Sangwoo Lee 62f2a6352f Fix typo in webflux.adoc
Closes gh-2043
2018-12-08 16:00:30 +01:00
Stephane Nicoll 528b9c17ec Merge pull request #2046 from yepapa
* pr/2046:
  Fix typo in websocket.adoc
2018-12-08 16:00:00 +01:00
Juhyoung Jeon 31318652ea Fix typo in websocket.adoc
Closes gh-2046
2018-12-08 15:59:45 +01:00
Arjen Poutsma f15bd88211 Fix checkstyle 2018-12-07 15:06:56 +01:00
Stephane Nicoll 220951707b Merge pull request #2042 from PascalSchumacher
* pr/2042:
  Fix typo in core-beans.adoc
2018-12-07 11:29:56 +01:00
Pascal Schumacher 18ac86ae16 Fix typo in core-beans.adoc
Closes gh-2042
2018-12-07 11:29:35 +01:00
Arjen Poutsma 3258ac1ec4 Expose request in WebClientResponseException
This commit exposes the request that lead to it in
WebClientResponseException, as a HttpRequest object.

Issue: SPR-17087
2018-12-07 11:08:02 +01:00
Stephane Nicoll 54f5b7d0ee Polish
Issue: SPR-17572
2018-12-07 10:54:03 +01:00
Juergen Hoeller aaaf81ed99 Polishing 2018-12-06 15:53:57 +01:00
Juergen Hoeller 6a012147c4 Consistent support for last-modified argument as Instant/ZonedDateTime
Issue: SPR-17571
2018-12-06 15:53:47 +01:00
Lars Grefer 9abd4ed33d Allow Instant and ZonedDateTime as Last-Modified header.
Issues: SPR-17571
2018-12-06 14:49:12 +01:00
Juergen Hoeller cf7ee0739f Upgrade to Checkstyle 8.15 2018-12-05 14:13:57 +01:00
Juergen Hoeller db63f7dd4a StandardEvaluationContext.setVariable leniently ignores null name
Issue: SPR-17565
2018-12-05 14:13:24 +01:00
Rossen Stoyanchev 7a5f8e03bc Refine check for multiple subscribers
Commit #c187cb2 introduced proactive rejection of multiple subscribers
in ReactorClientHttpResponse, instead of hanging indefinitely as per
https://github.com/reactor/reactor-netty/issues/503.

However FluxReceive also rejects subsequent subscribers if the response
is consumed fully, as opposed to being canceled, e.g. as with
bodyToMono(Void.class). In that case, a subsequent subscriber causes
two competing error signals to be sent, and one gets dropped and
logged by reactor-core.

This fix ensures that a rejection is raised in
ReactorClientHttpResponse only after a cancel() was detected.

Issue: SPR-17564
2018-12-04 21:27:37 -05:00
Juergen Hoeller 50e5bdb813 Clarified VfsResource constructor
Issue: SPR-17563
2018-12-04 22:09:06 +01:00
Juergen Hoeller 9efea7eb73 MockHttpServletRequest preserves original Accept-Language header value
Issue: SPR-17566
2018-12-04 22:07:43 +01:00
Juergen Hoeller d3cdecc621 Upgrade to Rome 1.12 and POI 4.0.1 2018-12-04 02:16:03 +01:00
Juergen Hoeller c024bdcc6f Cleanup after unexpected exception from external delegation call
Issue: SPR-17559
2018-12-04 02:15:47 +01:00
Juergen Hoeller 6d7827e36b Polishing 2018-12-03 23:53:00 +01:00
Juergen Hoeller d5dab12909 NettyDataBufferFactory.join returns single-element buffer as-is
Issue: SPR-17560
2018-12-03 23:52:35 +01:00
Juergen Hoeller 7854b7ac40 Avoid log statements between resource opening and returning
Issue: SPR-17559
2018-12-03 23:50:50 +01:00
Pascal Schumacher 26b1c848b8 Fix typo in core-beans.adoc (Obvious Fix) 2018-12-03 22:09:06 +01:00
Juergen Hoeller 5e153e4a77 Revised section on custom BeanPostProcessors
Issue: SPR-17556
2018-12-03 19:52:25 +01:00
Juergen Hoeller 16e9b83d43 JavaMailSenderImpl calls sendMessage with empty array instead of null
Issue: SPR-17540
2018-12-03 19:49:21 +01:00
Juergen Hoeller 516c01c438 Upgrade javadoc links to Jackson 2.9
Includes rollback to Hibernate ORM 5.1.16 for integration tests.
2018-12-03 19:09:39 +01:00
Juergen Hoeller 43077072ad Upgrade to Netty 4.1.32, Undertow 2.0.16, OpenPDF 1.2.7
Includes Hibernate ORM 5.1.17 for integration tests.
2018-12-03 18:28:50 +01:00
Juergen Hoeller 0841dc5f99 Restore Hibernate ORM 5.1 compatibility in HibernateTransactionManager
Issue: SPR-17557
2018-12-03 18:27:30 +01:00
Rossen Stoyanchev 15f8863f19 Add sub-section on validation for functional endpoints
Issue: SPR-17401
2018-11-30 10:56:29 -05:00
Bertrand Guay-Paquet bc3b95db92 Fix typo in Javadoc for transaction Propagation annotation 2018-11-29 16:32:28 -05:00
Francesco Komauli 66f822e600 Fix typo in Javadoc for UnsupportedMediaTypeStatusException
Response status 415 (unsupported media type) reported as of 416 (which is Range Not Satisfiable), mismatching with superclass constructor parameter HttpStatus.UNSUPPORTED_MEDIA_TYPE
2018-11-29 16:36:56 +01:00
Spring Buildmaster dfc193b85e Next Development Version 2018-11-27 09:29:05 +00:00
Rossen Stoyanchev 029101c79a Merge pull request #2025 from neVERberleRfellerER/SPR-17535 2018-11-26 16:02:08 -05:00
Rossen Stoyanchev 3eee118b44 Polish 2018-11-26 16:00:47 -05:00
Ondrej Kraus 959cf61647 Sanitize request fragment in ResourceUrlEncodingFilter
Prior to this change, ResourceUrlEncodingFilter would try to resolve
the resource path using request URL without removing fragment first,
whereas only paths should be used.

This commit synchronizes behavior of ResourceUrlEncodingFilter with
behavior of ResourceUrlProvider.

Issue: SPR-17535
2018-11-26 13:48:48 -05:00
Sam Brannen 82eb82a040 Upgrade to JUnit 5.3.2
Issue: SPR-17537
2018-11-25 21:44:12 +01:00
Juergen Hoeller 80b8382f00 Revised alias definition example in reference documentation
Issue: SPR-17536
2018-11-25 21:27:49 +01:00
Juergen Hoeller ebbe14c363 ResolvableType-based matching consistently respects generic factory method return type (even for pre-initialized raw singleton instance)
Issue: SPR-17524
2018-11-25 21:27:19 +01:00
Juergen Hoeller c2e545776d Upgrade to RxJava 2.2.4 2018-11-23 23:46:37 +01:00
Juergen Hoeller 97ac1c22c5 DefaultResponseErrorHandler makes use of HttpStatus.isError()
Issue: SPR-17439
2018-11-23 19:27:47 +01:00
Sam Brannen a528407d0c Suppress warning 2018-11-23 18:05:47 +01:00
Sam Brannen 58cde3c2e6 Avoid test compile-time dependency on junit-jupiter-engine
Issue: SPR-17533
2018-11-23 18:05:34 +01:00
Arjen Poutsma fedbb09ad9 Improve RouterFunctions reference documentation
Changed WebFlux.fn docs to use router function builder.

Issue: SPR-17016
2018-11-23 17:48:11 +01:00
Sam Brannen 81fde5ec41 Ensure that MethodParameter.findParameterIndex() is thread-safe
Prior to this commit, parallel invocations of
MethodParameter.findParameterIndex() (invoked indirectly via
SynthesizingMethodParameter.forParameter() and
MethodParameter.forParameter()) could intermittently lead to an
IllegalArgumentException being thrown due to a race condition in the
internal implementation of the JDK's
java.lang.reflect.Executable.getParameters() method.

This commit addresses this issue by introducing a fallback for-loop
that iterates over the candidate parameters a second time using
equality checks instead of identity checks.

Issue: SPR-17534
2018-11-23 17:37:20 +01:00
Sam Brannen aa7f69a5d1 Ensure that parameter resolution in SpringExtension is thread-safe
Prior to this commit, parallel execution of @BeforeEach and @AfterEach
methods that accepted @Autowired arguments would fail intermittently
due to a race condition in the internal implementation of the JDK's
java.lang.reflect.Executable.getParameters() method.

This commit addresses this issue by creating instances of
SynthesizingMethodParameter via
SynthesizingMethodParameter.forExecutable(Executable, int) instead of
SynthesizingMethodParameter.forParameter(Parameter), since the latter
looks up the parameter index by iterating over the array returned by
Executable.getParameters() (which is not thread-safe).

Issue: SPR-17533
2018-11-23 16:35:19 +01:00
Sebastien Deleuze 91de8d265e Fix ProtobufDecoder handling of split message size
This commit introduces a new readMessageSize(DataBuffer input) private
method, inspired from CodedInputStream#readRawVarint32(int, InputStream)
and adapted for DataBuffer using MessageDecoderFunction fields in
order to support use cases where the message size is split between
distinct chunks.

It also fixes handling of end of streams by using
DataBuffer#readableByteCount instead of -1 which is only relevant with
InputStream.

Issue: SPR-17429
2018-11-23 14:22:58 +01:00
Juergen Hoeller 77ab88b144 Polishing 2018-11-23 13:56:02 +01:00
Juergen Hoeller 738097def2 DefaultResponseErrorHandler detects non-standard error code as well
Issue: SPR-17439
2018-11-23 13:55:50 +01:00
Juergen Hoeller b90553db5c Upgrade to Reactor Californium SR3 2018-11-22 22:03:56 +01:00
Juergen Hoeller 56234fe877 Polishing 2018-11-22 22:03:36 +01:00
Juergen Hoeller c16f36b537 Upgrade to Mockito 2.23.4, Selenium 3.141.59, JSON-P 1.1.4 2018-11-22 18:24:18 +01:00
Juergen Hoeller ae8f680d2e Polishing 2018-11-22 18:21:56 +01:00
Juergen Hoeller bf272b0b21 Nullability fine-tuning based on IntelliJ IDEA 2018.3 inspection
Issue: SPR-15540
2018-11-22 16:12:38 +01:00
Juergen Hoeller b1b28d4641 ToStringVisitor consistently returns platform-independent line breaks
Issue: SPR-17322
2018-11-22 16:11:59 +01:00
Johnny Lim 17b2b8af86 Remove an unnecessary local variable 2018-11-22 13:56:22 +01:00
Juergen Hoeller 262c702da4 CachingMetadataReaderFactory releases shared cache Map on clearCache()
LocalResourceCache properly initializes cacheLimit on construction.

Issue: SPR-17527
2018-11-22 11:20:47 +01:00
Rossen Stoyanchev 548126ddd8 Consistently pass param info to ServerWebInputException
Issue: SPR-17232
2018-11-21 14:41:42 -05:00
Rossen Stoyanchev 7e9857a663 ForwardedHeaderTransformer handles encoding correctly
Issue: SPR-17525
2018-11-21 10:54:39 -05:00
Rossen Stoyanchev 0134c9d608 Update @since version after backport 2018-11-21 09:35:33 -05:00
Brian Clozel 5fe628a811 Polish 2018-11-21 10:27:49 +01:00
Rossen Stoyanchev 759013eb17 Consistent isEmpty check in WebTestClient
Issue: SPR-17522
2018-11-20 23:02:53 -05:00
Rossen Stoyanchev a55ca56e34 BEST_MATCHING_HANDLER_ATTRIBUTE for spring-webmvc
Issue: SPR-17518
2018-11-20 22:31:02 -05:00
Rossen Stoyanchev d6a5c3428b Improve docs on STOMP / WebSocket frame max size
Issue: SPR-17514
2018-11-20 21:59:47 -05:00
Rossen Stoyanchev 24848ec1bc Configurable TcpClient for ReactorNettyTcpClient
Issue: SPR-17523
2018-11-20 21:20:21 -05:00
Juergen Hoeller fef0e21d8b Remove unused LinkedList import 2018-11-20 22:16:51 +01:00
Juergen Hoeller 8c7579eba8 Polishing 2018-11-20 22:06:44 +01:00
Juergen Hoeller a3d763d137 Consistent parameter resolution for batch updates (IN clauses etc)
Includes deprecation of (NamedParameter)BatchUpdateUtils in favor of inlined code in (NamedParameter)JdbcTemplate itself.

Issue: SPR-17402
2018-11-20 22:05:53 +01:00
Juergen Hoeller 2a5d7690b6 CglibAopProxy skips method proxy for equals/hashCode/toString override
Issue: SPR-17500
2018-11-20 22:04:28 +01:00
Juergen Hoeller f5aeb81473 SerializedBeanFactoryReference falls back to dummy with specific id
Issue: SPR-17508
2018-11-20 22:02:10 +01:00
stsypanov 02d3cfa42d Use ArrayList instead of LinkedList 2018-11-20 21:54:51 +01:00
Vojtech Janota 12f168290d SPR-17492: FastByteArrayOutputStream.read byte-to-int conversion 2018-11-20 17:08:01 +01:00
Arjen Poutsma 88cb126511 Add RequestPredicate Visitor to WebFlux.fn
This commit introduces RequestPredicates.Visitor, an implementation of
the visitor pattern for RequestPredicates.

Issue: SPR-17322
2018-11-20 14:05:17 +01:00
Arjen Poutsma f3c29fe2e6 Add test for UriUtils.encode(String, Charset)
Issue: SPR-17451
2018-11-20 10:51:19 +01:00
Rossen Stoyanchev abf9ce8a34 Improve handling of empty response with Mono<T>
Issue: SPR-17560
2018-11-19 16:48:38 -05:00
Arjen Poutsma 63275ae2b7 Add Test for LeakAwareDataBufferFactory 2018-11-19 16:56:25 +01:00
Brian Clozel 3203d39821 Remove Content-Length response header from errors
Prior to this commit, when errors happened before the response was
committed, the `Content-Length` response header would be left as is.
This can be problematic since the error can be handled later in the
chain and the response body changed accordingly. For example, Spring
Boot renders error pages in those cases. If the `Content-Length` is set,
HTTP clients can get confused and only consider part of the error
response body.

This commit ensures that any `Content-Length` response header is removed
in case of errors, if the response is not already committed.

This is done at the `AbstractServerHttpResponse` level, since errors can
be handled in multiple places and the response itself is the safest
place to handle this case.

As a consequence, this commit also removes `Content-Length` checks in
`EncoderHttpMessageWriter` since we now consider that we should rely on
the response body we're about to write rather than any previously set
value.

Issue: SPR-17502
2018-11-19 15:49:54 +01:00
Juergen Hoeller ce5c65c0b0 Upgrade to JAXB 2.3.1, Groovy 2.5.4, Jetty 9.4.14, Tomcat 9.0.13
Includes JAX-WS 2.3.1, Awaitility 3.1.3, OkHttp 3.12, Woodstox 5.2.
2018-11-19 12:41:26 +01:00
Stephane Nicoll afa38f5f97 Merge pull request #2019 from Hanope
* pr/2019:
  Polish contribution
  Fix typos
2018-11-19 08:50:49 +01:00
Stephane Nicoll 7b6f2f8fb3 Polish contribution
Closes gh-2019
2018-11-19 08:45:33 +01:00
Hanope bfb49c7249 Fix typos
See gh-2019
2018-11-19 08:41:21 +01:00
HeemangHan 729ce4108d Correct typos (#2018) 2018-11-17 16:31:01 +01:00
Rossen Stoyanchev 1a37345e84 Fix checkstyle violation and polish 2018-11-16 19:42:42 -05:00
Rossen Stoyanchev c89e6c616a Improve logging of request mapping information
Issue: SPR-17450
2018-11-16 17:30:18 -05:00
Arjen Poutsma 539cfc24c6 Refactor AbstractEncoderTestCase
Refactor AbstractEncoderTestCase to resemble AbstractDecoderTestCase

Issue: SPR-17449
2018-11-16 14:33:26 +01:00
Arjen Poutsma 39ce989d1a Add and use AbstractDecoderTestCase
Introduce new base test case for decoder tests, and use it.

Issue: SPR-17449
2018-11-16 14:33:26 +01:00
Brian Clozel 0f2d9df79f Upgrade to Reactor Californium SNAPSHOTs 2018-11-16 11:13:17 +01:00
Jay Bryant b9603680bc Fixing typoes
Jim Showalter found two typoes in the web section. This PR fixes them. Thanks, Jim.
2018-11-14 16:10:17 -05:00
Rossen Stoyanchev 7bbd4c681f Merge pull request #2010 from dimitrisli/SPR-17459 2018-11-13 23:05:07 -05:00
Rossen Stoyanchev ba3fef3e8a Refactor media types parsing improvements
Issue: SPR-17459
2018-11-13 23:02:09 -05:00
Dimitrios Liapis f4b05dc2e7 MediaType parsing supports comma inside quotes
Issue: SPR-17459
2018-11-13 16:59:57 -05:00
Rossen Stoyanchev 46a5fb7a91 Configurable Marshaller/Unmarshaller in JAXB2 codecs
Issue: SPR-17388
2018-11-13 16:56:56 -05:00
Juergen Hoeller 093254b2b3 Jackson2ObjectMapperBuilder stores visibility declarations in order
Issue: SPR-17489
2018-11-13 21:17:55 +01:00
Rossen Stoyanchev 9f857c1f16 Replace constant exceptions with inlined ones
Issue: SRP-17475
2018-11-13 14:49:23 -05:00
Rossen Stoyanchev 75b1396768 Fall back on default server response status code
Update the ServerHttpRespnose contract to indicate that server specific
sub-classes should fall back on the default status, if a status code
has not been set explicitly.

Issue: SPR-17368
2018-11-13 14:10:48 -05:00
Arjen Poutsma 4182935b7a Revert optimization in StringDecoder
This commit reverts the first optimizations listed in
fa096dc60f, as the default delimiters
do vary, namely by the charset given in the message mime type.
The mimetype charset might not be compatible with ASCII (i.e. anything
but UTF-8 or ISO-8859-1, for instance it might be UTF-16), and will not
successfully find the default delimiters as a consequence.

Added test to indicate the bug.
2018-11-13 13:38:13 +01:00
Arjen Poutsma 445b76bbe8 Polishing 2018-11-13 13:35:37 +01:00
Arjen Poutsma 3bab3515b1 Add and use AbstractEncoderTestCase
Introduce new base test case for encoder tests, and use it.

Issue: SPR-17449
2018-11-13 13:35:37 +01:00
Arjen Poutsma 0c0de851f4 Add LeakAwareDataBufferFactory
Introduce a data buffer factory that can check for memory leaks in
@After methods.

Issue: SPR-17449
2018-11-13 13:35:37 +01:00
Arjen Poutsma e31914bada Polishing 2018-11-13 13:35:37 +01:00
Juergen Hoeller 40148c0560 Consistent use of ResolvableType.toClass() for assignability checks
Issue: SPR-17086
2018-11-12 20:29:37 +01:00
Juergen Hoeller 3a66927bd2 Polishing 2018-11-12 16:43:43 +01:00
Juergen Hoeller c58da71006 Synthesize parameter annotations from interface methods as well
Issue: SPR-17460
2018-11-12 16:23:14 +01:00
Juergen Hoeller 818c2aa3b9 ServerRequest.attribute(name) defensively accesses concurrent map
Issue: SPR-17486
2018-11-12 16:22:42 +01:00
Juergen Hoeller d96a7b4bfc ClientRequest.attribute(name) defensively handles null value
Issue: SPR-17486
2018-11-12 11:52:21 +01:00
Sam Brannen b3aad549c9 Fix @since tag 2018-11-10 16:56:39 +01:00
Sam Brannen 865f1f692a Introduce tests for @Sql and @Transactional support in @Nested test classes
This commit was inspired by the following question on Stack Overflow.

https://stackoverflow.com/questions/53236807/spring-boot-testing-run-script-in-a-nested-test-sql-script-sql
2018-11-10 15:47:30 +01:00
Sam Brannen 93df24af16 Polishing 2018-11-10 15:47:29 +01:00
Rossen Stoyanchev a5339d71ea WebClient handles no Content-Type with data correctly
Issue: SPR-17482
2018-11-09 16:16:03 -05:00
Rossen Stoyanchev e4c84ec757 Consistent default encoding in DefaultUriBuilderFactory
Issue: SPR-17465
2018-11-09 14:13:51 -05:00
Rossen Stoyanchev f5da737bd4 Polish 2018-11-08 23:13:48 -05:00
Rossen Stoyanchev c187cb2fa1 Ensure client response is drained with onStatus hook
Issue: SPR-17473
2018-11-08 22:41:22 -05:00
Rossen Stoyanchev ed1d63dcc3 ResolvableMethod copy in spring-messaging src/test 2018-11-08 13:29:21 -05:00
Juergen Hoeller e26ae9853e Up-to-date version and link in ASM/CGLIB/Objenesis package javadoc
Issue: SPR-17267
Issue: SPR-17372
2018-11-08 16:56:48 +01:00
Juergen Hoeller 362c59c310 Consistently return empty array in case of empty batch arguments
Issue: SPR-17476
2018-11-08 13:43:07 +01:00
Stephane Nicoll b6e8674700 Merge pull request #2011 from bactoria
* pr/2011:
  Fix typo
2018-11-07 07:48:22 +01:00
황준오 db8a94ce5f Fix typo
Closes gh-2011
2018-11-07 07:47:55 +01:00
Stephane Nicoll 3232825a55 Clarify @Async documentation
Issue: SPR-17458
2018-11-06 08:30:30 +01:00
Juergen Hoeller e71ff2901a Polishing 2018-11-05 22:59:33 +01:00
Juergen Hoeller d9c1811d21 Deprecate NON_BRIDGED_METHODS constant as of 5.0.11 as well
Issue: SPR-17464
2018-11-05 22:59:18 +01:00
Juergen Hoeller 5e7a8b275d Polishing 2018-11-05 19:33:24 +01:00
Juergen Hoeller ea3250c8d6 Explicit notes on class/method-level semantics in class hierarchies
Issue: SPR-17445
2018-11-05 19:32:34 +01:00
Juergen Hoeller b1f5f51503 Synchronized onRefresh execution for concurrent ContextRefreshedEvent
Issue: SPR-17442
2018-11-05 19:27:43 +01:00
Rossen Stoyanchev 2ce03f34d9 Fix formatting on index.adoc 2018-11-05 13:16:04 -05:00
Rossen Stoyanchev 9280e32d5d Feature Github Wiki more prominently
Issue: SPR-17469
2018-11-05 13:12:18 -05:00
Juergen Hoeller 5cd525a2b0 Enforce use of ClassLoader.loadClass in case of temporary ClassLoader
Issue: SPR-17452
2018-11-05 17:44:46 +01:00
Juergen Hoeller 2ac4355ec0 ASM ClassReader leniently handles label offset mismatch (again)
Issue: SPR-17467
2018-11-05 17:44:23 +01:00
Juergen Hoeller a3cd7af72d Polishing 2018-11-05 12:27:35 +01:00
Juergen Hoeller 6a9f91081e Upgrade to Netty 4.1.31 and Undertow 2.0.15 2018-11-05 12:27:20 +01:00
Juergen Hoeller f65408f646 Avoid references to groovy-all artifact across all modules
Issue: SPR-17446
2018-11-05 12:27:07 +01:00
Juergen Hoeller 59fa647e2d StandardEvaluationContext supports concurrent variable modification
Issue: SPR-17448
2018-11-05 12:26:35 +01:00
Juergen Hoeller 0a7dcf14f9 Deprecate ReflectionUtils.invokeJdbcMethod (for removal in 5.2)
Issue: SPR-17464
2018-11-05 12:26:20 +01:00
Stephane Nicoll 86846507e2 Remove trailing whitespace 2018-11-05 07:44:36 +01:00
Rossen Stoyanchev 133b8b0b5a Polish 2018-11-02 16:19:53 -04:00
Juergen Hoeller dc8f6f7177 Upgrade to CGLIB 3.2.9
This CGLIB upgrade literally does not make any difference to Spring users since its only purpose is a default ASM7 declaration in its AsmApi class (which we patched a month ago). We nevertheless leave our local AsmApi copy in place for the time being, allowing for an individual upgrade of the declared ASM API version in the future.

Issue: SPR-17267
Issue: SPR-17371
2018-11-02 19:55:13 +01:00
Rossen Stoyanchev c2b55e60cd Fix failing test
After the fix #658c7f for lenient parsing of dates, the error message
raised uses an HttpHeaders-formatted date. As a result the test
verifying the error message fails in the beginning of the month between
1-9 because it's formatted slightly differently.
2018-11-01 15:27:39 -04:00
Rossen Stoyanchev 48654c6483 Polish 2018-11-01 14:21:00 -04:00
Stephane Nicoll 47aec50917 Merge pull request #2004 from MasterEx
* pr/2004:
  Polish reference documentation
2018-11-01 10:22:27 +09:00
Periklis Ntanasis 6f36514369 Polish reference documentation
Issue: SRP-17453

Closes gh-2004
2018-11-01 10:21:48 +09:00
Rossen Stoyanchev 9da9bb9652 Fix since tag 2018-10-31 10:56:17 -04:00
Rossen Stoyanchev 3f42e16172 Increase sharing among InvocableHandlerMethod variants
In particular between reactive and non-reactive web variants, but
also preparing for a messaing reactive variant.
2018-10-30 17:15:09 -04:00
Rossen Stoyanchev 7c36549e3a Consistent InvocableHandlerMethod implementations
This commit makes the 3 existing InvocableHandlerMethod types more
consistent and comparable with each other.

1. Use of consistent method names and method order.

2. Consistent error formatting.

3. Explicit for loops for resolving argument values in webflux variant
because that makes it more readable, creates less garabage, and it's
the only way to bring consistency since the other two variants cannot
throw exceptions inside Optional lambdas (vs webflux variant which can
wrap it in a Mono).

4. Use package private HandlerMethodArgumentComposite in webflux
variant in order to pick up the resolver argument caching that the
other two variants have.

5. Polish tests.

6. Add missing tests for messaging variant.
2018-10-30 16:36:01 -04:00
Juergen Hoeller 991e9f4269 Upgrade to Joda-Time 2.10.1 2018-10-29 18:33:36 +01:00
Brian Clozel 2a41067a17 Update reactive streams spec URL in ref docs 2018-10-29 15:10:03 +01:00
Sam Brannen 42a95b8f35 Fix typo and polish 2018-10-29 14:47:20 +01:00
Rossen Stoyanchev 76d203fc61 Merge pull request #2001 from tamkylet/readme-writing-edit 2018-10-29 09:28:18 -04:00
Rossen Stoyanchev 9fc7bfde99 Polish README 2018-10-29 09:27:19 -04:00
tamkylet a999c4aa7e readme writing changes to improve readability 2018-10-29 09:18:45 -04:00
Spring Buildmaster a82d726f76 Next Development Version 2018-10-29 10:33:23 +00:00
Brian Clozel 5fb8dec50e Upgrade to Reactor Californium-SR2 2018-10-29 10:31:29 +01:00
Juergen Hoeller dc1e3b4628 Exclude FactoryBean implementation methods on CGLIB proxies as well
Issue: SPR-17374
2018-10-27 14:36:56 +02:00
Rossen Stoyanchev fa096dc60f Minor refactoring in StringDecoder + polish
1. Avoid re-creating the List with delimited byte arrays on every
request if using the default delimiters which don't vary by charset.

2. Replace flatMap with flatMapIterable for splitOnDelimiter.

3. Avoid going through DataBufferUtils#join, and unnecessarily creating
Flux from the List, since the join method needs a list anyway.
2018-10-26 13:24:53 -04:00
Brian Clozel fc957e95bb Configure ResourceUrlProvider in WebFlux
Prior to this commit, no `ResourceUrlProvider` was configured
in WebFlux (no bean was contributed by the WebFlux infrastructure).
Also, several `ResourceTransformer` instances that extend the
`ResourceTransformerSupport` base class need a `ResourceUrlProvider`
to resolve absolute URLs when rewriting resource URLs. At this point,
no `ResourceUrlProvider` was configured and they could only resolve
relative URLs.

This commit contributes a new `ResourceUrlProvider` to the WebFlux
configuration; this bean can be reused by the WebFlux infrastructure and
application code.

This also automatically configure this shared `ResourceUrlProvider`
instance on the resource chain where needed.

Issue: SPR-17433
2018-10-26 13:56:00 +02:00
Juergen Hoeller 3fee8cb625 Polishing 2018-10-26 11:43:46 +02:00
Arjen Poutsma e68bf010da Fix memory leak for ServerSentEventHttpMessageWriter
Issue: SPR-17419
2018-10-26 11:36:05 +02:00
Juergen Hoeller f32e1bcbe3 Polishing 2018-10-26 11:07:29 +02:00
Vikash Tiwari 8df3fd3f1d Remove unnecessary null check 2018-10-26 10:17:04 +02:00
Rossen Stoyanchev 4faee165db Documentation updates for working with DataBuffers
Issue: SPR-17409
2018-10-25 23:46:39 -04:00
Rossen Stoyanchev 8223ed38c8 Polish Reactive Core and Codecs sections
Issue: SPR-17409
2018-10-25 23:45:09 -04:00
Juergen Hoeller 3681d58e98 SpringBeanContainer leniently applies fallback on any BeansException
Issue: SPR-17430
2018-10-25 18:06:06 +02:00
Brian Clozel 2146e13787 Fix absolute paths when transforming resources
Prior to this commit, `ResourceTransformerSupport.toAbsolutePath`
would call `StringUtils.applyRelativePath` in all cases. But this
implementation is prepending the given path even if the relative path
starts with `"/"`.

This commit skips the entire operation if the given path is absolute,
i.e. it starts with `"/"`.

Issue: SPR-17432
2018-10-25 16:42:47 +02:00
Juergen Hoeller a61d107606 Asciidoc revision (chapter declarations, javadoc references, etc) 2018-10-25 15:15:58 +02:00
Juergen Hoeller 67bd3f670f Upgrade to AspectJ 1.9.2, Rome 1.11.1, OpenPDF 1.2.5, POI 4.0 2018-10-25 15:15:47 +02:00
Arjen Poutsma 95542778ad Fix MultipartHttpMessageWriterTests
Issue: SPR-17419
2018-10-25 12:13:03 +02:00
Arjen Poutsma 7a8a2d9608 Fix HttpMessageWriter tests
Issue: SPR-17419
2018-10-25 12:13:03 +02:00
Arjen Poutsma 256a6fe6cb Fix memory leak for ServerSentEventHttpMessageWriter
This commit fixes a memory leak in ServerSentEventHttpMessageWriter
that occurs when the input stream contains an error. Test added as well.

Issue: SPR-17419
2018-10-25 12:13:03 +02:00
Brian Clozel d28b73ad22 Rollback to Asciidoctor 1.5.8 2018-10-25 10:12:01 +02:00
Juergen Hoeller 56a8526f3c Upgrade to Checkstyle 8.14 2018-10-25 00:29:08 +02:00
Juergen Hoeller fb2565f2fe Upgrade plugins to Kotlin 1.2.71 and Asciidoctor 1.5.9 2018-10-24 23:57:33 +02:00
Brian Clozel 50a4769162 Fix ResourceUrlEncodingFilter lifecycle
Prior to this commit, the `ResourceUrlEncodingFilter` would wrap the
response and keep a reference to the request. When
`HttpServletResponse.encodeURL` is later called during view rendering,
the filter looks at the request and extracts context mapping information
in order to resolve resource paths in views.

This approach is flawed, when the filter is used with JSPs - if the
request is forwarded to the container by the `InternalResourceView`,
the request information is overwritten by the container. When the view
is being rendered, the information available in the request is outdated
and does not allow to correctly compute that context mapping
information.

This commit ensures that that information is being extracted from the
request as soon as the `ResourceUrlProvider` is set as a request
attribute.

Issue: SPR-17421
2018-10-24 21:18:57 +02:00
Juergen Hoeller ffa032e78f Polishing 2018-10-24 20:46:26 +02:00
Juergen Hoeller f0f1979fc5 Support for @RequestParam Map declared with MultipartFile/Part values
Issue: SPR-17405
2018-10-24 20:44:58 +02:00
Arjen Poutsma 488a1d4561 Review DataBufferUtils for cancellation memory leaks
Issue: SPR-17408
2018-10-24 16:28:21 +02:00
Arjen Poutsma 611019b73c Fix memory leak for Jaxb2XmlEncoder
This commit fixes a memory leak in Jaxb2XmlEncoder that occurs when
the input stream contains an error. Test added as well.

Issue: SPR-17419
2018-10-24 16:28:21 +02:00
Arjen Poutsma 11a017d8b7 Add error stream tests for ProtobufEncoderTests
Issue: SPR-17419
2018-10-24 16:28:21 +02:00
Rossen Stoyanchev 2439f87a48 Add onDiscard hook to Jetty client request
The flatMap operation in writeAndFlushWith could buffer internally.

Issue: SPR-17424
2018-10-23 21:41:27 -04:00
Rossen Stoyanchev 2ba5ded306 Polish Jetty reactive HttpClient connector 2018-10-23 21:34:42 -04:00
Rossen Stoyanchev 2eae37dde0 Update ref docs on ResponseEntity and reactive types
Issue: SPR-17400
2018-10-23 16:42:31 -04:00
Rossen Stoyanchev 42b7c5a79b Upgrade to Californium snapshots
Towards Californium SR2 to confirm fix for SPR-17306.
2018-10-23 15:52:05 -04:00
Juergen Hoeller 1cb08f5782 Upgrade to RxJava 2.2.3 and Undertow 2.0.14 2018-10-23 19:34:39 +02:00
Rossen Stoyanchev feeec344e5 ForwardedHeaderFilter works with Servlet FORWARD
Issue: SPR-16983
2018-10-23 11:53:46 -04:00
Arjen Poutsma 51bb96db47 Fix ResourceRegionEncoder and tests
Fix ResourceRegionEncoder so that it checks for resource existance
before writing boundaries. Also defer data buffer allocation until
necessary.

Issue: SPR-17419
2018-10-23 16:41:48 +02:00
Arjen Poutsma eac9e66c46 Fix memory leak when canceling read from AsynchronousFileChannel
This commit fixes a memory leak that occurs when reading from a
AsynchronousFileChannel, and cancelling the subscription.

Issue: SPR-17419
2018-10-23 16:41:48 +02:00
Brian Clozel 28cf7b728f Relax handler supports checks in RequestMappingHandlerAdapter
Issue: SPR-17420
2018-10-22 20:31:41 +02:00
Juergen Hoeller f68b1e0bce Upgrade to Objenesis 3.0.1
Issue: SPR-17372
2018-10-22 18:54:18 +02:00
Juergen Hoeller c3c2383b0d Align serialVersionUID declaration with ASM master
Issue: SPR-17267
2018-10-22 18:53:23 +02:00
Rossen Stoyanchev 41e6aa6de2 Restore log level for resolved exceptions
The fix for SPR-17178 switched from debug to warn level warning for
all sub-classes of AbstractHandlerExceptionResolver where the request
concerned the DefaultHandlerExceptionResolver only.

This commit restores the original DEBUG level logging that was in
AbstractHandlerExceptionResolver from before SPR-17178. In addition
DefaultHandlerExceptionResolver registers a warnLogCategory by default
which enables warn logging and hence fulfilling the original goal
for SPR-17178.

Issue: SPR-17383
2018-10-22 12:13:18 -04:00
Rossen Stoyanchev de453ace86 Revert "@ExceptionHandler methods logs at DEBUG level again"
This reverts commit 162112.

Instead we'll go for a bigger rollback of the change from SPR-17178 so
that only DefaultHandlerExceptionResolver does warn logging by default.

Issue: SPR-17388
2018-10-22 11:46:02 -04:00
Arjen Poutsma 0176d362be Add error stream tests for Jackson2JsonDecoder
Issue: SPR-17418
2018-10-22 16:00:32 +02:00
Arjen Poutsma 946ec7e22e Fix memory leaks in ProtobufDecoder
Issue: SPR-17418
2018-10-22 16:00:32 +02:00
Arjen Poutsma a64e85fcc6 Javadoc 2018-10-22 16:00:32 +02:00
Arjen Poutsma 47fe05066d Add error stream tests for Jaxb2XmlDecoderTests
Issue: SPR-17418
2018-10-22 16:00:32 +02:00
Arjen Poutsma a37efc9881 Add error stream tests for XmlEventDecoder
Issue: SPR-17418
2018-10-22 16:00:32 +02:00
Arjen Poutsma f738273486 Fix buffering issue in StringDecoder
Issue: SPR-17418
2018-10-22 16:00:32 +02:00
Juergen Hoeller 1c67ef4bed ConfigurableWebApplicationContext needed for contextClass parameter
Issue: SPR-17414
2018-10-22 15:14:08 +02:00
Juergen Hoeller dd2ce20687 SpringFactoriesLoader tolerates whitespace around class names
Issue: SPR-17413
2018-10-22 15:13:58 +02:00
Juergen Hoeller 83a54dba7e Avoid stacktrace if root resource is not resolvable in file system
Issue: SPR-17417
2018-10-22 15:13:49 +02:00
Brian Clozel 85262a7932 Fix Map.put contract for HeadersAdapter impl.
This commit fixes the `Map.put` contract for both Reactor Netty and
Tomcat specific `HeadersAdapter` implementations.

Issue: SPR-17415
2018-10-22 14:53:14 +02:00
Rossen Stoyanchev 862dd23975 Server adapters release buffers on error/cancel
Review and update Servlet and Undertow adapters to release any data
buffers they be holding on to at the time of error or cancellation.

Also remove onDiscard hooks from Reactor and Undertow request body.
For Reactor we expect it to be handled. For Undertow there isn't
any Reactor Core upstream for the callback to be useful.

Issue: SPR-17410
2018-10-19 21:45:14 -04:00
Arjen Poutsma 149d416e8e Review DataBufferUtils for error/cancellation memory leaks
Issue: SPR-17408
2018-10-19 12:16:18 +02:00
Rossen Stoyanchev 1621125ccf @ExceptionHandler methods logs at DEBUG level again
Issue: SPR-17383
2018-10-18 22:49:47 -04:00
Juergen Hoeller a0b42a3dfd Upgrade to Hibernate ORM 5.3.7 2018-10-18 18:05:26 +02:00
Juergen Hoeller 5b5f7190bf Declare InvocableHandlerMethod.getMethodArgumentValues as protected
Issue: SPR-17404
2018-10-18 18:05:07 +02:00
Juergen Hoeller 7ff938b3ef LogFormatUtils.formatValue leniently handles toString() exceptions
Issue: SPR-17397
2018-10-18 18:04:32 +02:00
Juergen Hoeller da23505e94 Clarify FactoryBean initialization effect in getBeanNamesForAnnotation
Issue: SPR-17392
2018-10-18 18:04:04 +02:00
Juergen Hoeller 00b7782b5f Clarify destruction order effect in @DependsOn annotation javadoc
Issue: SPR-17384
2018-10-18 18:03:44 +02:00
Arjen Poutsma 6f0c869afe Polishing 2018-10-18 17:16:34 +02:00
Arjen Poutsma 857b600675 Fix memory leak in AbstractJackson2Encoder
Fixes a DataBuffer memory leak where a created buffer was not release
if Jackson threw an exception.
2018-10-18 17:09:53 +02:00
Arjen Poutsma d303c8a20f Store PathPattern instead of String in attributes
This commit changes the attributes stored under
RouterFunctions.MATCHING_PATTERN_ATTRIBUTE and
HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE from a String to a
PathPattern, similar to what annotated controllers set.

Issue: SPR-17395
2018-10-18 14:48:45 +02:00
Brian Clozel ab8310b5f3 Fix HeadersAdapters implementations
This commit harmonizes the `HeadersAdapter` implementations across all
supported servers with regards to the `get(Object key)` contract; some
server implementations are not sticking to a `Map`-like contract and
return empty `List` instead of `null` when a header is not present.

This also fixes the `size()` implementations to reflect the number of
header keys, as some implementations consider multiple values for the
same header as different entries.

Issue: SPR-17396
2018-10-18 11:18:29 +02:00
Rossen Stoyanchev fdaceeb6c9 Remove checks and updates to transfer-encoding
Issue: SPR-17393
2018-10-16 16:49:46 -04:00
Sebastien Deleuze 2c5a1af236 Leverage Java reflection for Kotlin enums
As discussed in KT-25165, from a Kotlin POV enum constructors
have no parameter, this is an "implementation detail"
required for running on the JVM, so it seems relevant to skip
Kotlin reflection in that case and just delegate to Java
reflection.

Issue: SPR-16931
2018-10-16 16:40:02 +02:00
Rossen Stoyanchev f885910887 Remove unused bom import too 2018-10-15 14:39:20 -04:00
Rossen Stoyanchev e14cf699c8 Remove unused dependencies from spring-messaging
Tomcat and Jetty integration tests were moved out of spring-messaging
a very long time ago (before 4.0), but the dependencies remained
unnoticed until now.
2018-10-15 14:04:15 -04:00
Juergen Hoeller 93bb78ec23 Avoid private bean classes in integration tests (for CGLIB on JDK 11)
Issue: SPR-16391
2018-10-15 12:26:38 +02:00
Spring Buildmaster b2bf5fe0f3 Next Development Version 2018-10-15 07:20:38 +00:00
Rossen Stoyanchev 423aa28ed5 HttpRange validates requested ranges
Issue: SPR-17318
2018-10-14 22:49:25 -04:00
Juergen Hoeller 50949415d7 Upgrade spring-test to Hibernate ORM 5.3.6 (for JDK 11 compatibility)
Issue: SPR-16391
2018-10-15 00:39:25 +02:00
Juergen Hoeller 608fd766cb Upgrade to Checkstyle 8.13, Groovy 2.5.3, Aalto XML 1.1.1 2018-10-15 00:01:45 +02:00
Juergen Hoeller 58b3af9475 Nullability fine-tuning and related polishing
Issue: SPR-17250
2018-10-14 23:29:46 +02:00
Juergen Hoeller 5f2d47a17e MethodValidationInterceptor excludes FactoryBean metadata methods
Issue: SPR-17374
2018-10-14 21:07:56 +02:00
Tomasz Nurkiewicz 2255d222e3 Fix punctuation in reference manual (#1992) 2018-10-13 11:44:49 +03:00
Rossen Stoyanchev ecd0d7f0f6 Complete initialization with bindToRouterFunction
Issue: SPR-17239
2018-10-12 17:11:35 -04:00
Juergen Hoeller 309e70a48e Separate factory method cache for introspection purposes
Issue: SPR-17358
Issue: SPR-8891
2018-10-12 22:53:50 +02:00
Rossen Stoyanchev 658c7f99d7 Lenient date parsing in HeadersResultMatchers
Rather than formatting the expected value, and be susceptible to
minor formatting differences (e.g. 01 vs 1 for day of month), parse the
actual header value leniently with HttpHeaders and compare time values.

Issue: SPR-17330
2018-10-12 15:41:42 -04:00
Rossen Stoyanchev c5ca56bd50 Polish 2018-10-12 12:15:45 -04:00
Stephane Nicoll 05830912a5 Merge pull request #1991 from Cikey
* pr/1991:
  Fix deprecated property in MBeanExporter documentation
2018-10-12 16:15:12 +02:00
Christian Kulpa 864d7eaf11 Fix deprecated property in MBeanExporter documentation
Closes gh-1991
2018-10-12 16:10:02 +02:00
Juergen Hoeller bfc5ad890e MockHttpServletRequest resets InputStream/Reader on setContent
Issue: SPR-17373
2018-10-12 16:00:31 +02:00
Juergen Hoeller b7e4a56e5c Mark PathResourceTests as deprecated (along with PathResource)
Issue: SPR-17320
2018-10-12 13:17:28 +02:00
Juergen Hoeller 0b2c482e29 Upgrade to Selenium HtmlUnit Driver 2.33 2018-10-12 13:17:14 +02:00
Juergen Hoeller dcf2861db5 Upgrade to Objenesis 3.0
Includes jarjar upgrade since jarjar 1.3 fails to properly relocate Objenesis 3.0 classes into org.springframework.objenesis package.

Issue: SPR-17372
2018-10-12 13:17:01 +02:00
Juergen Hoeller 5474995288 Exclude original AsmApi class from CGLIB repack jar
Issue: SPR-17371
2018-10-12 12:14:00 +02:00
Juergen Hoeller a2ae5f6972 Force CGLIB to always specify ASM7 for its visitors
Issue: SPR-17371
2018-10-12 12:01:50 +02:00
陈灵敏 4ee704cedf Supplier for timeout result in DeferredResult
Issue: SPR-17364
2018-10-11 20:26:01 -04:00
Rossen Stoyanchev 8df0bc88d2 Improve access to raw content in WebTestClient
If the content has not been consumed, cause it to be produced, and
wait for a certain amount of time before giving up, so the raw content
can be made available. This can occur when:

1) In a mock server scenario the Flux representing the client request
content is passed directly to the mock server request, but is never
consumed because of an error before the body is read.

2) Test obtains FluxExchangeResult (e.g. for streaming) but instead of
consuming the Flux, it calls getResponseBodyContent() instead.

Issue: SPR-17363
2018-10-11 20:25:56 -04:00
Rossen Stoyanchev c567e65eea WritetapConnector internal refactoring
Extract a common delegate class to share between the request and the
to wiretap a Publisher and record and buffer its data.

Preparation for SPR-17363.
2018-10-11 19:47:37 -04:00
Rossen Stoyanchev 050f44d75b Rename WebTestClientConnectorTests to match class name 2018-10-11 19:47:37 -04:00
Stephane Nicoll 60b5161fbe Upgrade to Reactor Californium-SR1 2018-10-11 20:30:43 +02:00
Brian Clozel 10d5de7d63 Handle special headers in Tomcat and Jetty
This commit adds special processing of some HTTP response headers in
Jetty and Tomcat; they both consider some headers like  "Content-Length"
as specific and require explicit calls on the `HttpServletResponse`
itself on top of setting the HTTP response header.

Issue: SPR-17250
2018-10-11 14:37:14 +02:00
Arjen Poutsma 8de5c05af0 Set BEST_MATCHING_HANDLER_ATTRIBUTE in WebFlux.fn
SPR-17367
2018-10-11 13:44:06 +02:00
Brian Clozel f12c28e402 Avoid copying in DefaultServerHttpRequestBuilder
This commit avoids copying HTTP headers when mutating an HTTP request.
Instead, we're now unwrapping the `ReadOnlyHttpHeaders` (which is most
likely backed by the native request headers).

Issue: SPR-17250
2018-10-11 12:11:47 +02:00
Brian Clozel ce7278aaf4 Optimize HTTP headers management
Several benchmarks underlined a few hotspots for CPU and GC pressure in
the Spring Framework codebase:

1. `org.springframework.util.MimeType.<init>(String, String, Map)`
2. `org.springframework.util.LinkedCaseInsensitiveMap.convertKey(String)`

Both are linked with HTTP request headers parsing and response headers
writin during the exchange processing phase.

1) is linked to repeated calls to `HttpHeaders.getContentType`
within a single request handling. The media type parsing operation
is expensive and the result doesn't change between calls, since
the request headers are immutable at that point.

This commit improves this by caching the parsed `MediaType` for the
`"Content-Type"` request header in the `ReadOnlyHttpHeaders` class.
This change is available for both Spring MVC and Spring WebFlux.

2) is linked to insertions/lookups in the `LinkedCaseInsensitiveMap`,
which is the data structure behind `HttpHeaders`.
Those operations are creating a lot of garbage (including a lot of
`String` created by `toLowerCase`). We could choose a more efficient
data structure for storing HTTP headers data.

As a first step, this commit is focusing on Spring WebFlux and
introduces `MultiValueMap` implementations mapped by native HTTP headers
for the following servers: Tomcat, Jetty, Netty and Undertow.
Such implementations avoid unnecessary copying of the headers
and leverages as much as possible optimized operations provided by the
native implementations.

This change has a few consequences:

* `HttpHeaders` can now wrap a `MultiValueMap` directly
* The default constructor of `HttpHeaders` is still backed by a
`LinkedCaseInsensitiveMap`
* The HTTP request headers for the websocket HTTP handshake now need to
be cloned, because native headers are likely to be pooled/recycled by
the server implementation, hence gone when the initial HTTP exchange is
done

Issue: SPR-17250
2018-10-11 12:11:47 +02:00
volkovandr 61403e3bd3 Updated Javadoc: date format patterns SPR-17366 2018-10-11 10:52:32 +02:00
Brian Clozel cc172bcedc Upgrade to Reactor Californium SNAPSHOTs
Preparing for Californium-SR1
2018-10-11 10:46:01 +02:00
Juergen Hoeller e18149878c Upgrade to Mockito 2.23
Includes JSON-P 1.1.3.
2018-10-10 23:53:33 +02:00
Juergen Hoeller c89e3e6e0d Restore original factory method caching (addressing Boot regressions)
Issue: SPR-17358
2018-10-10 23:53:13 +02:00
Rossen Stoyanchev d05924165b Refactor FilterWebHandler and DefaultWebFilterChain
The chain is initialized once and re-used vs creating the "next" chains
on every request.
2018-10-10 14:33:51 -04:00
Stephane Nicoll 82a211fa96 Fix checkstyle violation 2018-10-10 10:45:08 +02:00
Stephane Nicoll 062805fcb3 Recursively process DeferredImportSelector properly
Previously, if a DeferredImportSelector was identified at a later stage
as part of processing the collected set of deferred imports, such
selector was processed as a regular import selector.

Semantically, it makes sense as we already are in the deferred phase at
this point and it doesn't make much sense to bother about the extra
contract.

However, Spring Framework 5 introduced the notion of Group that a
deferred import selector can define. When it does, the container has to
honour the contract of the Group rather than calling the simpler
ImportSelector parent contract.

This commit restructures the processing of such case. When a deferred
import selector is detected while processing deferred import selectors,
a group is created with only that selector and the group API is invoked.

Issue: SPR-17351
2018-10-10 10:19:11 +02:00
Juergen Hoeller 053820c4ff Polishing 2018-10-09 23:14:49 +02:00
Juergen Hoeller f662e3b85e BeanFactoryAnnotationUtils provides qualifiedBeansOfType method
Includes consistent upfront resolution of factory method annotations.

Issue: SPR-8891
2018-10-09 23:14:27 +02:00
Juergen Hoeller 44afed426a ObjectProvider stream consistently includes beans from parent context
Issue: SPR-17356
2018-10-09 23:14:19 +02:00
Juergen Hoeller 83909e6e1e Consistent exposure of empty attribute arrays in AnnotationMetadata
Issue: SPR-17347
2018-10-09 23:14:13 +02:00
Juergen Hoeller fdf340306d Defensively use Class.forName instead of ClassLoader.loadClass
Issue: SPR-17333
2018-10-09 23:14:05 +02:00
Juergen Hoeller d9e7253532 SpringBeanContainer exposes bean instance returned from initializeBean
Issue: SPR-17332
2018-10-09 23:13:58 +02:00
Juergen Hoeller 2b986af310 BasicAuthenticationInterceptor with HttpHeaders.setBasicAuth alignment
Issue: SPR-17326
2018-10-09 23:13:46 +02:00
Juergen Hoeller c8c0737ce7 AbstractApplicationContext.getApplicationListeners() exposes all statically registered listeners
Issue: SPR-17324
2018-10-09 23:13:37 +02:00
Juergen Hoeller 19f3347932 SpringBeanJobFactory supports autowiring through ApplicationContext
Issue: SPR-17323
2018-10-09 23:13:25 +02:00
Juergen Hoeller efdbddd358 Full alignment of spring-test vs spring-web MockCookie variants
Issue: SPR-17321
2018-10-09 23:13:18 +02:00
Juergen Hoeller cf3635b42d Resource.lastModified() propagates 0 value if target resource exists
Includes use of Files.getLastModifiedTime for NIO Paths, preservation of NIO-based resolution on createRelative, deprecation of PathResource, and consistent use of getContentLengthLong over getContentLength.

Issue: SPR-17320
2018-10-09 23:13:11 +02:00
Juergen Hoeller 1e0de072f9 Upgrade to ASM 7.0 beta release
Issue: SPR-17267
2018-10-09 23:13:02 +02:00
Rossen Stoyanchev bb5c8ed4e8 Correct Javadoc in ServletUriComponentsBuilder
Replace all method level comments related to forwaded headers, some
current and some outdated, with a single class-level comment.

Issue: SPR-17317
2018-10-09 16:51:41 -04:00
Rossen Stoyanchev c01f350abe Move MonoToListenableFutureAdapter to spring-core
This was a package private class in spring-messaging since 5.0, and was
recently made public in 5.1. This commit promotes it to spring-core
where it belongs next to all other ListenableFuture support classes.

Follow-up refactoring for SPR-17336
2018-10-09 16:26:24 -04:00
Rossen Stoyanchev 928c541401 Simplify MonoToListenableFutureAdapter
Collapse the package private AbstractMonoToListenableFutureAdapter into
its only sub-class MonoToListenableFutureAdapter. There is no need for
such an abstract class that makes it possible to adapt from one source
to a different target type. That's already covered by
ListenableFutureAdapter.

Follow-up refactoring for SPR-17336.
2018-10-09 15:22:19 -04:00
Rossen Stoyanchev bef22ec9b5 Consistent MonoToListenableFutureAdapter.cancel()
Issue: SPR-17336
2018-10-09 14:55:04 -04:00
Rossen Stoyanchev 29ff8a8d12 More defensive check for MockAsyncContext
Avoid automatically unwrapping the request in TestDispatcherServlet,
if we find the MockAsyncContext.

Issue: SPR-17353
2018-10-09 11:56:47 -04:00
Sebastien Deleuze af6a5566a3 Replace context by provider<T>() in Kotlin bean DSL
Spring Framework 5.1.0 exposed by mistake context in the Kotlin bean DSL
API in order to fix SPR-16269. Now that BeanFactory#getBeanprovider is
available, it should be exposed via a provider<Foo>() function in order
to provide a more clean API instead.

Issue: SPR-17352
2018-10-08 14:00:12 +02:00
Stephane Nicoll 635d2146db Merge pull request #1983 from nfadeev
* pr/1983:
  Fix bullet list layout
2018-10-07 13:46:13 +02:00
Mykola Fadieiev ccce61e2b2 Fix bullet list layout
Closes gh-1983
2018-10-07 13:45:46 +02:00
Rossen Stoyanchev 9630445253 Add sections on form and multipart codecs
Explain the need for consistent use of ServerWebExchange for access to
the parsed (and cached) form data or multipart data.

Issue: SPR-17291
2018-10-05 21:27:07 -04:00
Rossen Stoyanchev 1c90d481d5 Rename Motivation to Overview and restore sub-sections 2018-10-05 16:37:56 -04:00
Rossen Stoyanchev d16a710d13 Polish WebFlux codecs section in the docs 2018-10-05 16:36:19 -04:00
Rossen Stoyanchev 4d24503317 Restore sub-section headings in web content
Headings are optimized for how they appear in the left-hand side
navitation menu, with context provided by parent headings, and not
necessarily for how they read on their own.

At 2nd and 3rd level of nesting, which is where most headings are,
the wrapping becomes too distracting and the left-hand side navigation
sprawling.
2018-10-05 15:54:38 -04:00
Rossen Stoyanchev 1489457025 Restore calls to setLocale in MockHttpServletResponse
Issue: SPR-17284
2018-10-05 13:50:41 -04:00
Rossen Stoyanchev 9064ef59f9 Workaround for Synchronoss content-length limitation
Issue: SPR-17345
2018-10-05 12:12:49 -04:00
dmrachkovskyi 983bce125f Defer obtaining argument resolver default value
Issue: SPR-17338
2018-10-05 11:39:19 -04:00
Sam Hubbard 80e7819d6f Fix construction of NullSafeComparator in nullsLow
Previously, both nullsLow(Comparator<T>) and
nullsHigh(Comparator<T>) returned a
NullSafeComparator which treated nulls as being
high. This commit corrects this typo.
2018-10-05 13:20:28 +02:00
Stephane Nicoll cb4fa3795a Merge pull request #1979 from rupertw
* pr/1979:
  Fix formatting
2018-10-05 09:21:23 +02:00
www 9d5aced8c5 Fix formatting
Prefix the opening brace with a single space in some classes.
Replace tab character with space in javadoc of AttributeAccessor.
Also fix some other trivial formatting errors.

Closes gh-1979
2018-10-05 09:20:47 +02:00
Arjen Poutsma ff7ccf0d4e Only clear request attribute when different
With this commit, we now make sure that the attributes are not cleared
if they are same as the nested request.

Issue: SPR-17304
2018-10-04 16:50:11 +02:00
Arjen Poutsma 9975646ffb Add more RequestPredicate tests for attributes
This commit adds test for delegating request predicates that verify
whether the request attributes are properly restored when a delegate
fails.
2018-10-04 15:18:08 +02:00
Arjen Poutsma 38e5c01c3c Move negating RequestPredicate to RequestPredicates 2018-10-04 15:15:36 +02:00
Sebastien Deleuze 3ff5731429 Leverage ObjectProvider instead of autowired containers
In order to be able to leverage WebFlux configuration in a functional
way, WebHttpHandlerBuilder and RouterFunctionMapping should leverage
new ObjectProvider capabilities to get a sorted list of beans by type
instead of using autowired containers.

Issue: SPR-17327
2018-10-03 14:14:47 +02:00
Rossen Stoyanchev 1320fed7fe Use WebsocketOutbound#sendClose
Switch to using the sendClose method available since Reactor Netty 0.8
vs explicitly sending a CloseWebSocketFrame.

Related to SPR-17306, but does not address the root cause.
2018-10-02 09:37:32 -04:00
Sam Brannen e63bffcfa0 Introduce not-null precondition for MockCookie parsing 2018-10-02 13:07:20 +02:00
Sam Brannen 77205ca165 Polish MockCookie contribution
Issue: SPR-17321, #1974
2018-10-02 13:06:16 +02:00
Sam Brannen 31095f1d4e Move MockCookie parsing tests to correct class
Issue: SPR-17321, #1974
2018-10-02 12:43:17 +02:00
Sam Brannen 49bc746640 Polish MockCookie[Tests] 2018-10-02 12:41:07 +02:00
Michael Bell 1b8421c7fe Fix MockCookie parsing when attribute is omitted
Issue: SPR-17321, #1974
2018-10-02 06:18:45 -04:00
0xflotus 00353a073c fixed further typo 2018-10-01 21:48:49 +02:00
0xflotus 9fed4d0375 do you mean 'compose'? 2018-10-01 21:48:02 +02:00
0xflotus fc03707445 fixed ContentNegotiationConfigurer 2018-10-01 21:47:46 +02:00
Rossen Stoyanchev 7aa933437c Update links to http://java.net/jira 2018-10-01 12:01:28 -04:00
cac03 a8f4c596fd Fix trivial errors in data-access and core-aop in docs
Fix some syntax errors and typos

* Fix syntax error in core-aop docs which caused incorrect document
generation
* Surround @Pointcut values with quotation marks
* Replace 'I' with 'you' in the 'In the XML style I can declare the
first two pointcuts' sentence
* Fix compileror typo
* Remove redundant parenthesis
* Remove redundant commas
* Add 'can' to the 'You configure additional aspects in similar fashion'
sentence
* Replace 'You can annotation any method' with 'You can annotate any
method'
* Add space to 'non-recoverablepersistence'
* Replace 'we shows' with 'we show'
* Fix 'java.utils.Map' typo
* Add space to 'byusing'
* Add space to '`Lifecycle`by'
* Replace 'You cN' with 'You can'
* Replace 'encourag' with 'encourage'
2018-09-30 20:29:11 +02:00
Juergen Hoeller 058f027c5b Upgrade to Kotlin 1.2.71 and Netty 4.1.30 2018-09-29 18:58:13 +02:00
Juergen Hoeller 2ec41c8153 Polishing 2018-09-29 18:57:56 +02:00
Juergen Hoeller ad29f97a05 Polishing 2018-09-29 17:16:25 +02:00
Juergen Hoeller 9063e66c5d AbstractApplicationEventMulticaster pre-sorts singleton listeners
Issue: SPR-17307
2018-09-29 17:15:53 +02:00
Juergen Hoeller d6dfde3e5b LogFactoryService implements Commons Logging attribute methods
Issue: SPR-17302
2018-09-29 17:10:03 +02:00
Juergen Hoeller 333e327289 Revised javadoc for up-to-date constructor autowiring semantics
Issue: SPR-17299
2018-09-29 17:09:30 +02:00
Juergen Hoeller 255015fc6b Prepared for backport to 4.3.20 and 5.0.10
Issue: SPR-17295
2018-09-29 17:08:57 +02:00
Stephane Nicoll 6ff8cd8a9f Merge pull request #1967 from cac03
* pr/1967:
  Fix trivial errors in core-beans documentation
2018-09-25 14:21:45 -04:00
cac03 18c9e3e812 Fix trivial errors in core-beans documentation
Closes gh-1967
2018-09-25 14:21:13 -04:00
Juergen Hoeller a76b8deda5 Consistent copyright header and fine-tuned javadoc in test/web mocks
Issue: SPR-17295
2018-09-24 00:27:50 +02:00
Stephane Nicoll 7ca6b9f7d2 Fix copyright header 2018-09-23 17:26:40 +02:00
Juergen Hoeller 51ba322947 MockHttpServletRequest allows for removing registered header values
Includes full alignment of spring-test vs spring-web mock variants.

Issue: SPR-17295
2018-09-23 14:44:15 +02:00
Sam Brannen 9e2912e1dd Fix source code callouts in Reference Manual 2018-09-23 13:30:17 +02:00
Jay Bryant 6d226326c9 Editing pass for the integration and languages chapters.
I edited for spelling, puncutation, grammar, usage, and corporate voice. I also added a bunch of cross-references and links to the Javadoc.

I also corrected the rendering problems that I had accidentally created in previous commits (because I was adjusting headings and adding callouts to listings.
2018-09-21 23:27:03 +02:00
Sam Brannen 45ecfc6df9 Fix source code callouts in Reference Manual 2018-09-21 16:33:04 +02:00
Sam Brannen 59e87f950b Fix heading levels in Reference Manual 2018-09-21 16:32:06 +02:00
Sam Brannen 917bb53718 Fix formatting in Data Access chapter 2018-09-21 15:40:34 +02:00
Sam Brannen f7263abbf0 Fix broken links in Testing chapter 2018-09-21 15:29:49 +02:00
Spring Buildmaster 2a6da6a623 Next Development Version 2018-09-21 07:27:05 +00:00
Rossen Stoyanchev 92b3f2aee7 Document timeout configuration for Reactor HttpClient
Issue: SPR-17241
2018-09-20 10:38:28 -04:00
Juergen Hoeller 80e52de231 Upgrade to HtmlUnit 2.33 and Apache Johnzon 1.1.10 2018-09-20 11:55:50 +02:00
Juergen Hoeller 75627617c9 Ordered streams consistently operate on resolved bean instances
Issue: SPR-17272
2018-09-20 11:31:42 +02:00
Juergen Hoeller 3f5a7bbf04 Remove snapshot repository from build setup 2018-09-20 11:29:59 +02:00
Stephane Nicoll 093a863906 Upgrade to Gradle 4.10.2 2018-09-20 11:11:50 +02:00
Stephane Nicoll 90c29b3af3 Upgrade to Reactor Californium RELEASE 2018-09-20 10:49:07 +02:00
Sebastien Deleuze f7839675f6 Don't set role in Kotlin bean DSL unless specified
Issue: SPR-17275
2018-09-20 00:21:38 +02:00
Sebastien Deleuze 47d6e91227 Leverage non-default ctor support in Kotlin bean DSL
Since non-default constructors are now evaluated for autowiring,
there is no need anymore for setting autowiring mode or exposing
it in Kotlin bean DSL.

Issue: SPR-17292
2018-09-20 00:21:38 +02:00
Juergen Hoeller b6b880ce27 Polishing 2018-09-19 23:05:40 +02:00
Rossen Stoyanchev 7481d73456 WebFlux HandshakeInfo exposes the remoteAddress
Issue: SPR-17192
2018-09-19 16:53:57 -04:00
Rossen Stoyanchev 288a9ecd18 Exposes maxFramePayloadLength for Reactor Netty
Issue: SPR-16228
2018-09-19 16:28:57 -04:00
Juergen Hoeller a278e878e8 Upgrade to Jackson 2.9.7 2018-09-19 22:20:14 +02:00
Juergen Hoeller 082c524cbe Polishing 2018-09-19 22:19:49 +02:00
Juergen Hoeller d3c08552e9 Revisit GenericApplicationContext.registerBean constructor handling
Support for Kotlin primary constructor and non-default public constructors in addition to default instantiation, aligned with AnnotationConfigApplicationContext and model attribute processing.

Issue: SPR-17292
2018-09-19 22:19:43 +02:00
Juergen Hoeller 50c9542796 Prefer explicit "org.quartz.scheduler.instanceName" over bean name
Issue: SPR-16884
2018-09-19 22:19:28 +02:00
Rossen Stoyanchev a6f9c4c599 LogFormatUtils is declared abstract 2018-09-19 11:54:05 -04:00
Sam Brannen af58263744 Fix formatting in Testing chapter 2018-09-19 16:37:50 +02:00
Arjen Poutsma 8a4835368d Use doOnDiscard to free internally queued data buffers
Issue: SPR-17246
2018-09-19 13:24:45 +02:00
Juergen Hoeller 1756f83701 Defensively expect concurrent registration of BeanPostProcessors
Declaring beanPostProcessors (and also embeddedValueResolvers) as CopyOnWriteArrayList prevents ConcurrentModificationExceptions in case of concurrent registration/access attempts.

Issue: SPR-17286
2018-09-18 21:25:36 +02:00
Brian Clozel d94e9225f4 Switch to Reactor Californium SNAPSHOTs 2018-09-18 18:50:37 +02:00
Juergen Hoeller 65ca7f4909 Polishing 2018-09-18 17:19:37 +02:00
anton0xf 0204b082b1 Fix jdbc template error messages generation 2018-09-18 17:17:47 +02:00
Sam Brannen 5b25aaacb6 Apply consistent formatting in Testing chapter
This commit also fixes a few typos and broken links.
2018-09-18 16:42:09 +02:00
Sam Brannen 6431b25045 Revise Testing chapter for technical correctness
This commit also fixes some broken links and typos.
2018-09-18 15:47:37 +02:00
Sam Brannen 745aeda581 Fix typos in testing sections of Reference Manual 2018-09-18 15:44:36 +02:00
Juergen Hoeller c634b2fae7 ResolvableType-based resolution uses BeanNamesByType cache if possible
Issue: SPR-17282
2018-09-18 15:30:43 +02:00
Jay Bryant 00a3afcda8 Edit the Web chapter of the reference documentation
I edited for spelling, punctuation, grammar, usage,
and corporate voice. I also added links and cross-references.
2018-09-18 11:37:48 +02:00
Jay Bryant b29a278b2a Edit Data Access part of the reference documentation
I edited the Data Access chapter for spelling, punctuation,
grammar, usage, corporate voice, and clarity.

I also added links and cross-references.
2018-09-18 11:37:12 +02:00
Jay Bryant 95ff22cb7e Edit the testing part of the reference documentation
I edited for spelling, punctuation, grammar, usage,
and corporate voice.

I also added cross-references and links to the Javadoc.
2018-09-18 11:36:23 +02:00
Jay Bryant 395e3d008c Edit the core content reference documentation
I edited for the usual stuff: spelling, punctuation,
grammar, formatting, usage, and voice.
2018-09-18 11:35:33 +02:00
Brian Clozel d0ada5653f Polish
See: SPR-17054
2018-09-18 11:20:33 +02:00
Juergen Hoeller 0948edb39d Nested configuration class introspection check on concrete class
Issue: SPR-16839
2018-09-17 19:09:55 +02:00
Juergen Hoeller c8869d99f5 Deprecate autowire attribute on @Bean annotation
Issue: SPR-17281
2018-09-17 19:09:21 +02:00
Juergen Hoeller 69e8bcdf40 Checkstyle updates from ASM master
Issue: SPR-17267
2018-09-17 19:09:07 +02:00
Juergen Hoeller c385a1de83 Polishing 2018-09-17 15:17:39 +02:00
Arjen Poutsma 88ab911cf1 Provide matched pattern information in WebFlux fn
This commit stores the first matching path pattern in the attribute
`RouterFunctions.MATCHING_PATTERN_ATTRIBUTE`.

Issue: SPR-17098
2018-09-17 14:50:05 +02:00
Juergen Hoeller 51f7a3e40f Polishing 2018-09-17 14:26:56 +02:00
Juergen Hoeller 34663300a6 Avoid regex pattern matching for simple String replacement steps
Issue: SPR-17279
2018-09-17 14:22:19 +02:00
Simon Bowring cc87fbcb7f Fix javadoc comments to match behaviour 2018-09-17 12:25:39 +02:00
Sebastien Deleuze c4aea626fe Update Kotlin bean DSL with new BeanDefinition methods
Issue: SPR-17275
2018-09-17 12:01:33 +02:00
Arjen Poutsma a680880a9b Restore attributes for failed AND/OR request predicates
This commit restores the attributes when either of the predicates in
an AND/OR conjunction is false.

Issue: SPR-17210
2018-09-17 10:34:52 +02:00
Juergen Hoeller 8e83f140d4 Polishing 2018-09-15 00:17:17 +02:00
Rossen Stoyanchev db8e9eafb2 Add LogFormatUtils
1. Helper method to eliminate duplication in formatting (de-)serialized
   values for logging introduced with prior commit #e62298.

2. Helper method for TRACE vs DEBUG logging with different details.

Issue: SPR-17254
2018-09-14 18:06:46 -04:00
Juergen Hoeller 41d4cb5cbf Ordered stream access on ObjectProvider with strong order guarantees
Issue: SPR-17272
2018-09-14 23:56:25 +02:00
Rossen Stoyanchev 12240c7524 Apply formatValue to a few remaining places
Issue: SPR-17254
2018-09-14 12:37:00 -04:00
Rossen Stoyanchev e62298eaad Truncate logged encoded and decoded values if necessary
At DEBUG show up to 100 chars, at TRACE show full formatted value.

Note that the formatValue helper method is duplicated a number of times
in this commit. A utility method will likely be added in spring-core
through an extra commit.

Issue: SPR-17254
2018-09-14 12:20:03 -04:00
Juergen Hoeller 66c66baa8f Upgrade to Rhino 1.7.10
Includes reordering of web dependency declarations.
2018-09-14 14:03:53 +02:00
Rossen Stoyanchev cf9641686b StompSubProtocolHandler allows version 1.0
Issue: SPR-17258
2018-09-13 20:59:22 -04:00
Juergen Hoeller 97cea7f36e BeanDefinition interface exposes initMethodName and destroyMethodName
Also includes setters for role and description.

Issue: SPR-17275
2018-09-13 20:24:36 +02:00
Juergen Hoeller 77887ef739 BeanValidationPostProcessor validates singleton target behind proxy
Issue: SPR-17273
2018-09-13 20:24:27 +02:00
Juergen Hoeller cbc0fad961 Upgrade to Kotlin 1.2.70
Includes Hibernate ORM 5.1.16 and Hibernate Validator 6.0.13.
2018-09-13 18:23:42 +02:00
Juergen Hoeller 65c8fa400f Consistent ordered list access and lazy streaming for ObjectProvider
Includes fallback match for collection/map dependency if qualified.

Issue: SPR-17272
Issue: SPR-17197
2018-09-13 18:23:19 +02:00
Sebastien Deleuze 068565172e Add a BeanFactory#getBeanProvider Kotlin extension
Issue: SPR-17274
2018-09-13 16:53:28 +02:00
Arjen Poutsma cde677a1f4 Fixed DefaultDataBuffer.toString() 2018-09-13 16:12:13 +02:00
Pascal Schumacher 184340ff8e Remove duplicate blank in log message of ExecutorConfigurationSupport#initialize
(obvious fix)
2018-09-12 21:32:43 +02:00
Juergen Hoeller 9cb8b4bb0a Upgrade to Gradle 4.10.1
Issue: SPR-17155
2018-09-12 17:30:19 +02:00
Juergen Hoeller b6d32ef55f Bean definition DSL generates unique bean names for bean classes
Issue: SPR-17242
2018-09-12 14:59:10 +02:00
Juergen Hoeller b83bc39ecd Restrict nested configuration class introspection to component types
Issue: SPR-16839
2018-09-12 14:02:45 +02:00
Juergen Hoeller 45936f0ddd ClassReader revision from ASM master
Issue: SPR-17267
2018-09-12 12:26:29 +02:00
Johnny Lim 43a814b070 Remove duplicate assertions in AsyncExecutionTests 2018-09-11 17:19:32 +02:00
Sam Brannen bffa4b88af Upgrade to JUnit 5.3.1
Issue: SPR-17129
2018-09-11 15:57:30 +02:00
Juergen Hoeller dcac30c41c Upgrade to Tomcat 9.0.12 and SnakeYAML 1.23 2018-09-11 14:57:31 +02:00
Arjen Poutsma f35f7db29b Removed deprecated methods. 2018-09-11 13:36:44 +02:00
Arjen Poutsma 09af706af6 Use concatWith instead of mergeWith 2018-09-11 13:36:44 +02:00
Arjen Poutsma 1a0522b805 DataBufferUtils does not release DataBuffer on error cases
This commit makes sure that in DataBufferUtils.write, any received data
buffers are returned as part of the returned flux, even when an error
occurs or is received.

Issue: SPR-16782
2018-09-11 13:36:44 +02:00
Juergen Hoeller 1da4d504c4 Upgrade to ASM master (7.0 beta) and CGLIB 3.2.8
Issue: SPR-17267
2018-09-11 13:10:45 +02:00
Juergen Hoeller e47355078c Correct linkplain javadoc in BufferingClientHttpRequestFactory
Issue: SPR-17261
2018-09-10 12:36:40 +02:00
Juergen Hoeller 28208310dc Unit test with assertion for merged query params
Issue: SPR-17256
2018-09-10 12:36:07 +02:00
Juergen Hoeller c06b9525ac UriComponentsBuilder copies query params through MultiValueMap.addAll
Issue: SPR-17256
2018-09-10 11:31:37 +02:00
Juergen Hoeller e49896d95f Upgrade to Mockito 2.22, XMLUnit 2.6.2, JavaMail 1.6.2
Also includes Apache Johnzon 1.1.9.
2018-09-10 10:52:24 +02:00
Juergen Hoeller 6c487f7799 Revise ServletUriComponentsBuilder javadoc
Issue: SPR-17255
2018-09-07 18:11:18 +02:00
figueroaRicardo aa848d54ff Fix typo on javadoc
`ForwardedHeaderFilter` instead of `ForwardedHeaderFiller`
2018-09-07 18:00:06 +02:00
Juergen Hoeller 3abebb3799 Polishing 2018-09-07 13:23:22 +02:00
Juergen Hoeller 87fac79b90 Upgrade to RxJava 2.2.2 2018-09-07 12:58:20 +02:00
Juergen Hoeller 90a4740279 Polishing 2018-09-07 12:56:53 +02:00
Juergen Hoeller c803ad7998 ConfigurationClassParser consistently uses ClassUtils.forName
Issue: SPR-17253
2018-09-07 12:56:23 +02:00
Juergen Hoeller 84ec382201 XMLEventReader.getElementText() properly checks for start element
Issue: SPR-17233
2018-09-07 12:56:15 +02:00
Sebastien Deleuze 8d45e3e7ef Fix Kotlin inner class nested configuration handling
Before this commit, Kotlin inner class nested configuration
handling thrown an IndexOutOfBoundsException due to bogus filtering
of its constructor parameter reference to an instance of the outer
class.

This commit keep constructor parameter of type INSTANCE in order to
throw a more meaningful NoSuchBeanDefinitionException.

Issue: SPR-17222
2018-09-07 11:39:30 +02:00
Brian Clozel c8627c05ed Upgrade to Reactor Californium RC1 2018-09-07 09:10:48 +02:00
Rossen Stoyanchev f30d19b724 Disable Jackson's buffer recyling feature for WebFlux
Issue: SPR-17193
2018-09-06 16:20:03 -04:00
Rossen Stoyanchev 2163fa94a7 Fix initialization issue in ReactorResourceFactory
Follow-up on recent commit #d537a1c.

Issue: SPR-17243
2018-09-06 15:16:01 -04:00
Sam Brannen f55a6051df Document default embedded value resolver support for property
placeholders

Spring 4.3 introduced support for registering a default embedded value
resolver for the default environment, in case of none having been
registered through post-processors (like PropertyPlaceholderConfigurer
and PropertySourcesPlaceholderConfigurer. However, the existing
documentation – stating that a static
PropertySourcesPlaceholderConfigurer bean is required in order for
values coming from @PropertySource declarations to be honored – was not
updated to reflect the change.

This commit addresses this by updating the JavaDoc for @Configuration
and @PropertySource accordingly

Issue: SPR-17212
2018-09-06 18:36:49 +02:00
Sam Brannen c450f8dd82 Revert "PoC: migrate from JUnit 4 to JUnit Jupiter Assertions"
This reverts commit fd352b84b3, and the
PoC will be moved to a feature branch.
2018-09-06 15:58:58 +02:00
Sam Brannen fd352b84b3 PoC: migrate from JUnit 4 to JUnit Jupiter Assertions 2018-09-06 14:36:19 +02:00
Rossen Stoyanchev 8658a357c8 Upgrade to Californium snapshots 2018-09-05 21:49:33 -04:00
Rossen Stoyanchev d537a1cfb4 Refine ReactorResourceFactory
1. Rename globalResources to useGlobalResources.
2. Use of global resources is mutually exlusive with explicit config.
3. Allow Consumer<HttpResources> to configure global resources.
4. Allow ConnectionProvider + LoopResources Supplier to customize
   creation and initialization.
5. Do not manage externally provided ConnectionProvider + LoopResources
   instances.

Issue: SPR-17243
2018-09-05 21:17:04 -04:00
Rossen Stoyanchev 3302798e2f Use random id for WebSocket sessions
Issue: SPR-17228
2018-09-05 19:48:28 -04:00
Toshiaki Maki d570f82456 Use long for expires and lastModified in HeaderAssertions
This commit changes the type of parameters so that HeaderAssertions
can assert expires and lastModified properly.

Issue: SPR-17194
2018-09-05 17:16:14 -04:00
Andy Clement f87a37fd0d Fix SpEL compilation for non trivial elvis operand
Issue: SPR-17214
2018-09-05 09:41:13 -07:00
Sebastien Deleuze 48c660fa41 Add support for empty router in RouterFunctionDsl
Issue: SPR-17247
2018-09-05 16:53:59 +02:00
Sebastien Deleuze f8a0e3d084 Support RenderingResponse in RouterFunctionDsl
Issue: SPR-17244
2018-09-05 16:46:12 +02:00
Arjen Poutsma 259b2ca5f4 Added tests for errors in the source stream
This commit adds decoder/message-reader tests for errors in
the source data buffer publisher. Because the tests extend
AbstractDataBufferAllocatingTestCase, they also check whether
the buffers that precede the error in the stream are properly
released.

Issue: SPR-17025
2018-09-05 11:08:07 +02:00
Arjen Poutsma 196c0adf47 Fixed DataBufferUtils.join leak for error in source
This commit fixes an issue where DataBufferUtils.join() would not
release databuffers that preceded an error signal.

Issue: SPR-17025
2018-09-05 11:07:57 +02:00
Juergen Hoeller 3067682347 Upgrade to Hibernate ORM 5.3.6 and OpenPDF 1.2.2 2018-09-04 23:02:35 +02:00
Brian Clozel 7041e5e8e3 Upgrade to Jetty 9.4.12.v20180830 2018-09-04 22:13:37 +02:00
Brian Clozel 1bdbc7bdef Optimize for Flux to/from Mono conversions
This commit optimizes Flux <-> Mono conversions in our codebase by
avoiding to hide that conversion from Reactor.

This tries to keep conversions sequentially so that they can be detected
by Reactor and optimized. In Spring WebFlux, this means keeping the
conversions at the edges of a method implementation (right when getting
an input parameter, and before returning it as a result). If those
conversions are made between other operators, Reactor might not be able
to detect those conversions and optimize them.

Issue: SPR-17203
2018-09-04 16:42:46 +02:00
Sam Brannen bff2d2cc85 Polishing 2018-09-04 14:47:37 +02:00
Korovin Anatoliy ab086f4225 Fix fragile tests for asynchronous events
This commit introduces a dependency on the Awaitility assertion
framework and makes use of asynchronous assertions in order to make
tests for asynchronous events more robust.

Issue: SPR-17211
2018-09-04 14:20:05 +02:00
Sam Brannen 326895246d Polishing 2018-09-04 13:55:22 +02:00
Stephane Nicoll 2c1dca5b5e Polish capitalisation of units on DataSize and javadoc of DataUnit
Issue: SPR-17240
2018-09-04 13:46:41 +02:00
Sam Brannen 454cd933d4 Upgrade to JUnit Jupiter 5.3
Issue: SPR-17129
2018-09-03 22:17:02 +02:00
Stephane Nicoll dcdf9c09f5 Merge pull request #894 from keik:typo
* pr/894:
  Fix typos
2018-09-03 10:24:35 +02:00
Kei KATO c2585073ba Fix typos
Closes gh-894
2018-09-03 10:05:14 +02:00
Juergen Hoeller 95a56cd28d Polishing 2018-08-31 12:41:40 +02:00
Juergen Hoeller 51cee658d5 SpelExpression consistently exposes EvaluationContext to compiled AST
Operator includes explicit support for Boolean comparisons now.

Issue: SPR-17229
2018-08-31 12:41:22 +02:00
Juergen Hoeller 8c6f3505c4 Transactional timeout documented as seconds in annotation javadoc
Issue: SPR-17226
2018-08-31 12:40:43 +02:00
Juergen Hoeller 78cad0fdd3 HibernateTransactionManager lazily acquires JDBC Connection
Aligned with HibernateJpaDialect, using ConnectionHandle as functional interface now. Also, LazyConnectionDataSourceProxy supports Connection holdability as applied by HibernateTransactionManager, for use with prepareConnection=true.

Issue: SPR-17216
2018-08-31 12:40:04 +02:00
Sam Brannen a689daadf9 Complete upgrade to Gradle 4.10
Issue: SPR-17155
2018-08-28 13:53:01 +02:00
Sebastien Deleuze fb3c1881ca Upgrade to Gradle 4.10
Issue: SPR-17155
2018-08-28 11:32:40 +02:00
Brian Clozel 280da61d5c Fix empty body writing in EncoderHttpMessageWriter
Prior to this commit, an bug introduced in SPR-16949 prevented
`Mono.empty` bodies from being written to the response.

This commit ensures that empty bodies still trigger the writing to the
response and does not hang the processing of the exchange.

Issue: SPR-17220
2018-08-27 21:17:10 +02:00
JungHoon, Lee 1dac0df38b Prevent instantiation of NamedParameterBatchUpdateUtils
In order to prevent instantiation of utility classes, this commit
makes NamedParameterBatchUpdateUtils `abstract`.

Issue: SPR-17215
2018-08-27 15:35:00 +02:00
stsypanov 7dba79c7c1 Use String::isEmpty instead of "".equals(arg) when arg is not null 2018-08-26 22:48:21 +02:00
Sam Brannen 4883b8aa03 Polish JavaDoc for @Configuration 2018-08-26 22:07:07 +02:00
Sam Brannen 08ba53dd0e Ensure SocketUtils can be instantiated
Issue: SPR-17215
2018-08-26 21:49:21 +02:00
Sam Brannen 52c91910b2 Polish JavaDoc for @Configuration 2018-08-26 15:03:05 +02:00
Juergen Hoeller 4b86d42890 Upgrade to Netty 4.1.29 2018-08-24 13:45:40 +02:00
Juergen Hoeller 03f1920106 Support Jackson filters in combination with serialization view
Issue: SPR-17209
2018-08-24 12:06:52 +02:00
Juergen Hoeller 7056808716 Upgrade to Kotlin 1.2.61, RxJava 2.2.1, Tomcat 9.0.11 2018-08-24 11:21:50 +02:00
Juergen Hoeller 9614817e88 Do not proxy test instances based on "original instance" convention
Issue: SPR-17137
2018-08-24 00:49:01 +02:00
Sam Brannen f6ee2508ef Clean up warning in AnnotatedElementUtils 2018-08-23 18:24:18 +02:00
Sam Brannen 2bb15f7ed2 Fix grammar in JavaDoc for fully qualified links
This commit represents a best effort attempt at fixing remaining
"a" vs. "an" grammatical errors related links specified via a fully
qualified class name.

Issue: SPR-17208
2018-08-23 17:59:44 +02:00
Brian Clozel 482115f3ce Revert "Make DispacherServlet attributes protected"
This reverts commit 253ffd719d.
2018-08-23 16:52:16 +02:00
Sam Brannen 35c847a708 Polish JavaDoc for JCache support
Issue: SPR-17208
2018-08-23 16:45:10 +02:00
Brian Clozel 253ffd719d Make DispacherServlet attributes protected
Since the `initStrategies` method is there to be extended, the related
attributes should be `protected` as well.
2018-08-23 15:09:12 +02:00
Jay Bryant 62cb8ba6ba Editing pass for the Spring Framework Reference Guide
I edited for spelling, punctuation, grammar, usage, and corporate voice. I also added cross-references and links to the Javadoc in a number of places.
2018-08-23 10:56:54 +02:00
Stephane Nicoll 7fdd1372ae Merge pull request #1938 from izeye:polish-20180823
* pr/1938:
  Polish
2018-08-23 09:48:09 +02:00
Johnny Lim 4db5d28894 Polish
Closes gh-1938
2018-08-23 09:47:30 +02:00
Juergen Hoeller f13f041fae Consistent trace logging for init and destroy methods
Issue: SPR-17090
2018-08-22 14:13:12 +02:00
Juergen Hoeller 6ef0938a92 Defensive URL cleaning (preserving the original URL if possible)
Issue: SPR-17198
2018-08-22 14:12:39 +02:00
横云断岭 c55a9072aa Fix typo in CONTRIBUTING.md 2018-08-22 13:04:07 +02:00
Brian Clozel 709b185177 Clear global resources reference from HttpResources
When used as global Netty resources, ReactorResourceFactory creates and
sets those resources on Reactor's HttpResources directly.

When that ReactorResourceFactory bean is destroyed, those resources are
disposed but HttpResources still holds a reference to those and may try
to use them again.

This commit uses HttpResources to clear those resources and its
references to it, when the ReactorResourceFactory is treating those as
global.

Issue: SPR-17199
2018-08-21 16:16:28 +02:00
Stephane Nicoll 89e2caa4f3 Merge pull request #1934 from kylec32:websocket-documentation-remove-deprecated
* pr/1934:
  Fix usage of deprecated functionality in docs
2018-08-20 09:43:57 +02:00
Kyle Carter 8848e6ab9f Fix usage of deprecated functionality in docs
Closes gh-1934
2018-08-20 09:43:11 +02:00
Sam Brannen a8fbac8472 Polish JavaDoc
Issue: SPR-17174
2018-08-18 18:15:05 +02:00
Juergen Hoeller 1d59e52f11 EventListenerMethodProcessor accepts internal configuration classes
Issue: SPR-17160
2018-08-18 12:05:39 +02:00
Juergen Hoeller a6a6cf7d97 Upgrade to Java Activation Framework 1.2 as API dependency
Includes XMLUnit 2.6.1 and Undertow 2.0.13.

Issue: SPR-16115
2018-08-17 16:01:15 +02:00
Juergen Hoeller 2ac23badee SimpleAliasRegistry.hasAlias properly resolves multiple chained aliases
Issue: SPR-17191
2018-08-17 09:54:14 +02:00
Rossen Stoyanchev ad88c02bc3 Restore formatting change following revert 2018-08-17 09:53:47 +03:00
Rossen Stoyanchev 498984324d Revert "Add handleFailure property to FrameworkServlet"
This reverts commit 29ce6685ca.
2018-08-17 09:47:00 +03:00
Sebastien Deleuze 0dd9e8ce02 Polish JettyResourceFactory
Issue: SPR-17179
2018-08-16 21:47:02 +02:00
Juergen Hoeller 6bcb454a0d Polishing 2018-08-16 19:31:10 +02:00
Juergen Hoeller 84300b796c Fix recent javadoc errors
Issue: SPR-17174
2018-08-16 18:51:31 +02:00
Sebastien Deleuze 1eb06fcd90 Introduce JettyResourceFactory
JettyResourceFactory, similar to ReactorResourceFactory, allows
to share resources (Executor, ByteBufferPool, Scheduler) between
Jetty clients and servers.

Issue: SPR-17179
2018-08-16 18:17:07 +02:00
Juergen Hoeller 50b6f9da1d Reference documentation covers async Hibernate/JPA bootstrap options
Issue: SPR-17189
2018-08-16 17:30:44 +02:00
Rossen Stoyanchev 31c7807ac9 Fix doc issue with Reactor HttpClient config 2018-08-16 18:21:00 +03:00
Juergen Hoeller 04d2d1da0d Consistently use double quotes (even if no interpolation needed)
Includes upgrade to Hibernate ORM 5.3.5, EclipseLink 2.7.3, Selenium HtmlUnit Driver 2.32.1, Jetty 9.4.12 RC2.
2018-08-16 15:32:44 +02:00
Juergen Hoeller dc55da0988 Polishing 2018-08-16 13:02:27 +02:00
Juergen Hoeller 5d7fb1a1c2 Polishing 2018-08-16 12:08:26 +02:00
Juergen Hoeller 2ec8fa9cac SmartLifecycle default methods for auto-startup in default phase
Issue: SPR-17188
2018-08-16 12:08:02 +02:00
Stephane Nicoll 446a604ad0 Upgrade to Reactor Californium-M2 2018-08-16 09:30:20 +02:00
Brian Clozel cd403f4180 Polish 2018-08-15 20:56:27 +02:00
Brian Clozel 23fc6f6b1d Drain JDK HTTP client response body in all cases
Prior to this commit, when using the `SimpleClientHttpRequestFactory`
as a driver for `RestTemplate`, the HTTP response body would only be
drained if there was an attempt to read it in the first place.

This commit ensures that, even if there's no attempt at reading the
response body, it is properly drained when the response is closed to
make sure that the connection is released in a proper state and can be
put back in the connection pool for reuse.

Issue: SPR-17181
2018-08-15 20:52:40 +02:00
Brian Clozel 432cdd7802 Add ResponseEntity.of(Optional) variant
When dealing with `Optional` values in a Controller handler (for
example, values coming from a Spring Data repository), developers might
reuse this code snippet quite often:

```
@GetMapping("/user")
public ResponseEntity<Optional<User>> fetchUser() {
  Optional<User> user = //...
  return user.map(ResponseEntity::ok).orElse(notFound().build());
}
```

This commit adds a new static method on `ResponseEntity` for that,
simplifying the previous snippet with `return ResponseEntity.of(user);`

Note that in case more specific HTTP response headers are required by
the application, developers should use other static methods to
explicitly tell  which headers should be used in each case.

Issue: SPR-17187
2018-08-15 20:24:14 +02:00
Sam Brannen d3be1cc6cb Use single quotes in Gradle build where appropriate 2018-08-15 17:57:56 +02:00
Sam Brannen 69e4f21f90 Use JUnit 5 Maven BOM in Gradle build
Issue: SPR-17129
2018-08-15 17:43:23 +02:00
Juergen Hoeller 109a2b49e5 Consistently skip unnecessary search on superclasses and empty elements
Includes caching of declared annotation arrays and combined searching for several annotation types (used in SpringCacheAnnotationParser).

Issue: SPR-16933
2018-08-15 17:30:14 +02:00
Sam Brannen 50dc8c2358 Update JavaDoc for @BootstrapWith regarding local override
Issue: SPR-17006
2018-08-15 17:17:24 +02:00
Sam Brannen d20d95b7ac Allow directly present @BootstrapWith to override meta annotations
Prior to this commit, if a test class was meta-annotated with multiple
@BootstrapWith declarations that registered different
TestContextBootstrapper implementations, such a configuration would
result in an IllegalStateException, and there was no way to override
this behavior.

This commit addresses this shortcoming by relaxing the explicit
TestContextBootstrapper resolution in BootstrapUtils so that a directly
present @BootstrapWith annotation will now override declarations of
@BootstrapWith that are meta-present. In other words, if @BootstrapWith
is used as a meta-annotation, it can be overridden directly on the test
class via an explicit, local declaration of @BootstrapWith.

Issue: SPR-17006
2018-08-15 16:17:05 +02:00
Sam Brannen 4d7b265258 Fix merge conflict in reference manual 2018-08-15 15:37:49 +02:00
Brian Clozel f2506ca7a1 Revert "Infer HTTP 404 from empty Optional/Publisher types"
This reverts commit 7e91733502.
2018-08-15 15:15:35 +02:00
Sam Brannen 1b54d2119d Polishing 2018-08-15 12:27:45 +02:00
Sam Brannen a87b319a6f Polishing 2018-08-15 12:16:47 +02:00
Brian Clozel 7e91733502 Infer HTTP 404 from empty Optional/Publisher types
This commit handles "empty" cases for `ResponseEntity` controller
handler return types when wrapped with a `java.util.Optional` in Spring
MVC or a single `Publisher` like `Mono`.

Given the following example for Spring MVC:

```
@GetMapping("/user")
public Optional<ResponseEntity<User>> fetchUser() {
	Optional<User> user = //...
	return user.map(ResponseEntity::ok);
}
```

If the resulting `Optional` is empty, Spring MVC will infer a
`ResponseEntity` with an empty body and a 404 HTTP response status.

The same reasoning is applied to Spring WebFlux with Publisher types:

```
@GetMapping("/user")
public Mono<ResponseEntity<User>> fetchUser() {
	Mono<User> user = //...
	return user.map(ResponseEntity::ok);
}
```

This feature is only valid for `HttpEntity` return types and does not
apply to `@ResponseBody` controller handlers.

Issue: SPR-13281
2018-08-15 11:59:16 +02:00
Rossen Stoyanchev 04141dee65 Consistent logging of resolved exceptions
Issue: SPR-17178
2018-08-15 10:57:51 +03:00
Juergen Hoeller 6027cf2255 Polishing 2018-08-14 20:42:40 +02:00
Juergen Hoeller c0c9e08bf9 Revised documentation for PDF, Excel and JSON views
Issue: SPR-17180
Issue: SPR-17182
2018-08-14 20:36:29 +02:00
Juergen Hoeller de38af6843 Upgrade to JUnit Jupiter 5.3 RC1 (and Jetty 9.4.12 RC1)
Includes Groovy 2.5.2, Undertow 2.0.12, Hibernate Validator 6.0.12.

Issue: SPR-17129
2018-08-14 20:33:30 +02:00
Rossen Stoyanchev 3e4d305291 Polish ReactorResourceFactory 2018-08-14 17:34:17 +03:00
Rossen Stoyanchev 7a0c03e05e Update section in reference on WebClient
Rename "Builder" sub-section to "Configuration" and move it in the
beginning before all others since it explains how to create a client
in the first place.

Update content on Reactor Netty connector based on the API in 0.8 and
specifically address Reactor Netty resources and lifecycle.

Issue: SPR-16963
2018-08-14 15:48:46 +03:00
Rossen Stoyanchev 2f732a8dea Fix checkstyle errors 2018-08-14 13:01:09 +03:00
Rossen Stoyanchev 1bc08c61e1 Add ReactorResourceFactory
Issue: SPR-16963
2018-08-14 12:29:31 +03:00
Sam Brannen bdac39150f Polish contribution
Issue: SPR-17120
2018-08-13 14:40:04 +02:00
Chris Harding 24ed6de6aa Add backslash escape support to containsSqlScriptDelimiters
Prior to this commit, ScriptUtils supported MySQL-style escapes ('\\')
when splitting a script into statements; however, MySQL-style escapes
were not supported when determining if a given script contained a
specified statement delimiter. This caused executeSqlScript() to
erroneously fallback to a newline as the statement separator in such
cases.

This commit fixes this issue by implementing the same check for
MySQL-style escapes in containsSqlScriptDelimiters() that was already
present in splitSqlScript().

Issue: SPR-17120
2018-08-13 14:40:04 +02:00
Juergen Hoeller ac544924c8 Polishing 2018-08-13 14:36:37 +02:00
Juergen Hoeller 04a7f0884b SpringCacheAnnotationParser.parseCacheAnnotations cannot be protected
Its parameter DefaultCacheConfig is just package-visible...
2018-08-13 12:43:59 +02:00
Juergen Hoeller 999c7809a7 Refined warn/info logging in AutowiredAnnotationBeanPostProcessor
Issue: SPR-16946
2018-08-13 12:43:52 +02:00
Juergen Hoeller 347852e86a Avoid argument resolution overhead for no-arg factory methods
Includes revised InstantiationStrategy nullability for args array.

Issue: SPR-17171
2018-08-13 12:43:41 +02:00
Sam Brannen 777bd0d022 Fix Checkstyle violation in JCacheCache 2018-08-13 12:40:34 +02:00
Sam Brannen aebbd949a8 Suppress deprecation warnings in AnnotationProcessorPerformanceTests 2018-08-13 12:35:19 +02:00
Sam Brannen 8126ffbc8c Fix broken links in JavaDoc
Issue: SPR-17174
2018-08-13 12:22:52 +02:00
Sam Brannen 13c090b41d Generate “Use” links in aggregated Spring API JavaDoc
This commit enables the `-use` javadoc flag so that class usage pages
are included in the aggregated JavaDoc that is published to
https://docs.spring.io/spring-framework/docs/.

Issue: SPR-17173
2018-08-13 11:56:18 +02:00
Sam Brannen 1dcb6236a6 Fix broken links in JavaDoc
First step (as proof of concept) toward addressing SPR-17174.

Issue: SPR-17174
2018-08-13 11:54:05 +02:00
Rossen Stoyanchev 99f0129711 Fix URI var encoding issue with '$'
When expanding and strictly encoding URI variables, there is no need to
quote `/` and `$` which will be encoded anyway.

Issue: SPR-17168
2018-08-13 11:56:34 +03:00
Rossen Stoyanchev 430065c31d Order property for SimpUserRegistry
Issue:SPR-17142
2018-08-13 11:56:34 +03:00
Marten Deinum 5322fa0fb7 Use an import instead of FQCN
javax.xml.stream.Location is already there as an import there is no need
to use the FQCN in the handleDtd method.
2018-08-13 10:38:23 +02:00
Marten Deinum 20d0221d4f Use an import instead of FQCN
No that JCacheCache extends AbstractValueAdaptingCache instead of
directly implementing Cache an import statement can be used in favor
of using the FQCN for the field and constructor arguments.
2018-08-13 10:23:00 +02:00
Juergen Hoeller df51ff0386 Revert to Map entry iteration for less expensive static initialization
Issue: SPR-17169
2018-08-12 20:52:55 +02:00
Sam Brannen cfb1ed1009 Clean up warnings and delete dead code 2018-08-12 15:55:11 +02:00
Juergen Hoeller c4a7567a5e Post-processors consistently ignore ScopedObject/AopInfrastructureBean
JmsListenerAnnotationBeanPostProcessor also ignores JmsListenerContainerFactory and JmsListenerEndpointRegistry, avoiding unnecessary annotation introspection on framework classes.

Issue: SPR-17166
Issue: SPR-16933
2018-08-12 11:47:28 +02:00
Stephane Nicoll 8d08935c49 Disable quotes substitution in code sample
Issue: SPR-17167
2018-08-12 11:12:53 +02:00
Stephane Nicoll 30b8d47814 Polish 2018-08-12 10:49:29 +02:00
Juergen Hoeller 71d4dbea13 Post-processors ignore AopInfrastructureBean (includes ScopedObject)
Issue: SPR-17166
2018-08-11 23:10:57 +02:00
Juergen Hoeller 8bf8092740 Post-processors consistently ignore ScopedObject/AopInfrastructureBean
ScheduledAnnotationBeanPostProcessor also ignores TaskScheduler and ScheduledExecutorService, avoiding unnecessary annotation introspection on framework classes.

Issue: SPR-17166
Issue: SPR-16933
2018-08-11 22:20:07 +02:00
Juergen Hoeller fc16b2d3fb AbstractHandlerMethodMapping allows for customized bean retrieval
Issue: SPR-15535
2018-08-11 01:20:17 +02:00
Juergen Hoeller 2b2a5a414b Polishing 2018-08-10 19:23:44 +02:00
Stephane Nicoll f931a3fb59 Improve DataSize to support negative values
Issue: SPR-17154
2018-08-10 18:21:09 +02:00
Rossen Stoyanchev aef39e8954 Remove test class added by mistake 2018-08-10 16:57:46 +03:00
Juergen Hoeller aebb2d52e0 Logging refinements for transaction and cache processing (debug/trace)
Issue: SPR-16946
2018-08-10 15:45:46 +02:00
Juergen Hoeller def6fbba89 ListableBeanFactory.getBeansWithAnnotation does not include null beans
Issue: SPR-17034
2018-08-10 15:45:37 +02:00
Juergen Hoeller c437a0d1c3 Declare default methods for supportsSourceType and getOrder
Issue: SPR-17163
2018-08-10 15:42:30 +02:00
Rossen Stoyanchev 309ffc6d0d OverflowStrategy in ConcurrentWebSocketSessionDecorator
Issue: SPR-17140
2018-08-10 16:15:21 +03:00
Rossen Stoyanchev 61c52d64c5 Polish ConcurrentWebSocketSessionDecoratorTests 2018-08-10 16:15:21 +03:00
Stephane Nicoll 282a4ad2f6 Fix checkstyle violations 2018-08-10 14:43:16 +02:00
Stephane Nicoll 8a1588ae29 Add support for DataSize
This commit provides a data type to represents a size in bytes and other
standard unit.

Issue: SPR-17154
2018-08-10 14:28:46 +02:00
Stephane Nicoll 85ad2a566d Merge pull request #1918 from vpavic:polish-build
* pr/1918:
  Polish build script
2018-08-10 08:48:21 +02:00
Vedran Pavic 4d86779648 Polish build script
Closes gh-1918
2018-08-10 08:48:02 +02:00
Juergen Hoeller 20f2e23bfb Polishing 2018-08-09 23:57:25 +02:00
Sam Brannen 8ea913392c Link to Eclipse bug for annotations on bridge methods 2018-08-09 18:49:24 +02:00
Juergen Hoeller b3ca2d50a2 DefaultLifecycleProcessor properly counts dependent beans in same phase
Includes log level revision towards TRACE for cleaner DEBUG experience.

Issue: SPR-16901
Issue: SPR-16946
2018-08-09 17:31:29 +02:00
Juergen Hoeller 3a5def047f @Scheduled supports "-" as cron expression value for disabled triggers
Issue: SPR-16858
2018-08-09 16:12:05 +02:00
Juergen Hoeller eddbf13d5d BeanFactoryUtils caches transformedBeanName results for factory beans
Issue: SPR-17151
2018-08-09 16:06:05 +02:00
Sebastien Deleuze 6b6384a09e Improve WebFlux Protobuf support
- Update javadoc for decoding default instances
 - Refactor and simplify tests
 - Add missing tests
 - Refactor decoding with flatMapIterable instead of
   concatMap and avoid recursive call

Issue: SPR-15776
2018-08-09 15:47:45 +02:00
Juergen Hoeller 8e571decc1 Polishing 2018-08-09 11:59:15 +02:00
Juergen Hoeller 8f513f8561 AnnotationMatchingPointcut uses AnnotatedElementUtils.hasAnnotation
For consistency with AnnotationAsyncExecutionInterceptor (based on AnnotatedElementUtils.findMergedAnnotation) which is the main companion of AnnotationMatchingPointcut's checkInherited mode.

Issue: SPR-16933
2018-08-09 11:58:57 +02:00
Rossen Stoyanchev 57ded51de0 Fix link from Spring MVC to OXM chapter 2018-08-09 10:28:08 +03:00
Juergen Hoeller 915afa77f4 Polishing 2018-08-09 03:07:05 +02:00
Juergen Hoeller 58e9706991 Polishing 2018-08-09 02:26:36 +02:00
Juergen Hoeller 65f29a39ca AbstractAspectJAdvisorFactory uses AnnotationUtils.getValue 2018-08-09 02:26:28 +02:00
Juergen Hoeller 7cf98261ce Polishing 2018-08-08 23:56:17 +02:00
Juergen Hoeller 247ec572b2 Consistent hasAnnotation check for findMergedAnnotation lookup
Issue: SPR-16933
2018-08-08 23:54:56 +02:00
Juergen Hoeller 3f7d4b107e Avoid unnecessary annotation introspection on framework classes
Issue: SPR-16933
2018-08-08 23:53:45 +02:00
Juergen Hoeller 4521a79b2d Find annotations on implemented generic superclass methods as well
Includes Java 8 getDeclaredAnnotation shortcut for lookup on Class.

Issue: SPR-17146
2018-08-08 23:52:47 +02:00
Juergen Hoeller fa72186e28 Expose checkbox field marker as 'hidden' to RequestDataValueProcessor
Issue: SPR-17147
2018-08-08 23:52:24 +02:00
Juergen Hoeller b8b6367f9b ConcurrentModel ignores null value for put (also used by putAll)
Issue: SPR-17141
2018-08-08 23:51:55 +02:00
Sam Brannen 7077af14f1 Use Float.valueOf(float) instead of deprecated Float(double) constructor 2018-08-08 17:19:15 +02:00
Sebastien Deleuze 1c628293a2 Add doc & tests to Jaxb2XmlEncoder for collections
Issue: SPR-16363
2018-08-08 17:16:23 +02:00
Sergey Chupov a06e63f619 Polishing javadocs: IllegalStateException no longer thrown
The dependency to Apache Commons has been removed in https://github.com/spring-projects/spring-framework/commit/51252ebbcaa9e65aee83311aec25ca3c7c6d7d37#diff-95dc9d8756aa91afb2ac28454f1b634c, but the javadoc still mentions it.
2018-08-08 15:51:05 +02:00
Rossen Stoyanchev eacf1d35ee Proper use of setComplete in ContextPathCompositeHandler
Issue: SPR-17144
2018-08-08 16:35:47 +03:00
Rossen Stoyanchev a0dfdfcac3 Hierarchy under WebClientResponseException
Issue: SPR-17145
2018-08-08 15:34:08 +03:00
Rossen Stoyanchev c90ab5fb0a Polish Http[Client|Server]ErrorException hierarchy 2018-08-08 15:34:08 +03:00
Sam Brannen 52f6dcf525 Fix typo 2018-08-08 13:25:14 +02:00
Sam Brannen 7b608ab995 Ensure AnnotationUtilsTests pass in Eclipse again 2018-08-08 13:23:51 +02:00
Kazuhiro Sera be211ceead Fix typos detected by github.com/client9/misspell 2018-08-08 12:50:46 +02:00
Sebastien Deleuze 896eb5687a Check scheme in (WebUtils|CorsUtils)#isSameOrigin
Issue: SPR-16362
2018-08-08 12:19:42 +02:00
Sebastien Deleuze 7e9b7102b7 Support custom CorsConfigurationSource in AbstractHandlerMapping
This commit allows to specify a custom CorsConfigurationSource
in AbstractHandlerMapping (both Servlet and Reactive variants).

AbstractHandlerMapping#getCorsConfigurations method is now
deprecated.

Issue: SPR-17067
2018-08-08 10:08:55 +02:00
Juergen Hoeller b325c74216 Pruning of outdated JDK 6/7 references (plus related polishing) 2018-08-07 20:36:47 +02:00
Juergen Hoeller 2b051b8b32 Deprecate support classes for Sun's JDK HTTP server
Issue: SPR-17143
2018-08-07 20:35:53 +02:00
Juergen Hoeller 34ddb88851 ConcurrentModel.addAttribute(String, Object) ignores null value
Issue: SPR-17141
2018-08-07 20:35:34 +02:00
Juergen Hoeller a4c750e94c Upgrade to OpenPDF 1.2 and Apache HttpAsyncClient 4.1.4 2018-08-07 11:24:20 +02:00
Juergen Hoeller 2d05f2ed47 SerializableTypeWrapper detects Graal through system property as well
Issue: SPR-17136
2018-08-07 11:15:43 +02:00
Rossen Stoyanchev 4a18488f30 Update deprecated basic auth client filters.
1. Update ExchangeFilterFunctions to delegate internally to
HttpHeaders.setBasicAuth(user, password).

2. Remove deprecation from
ExchangeFilterFunctions.basicAuthentication(String user, String password)
It is still useful as a filter to insert the header.

3. Update deprecation notes.

Issue: SPR-17099
2018-08-07 10:10:27 +03:00
Juergen Hoeller 6b82a6c38c Polishing 2018-08-07 02:47:00 +02:00
Juergen Hoeller 2938a95435 Pre-size LinkedHashSet for annotation parsers
Issue: SPR-17074
2018-08-07 01:35:57 +02:00
Juergen Hoeller d72d376f03 Avoid unnecessary annotation introspection on framework methods
Issue: SPR-16933
2018-08-07 01:35:32 +02:00
Juergen Hoeller f155d21c95 DisposableBean javadoc refers to singletons as well as scoped beans
Issue: SPR-17131
2018-08-06 19:46:41 +02:00
Juergen Hoeller 28565e25fa Javadoc references for resetBeanDefinition
Issue: SPR-17126
2018-08-06 19:45:06 +02:00
Juergen Hoeller 943b394992 Polishing 2018-08-06 18:34:00 +02:00
Juergen Hoeller 8a9d042320 Javadoc fix from ASM master (6.2.1)
Issue: SPR-16398
2018-08-06 18:33:41 +02:00
Juergen Hoeller e64c6dfa3d MergedBeanDefinitionPostProcessors clear internal caches on bean reset
Issue: SPR-17126
2018-08-06 15:41:35 +02:00
Juergen Hoeller 69c6a40c50 Consistent nullability for array/collection input parameters
Includes pre-sizing of LinkedHashSet for conversion from array.

Issue: SPR-17123
Issue: SPR-17074
2018-08-06 14:11:59 +02:00
Rossen Stoyanchev a9a38fe67e Consistent initialiazation of Forwarded header set 2018-08-06 14:32:18 +03:00
Rossen Stoyanchev 2216964b54 Polish RestTemplate exception hierarchy
Issue: SPR-15404
2018-08-06 14:29:10 +03:00
jerzykrlk 7f0e3481a5 Fine-grained RestTemplate exception hierarchy
Issue: SPR-15404
2018-08-06 14:29:10 +03:00
Sebastien Deleuze 2054fa2191 Upgrade to Jetty reactive HTTP client 1.0.1
Issue: SPR-17124
2018-08-06 12:01:29 +02:00
Juergen Hoeller 821ab62492 Upgrade to RxJava 2.2 and Kotlin 1.2.60
Includes latest dependency updates (Mockito 2.21, Log4J 2.11.1, Hibernate ORM 5.3.4, Protobuf 3.6.1, JRuby 9.2, HtmlUnit 2.32, Selenium 3.14) for Spring Framework 5.1.

Issue: SPR-16388
Issue: SPR-16239
2018-08-03 23:18:10 +02:00
Rossen Stoyanchev c55c9eb029 Polish 2018-08-03 17:41:38 +03:00
Vedran Pavic bb2db87c2f Add support for adding cookies as headers in MockHttpServletResponse
Issue: SPR-17110
2018-08-03 16:44:14 +03:00
Rossen Stoyanchev a8a1fc6de5 Earlier processing of forwarded headers
Forwarded headers are now processed before ServerWebExchange is created
through ForwardedHeaderTransformer which has the same logic as the
ForwardedHeaderFilter but works on the request only.

ForwardedHeaderFilter is deprecated as of 5.1 but if registered it is
removed from the list of filters and ForwardedHeaderTransformer is used
instead.

Issue: SPR-17072
2018-08-03 15:16:09 +03:00
Jason Zhekov 0878e438e5 Delete MockServer when using RestTemplate with MockMvc 2018-08-03 10:07:04 +03:00
Rossen Stoyanchev aec98268fe maxResponseBody client filter
Issue: SPR-16989
2018-08-02 21:19:22 +03:00
Rossen Stoyanchev 5095ec40b5 takeUntilByteCount actually uses takeUntil
Issue: SPR-17188
2018-08-02 21:19:22 +03:00
Rossen Stoyanchev 542ed81d5c Polish 2018-08-02 21:19:22 +03:00
Juergen Hoeller 217aa38cbb Polishing 2018-08-02 18:00:42 +02:00
Juergen Hoeller 2474c48749 Polishing 2018-08-02 16:55:53 +02:00
Juergen Hoeller dc36bb34c7 Polishing 2018-08-02 14:41:27 +02:00
Juergen Hoeller 6735e2387c Deprecate CommonJ scheduling in favor of JSR-236 Concurrency Utilities
Issue: SPR-17117
2018-08-02 14:38:30 +02:00
Juergen Hoeller 50550717d6 SchedulingTaskExecutor provides prefersShortLivedTasks default method
Issue: SPR-17116
2018-08-02 14:36:53 +02:00
Juergen Hoeller c46dacc209 Support for deferred access to StoredProcedureQuery output parameters
Issue: SPR-17115
2018-08-02 14:30:55 +02:00
Juergen Hoeller fa97aab8be SchedulerAccessor catches cluster race conditions on job rescheduling
Issue: SPR-17114
2018-08-02 14:30:02 +02:00
stsypanov b5c691bdac SPR-17074 Replace pointless wrapping with Arrays.asList with iteration over array 2018-08-02 12:07:00 +02:00
Rossen Stoyanchev 29ce6685ca Add handleFailure property to FrameworkServlet
Issue: SPR-17100
2018-08-02 00:49:28 +03:00
Juergen Hoeller 78eda961f2 Polishing 2018-08-01 13:11:35 +02:00
Vedran Pavic 70dbaf9751 Publish binding event for replaced attributes in MockHttpSession
Issue: SPR-17109
2018-08-01 13:07:41 +02:00
Juergen Hoeller 0001f87d59 Polishing 2018-08-01 12:52:50 +02:00
Juergen Hoeller 589b7048ec Avoid synthesizable annotation creation for @Bean/@Scope processing
Includes consistent (non-)use of AnnotationUtils/AnnotatedElementUtils.

Issue: SPR-16933
2018-08-01 11:43:28 +02:00
Juergen Hoeller 9b671f8408 Polishing 2018-07-31 23:57:19 +02:00
Rossen Stoyanchev 65d5cb3663 Typo in URI Encoding section
Issue: SPR-17104
2018-07-31 23:27:00 +03:00
Rossen Stoyanchev 31024b1f93 Add sections on logging for Spring MVC and WebFlux
Issue: SPR-17032
2018-07-31 23:06:48 +03:00
Juergen Hoeller 92eaf99067 Polishing 2018-07-31 21:04:36 +02:00
Juergen Hoeller 6cd9060183 Avoid synthesizable check for common annotation types
This revision considers any java/javax and org.springframework.lang annotations as not synthesizable upfront, checking not only in isSynthesizable but also at synthesizeAnnotation(Array) level.

Issue: SPR-16933
2018-07-31 20:54:10 +02:00
Сергей Цыпанов f8340838b3 Use lambda expressions for lazy instantiation (#1911)
Issue: SPR-17074
2018-07-31 13:03:18 +02:00
Juergen Hoeller 487e14d549 Polishing 2018-07-30 23:30:36 +02:00
Sola 9b1eb397ee Fix documentation 2018-07-30 23:26:13 +02:00
Juergen Hoeller f74a631ea1 Nullability refinements in spring-webmvc
Includes revision of web.servlet.tags.form for non-null conventions.

Issue: SPR-15540
2018-07-30 22:08:11 +02:00
Juergen Hoeller 4a147d26fc Initialize pre-filled HashMaps with large enough capacity
Empty Maps are preferably initialized without capacity (not initializing them at all or lazily initializing with default capacity when needed).

Issue: SPR-17105
2018-07-30 22:07:31 +02:00
stsypanov 457d586859 SPR-17074 pass argument of addAll/putAll into constructor 2018-07-30 21:27:55 +02:00
Pascal Schumacher aa656c47b8 Fix typo in notes on future deprecation of the RestTemplate
Issue: SPR-16993

Obvious Fix
2018-07-27 14:13:19 -04:00
Juergen Hoeller 109552d868 Polishing 2018-07-27 18:58:18 +02:00
Juergen Hoeller 1c40e36839 Upgrade to Netty 4.1.28 2018-07-27 17:46:37 +02:00
Juergen Hoeller 1fd6248d84 Polishing 2018-07-27 17:46:21 +02:00
Juergen Hoeller c037e75f26 Improve debug logging at BeanDefinitionReader and BeanFactory level
Issue: SPR-17090
2018-07-27 17:46:05 +02:00
Rossen Stoyanchev 23bda9a5a7 Fix compiler warnings 2018-07-27 08:49:45 -04:00
Rossen Stoyanchev 91d17cf628 Add notes on future deprecation of the RestTemplate
Issue: SPR-16993
2018-07-27 08:41:20 -04:00
Rossen Stoyanchev fcbf06f050 Disable equals in JsonPath~ and XPathAssertions
Issue: SPR-17091
2018-07-27 08:40:56 -04:00
Rossen Stoyanchev f5ff1dc3f9 Comment on difference in matrix variable test
Based on discussion under
https://github.com/spring-projects/spring-framework/pull/1901
2018-07-27 08:40:36 -04:00
Juergen Hoeller 025fd2962e Polishing 2018-07-26 23:51:52 +02:00
Juergen Hoeller 7c9ba80f85 Polishing 2018-07-26 23:20:50 +02:00
Juergen Hoeller e82efbc7e3 Declare ASM7_EXPERIMENTAL for full compatibility with JDK 11 bytecode
Issue: SPR-17096
2018-07-26 23:11:54 +02:00
Rossen Stoyanchev bcb485b5ed bindToApplicatonContext uses WebSessionManager bean
Issue: SPR-17094
2018-07-26 15:53:41 -04:00
Rossen Stoyanchev c022f7c19d Polish 2018-07-26 15:53:41 -04:00
Bhavani Shekhawat ee95f171c8 Update PropertySourcesPlaceholderConfigurer.java
Fix the error message when PropertySources are not applied
2018-07-26 20:48:50 +02:00
Juergen Hoeller 8277ea5794 Revise BeanFactory vs ApplicationContext section in reference docs
Issue: SPR-17095
2018-07-26 18:48:34 +02:00
Juergen Hoeller e366b20037 Polishing 2018-07-26 15:46:55 +02:00
Johnny Lim 38525ceff6 Fix log level guard in DatabaseStartupValidator.afterPropertiesSet() 2018-07-26 15:45:42 +02:00
Johnny Lim 964467d269 Polish DatabaseStartupValidator.afterPropertiesSet() 2018-07-26 15:37:35 +02:00
Juergen Hoeller e458777925 Properly identify event-related ClassCastExceptions on JDK 11
Issue: SPR-17093
2018-07-26 14:41:53 +02:00
Hannes Metssalu 142530874b Fixed a typo in documentation.
'AbstractFactoryBean#getEarlySingletonInstance' documentation mentions "eager singleton". I'm quite sure it should be fixed to "early singleton".
2018-07-26 13:48:38 +02:00
Juergen Hoeller c2a5fcd353 Fallback to empty collection/map only if actually no target bean found
Issue: SPR-15338
2018-07-26 05:59:18 +02:00
Rossen Stoyanchev 14d0fee86c Improve context-related logging on web startup
Sample output at TRACE:
```
DispatcherServlet - Initializing Servlet 'org.springframework.web.servlet.DispatcherServlet-7a8c8dcf'
AnnotationConfigWebApplicationContext - Refreshing WebApplicationContext for namespace 'org.springframework.web.servlet.DispatcherServlet-7a8c8dcf-servlet', started on Wed Jul 25 17:46:38 EDT 2018
AnnotationConfigWebApplicationContext - Registering [org.springframework.web.servlet.mvc.method.annotation.RequestPartIntegrationTests$CommonsMultipartResolverTestConfig]
AnnotationConfigWebApplicationContext - No 'messageSource' bean, using [Empty MessageSource]
AnnotationConfigWebApplicationContext - No 'applicationEventMulticaster' bean, using [SimpleApplicationEventMulticaster]
AnnotationConfigWebApplicationContext - No 'lifecycleProcessor' bean, using [DefaultLifecycleProcessor]
...
DispatcherServlet - Initialization completed in 3361 ms
```

Issue: SPR-16946
2018-07-25 17:50:03 -04:00
Juergen Hoeller 4e03d3fdcb MethodBeforeAdviceInterceptor implements BeforeAdvice marker interface
Includes related polishing in the advice interceptor implementations.

Issue: SPR-17088
2018-07-25 20:12:14 +02:00
Juergen Hoeller 9ab63b8494 ListBasedXMLEventReader uses defensive modifiable copy of given List 2018-07-25 19:03:13 +02:00
Juergen Hoeller 2b2bf27933 Polishing 2018-07-25 15:26:52 +02:00
Juergen Hoeller 3881a4aded Polishing 2018-07-25 14:16:02 +02:00
Juergen Hoeller 3899b7a909 Refactor DefaultCodecs.protobufWriter into protobufEncoder
Includes nullability declarations for the protobuf package.

Issue: SPR-15776
2018-07-25 14:15:50 +02:00
Juergen Hoeller fd8e4abe5d Introduce ResolvableType.toClass() shortcut
Issue: SPR-17086
2018-07-25 14:15:19 +02:00
Juergen Hoeller 31bfc1dc2b Differentiate internal LogAdapter from core.log.LogDelegateFactory
Issue: SPR-16585
Issue: SPR-17012
2018-07-25 14:14:38 +02:00
Sebastien Deleuze d3b244a81b Optimize class detection by sharing the ClassLoader
Issue: SPR-17083
2018-07-25 11:09:42 +02:00
Rossen Stoyanchev 32faf09a80 Add check for mixing @EnableWebMvc and @EnableWebFlux
Issue: SPR-16609
2018-07-24 20:47:26 -04:00
Rossen Stoyanchev 0be8c20fca Consistent logging of selected media types 2018-07-24 20:47:26 -04:00
sdeleuze 36a07aa897 Support Protobuf serialization in WebFlux
This commit introduces Protobuf support in WebFlux via dedicated
codecs.

Flux<Message> are serialized/deserialized using delimited Protobuf
messages with the size of each message specified before the message
itself. In that case, a "delimited=true" parameter is added to the
content type.

Mono<Message> are expected to use regular Protobuf message
format (without the size prepended before the message).

Related HttpMessageReader/Writer are automatically registered when the
"com.google.protobuf:protobuf-java" library is detected in the classpath,
and can be customized easily if needed via CodecConfigurer, for example
to specify protocol extensions via the ExtensionRegistry based
constructors.

Both "application/x-protobuf" and "application/octet-stream" mime types
are supported.

Issue: SPR-15776
2018-07-25 01:17:06 +02:00
Juergen Hoeller 4475c67ba8 Fix checkstyle violation 2018-07-24 22:44:54 +02:00
Brian Clozel 195f3f07e7 ResponseEntityResultHandler overwrites headers
Prior to this commit, controller handlers (regular and exception
handlers as well) would not overwrite existing HTTP response headers on
the exchange. This would lead to situations where Content-Type values
set during the initial handling phase would not be overwritten when
handling an error later on.

This commit aligns the implementation of that result handler on the
Spring MVC one in that regard.

Issue: SPR-17082
2018-07-24 22:21:30 +02:00
Juergen Hoeller 90d395edcf Polishing 2018-07-24 22:18:12 +02:00
Rossen Stoyanchev 2e4f5a7923 Consistently remove forwarded headers in WebFlux
Preparation for SPR-17072
2018-07-24 16:05:47 -04:00
Rossen Stoyanchev 41aa4218af Polish WebFlux ForwardedHeaderFilter and tests
Preparation for SPR-17072
2018-07-24 16:05:47 -04:00
Juergen Hoeller 02403f6a34 Polishing 2018-07-24 21:44:43 +02:00
Juergen Hoeller 11881ff211 Polishing 2018-07-24 18:45:52 +02:00
Juergen Hoeller a18cfd71b9 Upgrade to Reactor Californium M1
Issue: SPR-16386
2018-07-24 18:45:15 +02:00
Rossen Stoyanchev 2fdb8c9c8c Update STOMP section on working with subscriptions
1. Revise @SubscribeMapping to address common points of confusion.
2. Add ExecutorSubsribableChannel.
3. Split Events and Interception in two.

Issue: SPR-16950
2018-07-24 12:23:13 -04:00
Rossen Stoyanchev 9b2c8404dc "Order of messages" in STOMP section of reference docs
Issue: SPR-13989
2018-07-24 12:23:13 -04:00
Rossen Stoyanchev 23c379d5c0 Order setter for DefaultSimpUserRegistry
Issue: SPR-17023
2018-07-24 12:23:13 -04:00
Sebastien Deleuze 36bbbab02d Deprecate ExtensionRegistryInitializer in protobuf support
In order to be consistent with SPR-15776, and since it does not
provide clear added value, this commit deprecates
ExtensionRegistryInitializer and uses ExtensionRegistry
parameter instead in ProtobufHttpMessageConverter and
ProtobufJsonFormatHttpMessageConverter constructors.

Issue: SPR-17081
2018-07-24 17:25:55 +02:00
Juergen Hoeller dd4468a74a Polishing 2018-07-24 16:16:52 +02:00
Juergen Hoeller 7f1a8d78b5 BeanFactoryAdvisorRetrievalHelper avoids synchronization for name cache
Issue: SPR-16570
2018-07-24 16:16:44 +02:00
Juergen Hoeller 47d8fe83df Upgrade to Interceptor API 1.2.2, Moneta 1.3, Rome 1.11 2018-07-24 14:44:56 +02:00
Juergen Hoeller fac2e35f96 Refactor util.log.LogUtils into core.log.LogDelegateFactory
Issue: SPR-17012
2018-07-24 14:44:34 +02:00
Juergen Hoeller 20c34cbb9b Provide predetermined capacity for cache operation collections
Issue: SPR-17079
2018-07-24 13:27:02 +02:00
Juergen Hoeller 8e5f243320 Upgrade to Mockito 2.20 2018-07-24 13:09:32 +02:00
Juergen Hoeller a9c9ba6601 Generic matching for ObjectProvider stream and empty vararg resolution
Issue: SPR-11419
Issue: SPR-15338
2018-07-24 13:03:54 +02:00
Rossen Stoyanchev 6372c0f47c Ensure headers work with ResponseEntity + reactive body
Issue: SPR-17076
2018-07-24 00:24:29 -04:00
Rossen Stoyanchev 7500b144ae Option to preserve publish order
Issue: SPR-13989
2018-07-23 23:24:39 -04:00
Juergen Hoeller 430250c80f Upgrade to RxJava 2.1.17 2018-07-24 01:10:27 +02:00
Juergen Hoeller 5f51e86185 Avoid relying on runtime constructor order for argument conversion 2018-07-24 01:04:47 +02:00
Juergen Hoeller 1b09718104 Polishing 2018-07-24 00:45:21 +02:00
Juergen Hoeller 1603c4ab2f Programmatic ObjectProvider retrieval through BeanFactory API
Introduces getBeanProvider(Class) and getBeanProvider(ResolvableType), also narrowing getBean(String, Class) and isTypeMatch(String, Class) to a non-null Class argument and enriching NoUniqueBeanDefinitionException with a full ResolvableType. In addition, ObjectProvider supports iterable/stream access for collection-style resolution of multiple matching beans now, and collection injection falls back to an empty collection in a single-constructor case with non-null arguments.

Issue: SPR-17075
Issue: SPR-11419
Issue: SPR-15338
2018-07-24 00:42:03 +02:00
Vedran Pavic 82194f4ee0 Set SameSite default to Lax
Issue: SPR-16418
2018-07-23 18:23:05 +02:00
Sebastien Deleuze 0def1640f2 Support single-value reactive types in @MessageMapping
This commit adds support for single-value reactive types in
@MessageMapping by converting them using ReactiveAdapterRegistry
and MonoToListenableFutureAdapter.

MonoToListenableFutureAdapter previously package private and used only
in org.springframework.messaging.tcp.reactor has been moved to
org.springframework.messaging.support and made public in order to be
used by ReactiveReturnValueHandler as well.

Issue: SPR-16634
2018-07-23 15:20:48 +02:00
Sebastien Deleuze b09fad13a1 Catch errors when adding SourceHttpMessageConverter
This commit ignores errors like TransformerFactoryConfigurationError
that can be thrown when instantiating SourceHttpMessageConverter on
platforms where no TransformerFactory implementation is available,
like when compiling/running as GraalVM native images.

Issue: SPR-17007
2018-07-23 10:39:26 +02:00
Sebastien Deleuze f8f8d28f08 Support running Kotlin apps without kotlin-reflect
This commit includes an optimization of BeansUtils#instantiateClass
that favors Java reflection for default constructors before leveraging
Kotlin one for finding primary constructors and avoids Kotlin related
conditions when running in Java.

Issue: SPR-17069
2018-07-23 09:54:48 +02:00
Juergen Hoeller bccff73e2b AspectJExpressionPointcut leniently ignores non-composable interfaces
Issue: SPR-17003
2018-07-22 22:28:48 +02:00
Juergen Hoeller f58854f4b9 Locally cache factory method candidates per factory class
Issue: SPR-17071
2018-07-22 19:22:20 +02:00
Juergen Hoeller 13873dafb7 Polishing 2018-07-22 17:55:31 +02:00
Juergen Hoeller cfbacfd89b Revise ResolvableType.as for introspection performance
This revision limits serializability of derived interfaces, superclasses and type parameters, optimizing for introspection performance instead.

Issue: SPR-17070
2018-07-22 17:49:53 +02:00
stsypanov 5051850fa9 SPR-17074 Replace iteration over Map::ketSet with Map::entrySet 2018-07-21 13:12:43 +02:00
Juergen Hoeller 3c65c17053 Correctly determine and propagate validation hints to DataBinder
Issue: SPR-17073
2018-07-21 12:19:37 +02:00
Rossen Stoyanchev c57e1afd2b ResulatMatcher.matchAll
Issue: SPR-16417
2018-07-20 23:02:47 -04:00
Rossen Stoyanchev 91122ec0f5 Add Consumer methods to WebTestClient assertion classes
Issue: SPR-16574
2018-07-20 22:28:40 -04:00
Rossen Stoyanchev 20de5003ff Hamcrest methods in WebTestClient
Issue: SPR-16729
2018-07-20 17:40:38 -04:00
Rossen Stoyanchev 0c62d6b5da Polish
Leaving out hamcrest for now, to address more broadly.

Issue: SPR-16741
2018-07-20 17:40:38 -04:00
Eric Deandrea 2734f01067 Provide XML assertions in WebTestClient
Adds XML-based assertions in
org.springframework.test.web.reactive.server.WebTestClient.BodyContentSpec
for asserting against the XML body as well as xPath,
similar to those assertions offered when using
MockMvcResultMatchers.xpath().

Issue: SPR-16741
2018-07-20 17:38:04 -04:00
Juergen Hoeller bb5d99a083 Upgrade to Hibernate ORM 5.3.3, Undertow 2.0.11, Mockito 2.19.1 2018-07-20 18:56:52 +02:00
Brian Clozel 390bb871d8 Switch order of multipart Content-Type directives
Since SPR-15205, the `FormHttpMessageConverter` is adding a `charset`
directive to the `Content-Type` request header in order to help servers
understand which charset is being used to encode headers of each part.

As reported in SPR-17030 and others, some servers are not parsing
properly such header values and assume that `boundary` is the last
directive in the `Content-Type` header.

This commit reorders the charset information right before the boundary
declaration to get around those issues.

Issue: SPR-17030
2018-07-20 18:11:05 +02:00
Juergen Hoeller 9a43d2ec20 Revised log levels: less WARN and INFO, fine-tuned DEBUG vs TRACE
Issue: SPR-16946
2018-07-20 15:05:16 +02:00
Brian Clozel a410d90439 Drain client response body consistenly
Prior to this commit, the `DefaultClientResponse` implementation would
handle HTTP client cases where the server response body would need to be
consumed (pooled resources need to be released) and the body publisher
cancelled right away. This is done to avoid reading the whole response
body and returning the connection to the pool, now that this connection
cannot be reused.

This was done already when the `WebClient` is asked for a `Void` type
for the response body.

SPR-17054 brought a new case for that: whenever no message reader is
able to decode the response body, an `UnsupportedMediaTypeException`
error signal is sent. Prior to this commit, the response body would not
be consumed and cancelled for that case.

This commit refactors all those cases from the `DefaultClientResponse`
directly into the `BodyExtractors`, since most of the logic and
knowledge for that belongs there. We only need to only apply this
behavior when the HTTP client is involved, as the server does not want
this to happen.

Issue: SPR-17054
2018-07-20 14:01:34 +02:00
Rossen Stoyanchev 07653bfd0c Fix for encoding issue with MvcUriComponentsBuilder
Provide method for stronger encoding of expanded URI variables when
building links from views.

Issue: SPR-17027
2018-07-19 19:07:42 -04:00
Rossen Stoyanchev 93b7a4838e UriComponentsBuilder method to configure URI variables
See Javadoc on UriComponentsBuilder#uriVariables for details.

This helps to prepare for SPR-17027 where the MvcUriComponentsBuilder
already does a partial expand but was forced to build UriComonents
and then create a new UriComponentsBuilder from it to continue. This
change makes it possible to stay with the same builder instance.

Issue: SPR-17027
2018-07-19 19:07:42 -04:00
Rossen Stoyanchev 28cd6978b5 Minor fixes: UriComponentsBuilder, UriComponents, docs
After the latest changes, two small fixes in the clone method to copy
the encode flag, and in the encodeUriTemplate method to account for
possible null query params.

Improvements in the URI encoding section.

Issue: SPR-17039, SPR-17027
2018-07-19 19:07:42 -04:00
Juergen Hoeller 51c7ceb95d Polishing 2018-07-20 00:17:37 +02:00
Juergen Hoeller 252f52ab07 Tighten (IntroductionAware)MethodMatcher contract
Provides a non-null guarantee for MethodMatcher's targetClass argument and strict separation between IntroductionAwareMethodMatcher and regular MethodMatcher, enabling DefaultAdvisorChainFactory to defer its IntroductionAdvisor determination until encountering an actual IntroductionAwareMethodMatcher (even behind union/intersection).

Issue: SPR-17068
2018-07-20 00:17:31 +02:00
Juergen Hoeller 867b3d233d Upgrade to OkHttp 3.11, Apache HttpClient 4.5.6, Hibernate Validator 6.0.11 2018-07-19 17:52:08 +02:00
Juergen Hoeller 09920d9b01 Raise testPrototypeCreationWithPropertiesIsFastEnough limit to 4000 ms 2018-07-19 17:51:54 +02:00
Juergen Hoeller c4df335a1d ReflectiveMethodExecutor invokes interface method if possible
Issue: SPR-16845
2018-07-19 16:35:59 +02:00
Juergen Hoeller 478d7255d2 GenericApplicationListenerAdapter caches resolved event types
Issue: SPR-16970
2018-07-19 16:34:19 +02:00
Juergen Hoeller 52d124de6f Use supplier-aligned type information for FactoryBean type resolution
Issue: SPR-17063
2018-07-19 13:14:20 +02:00
Juergen Hoeller 0b60447c49 Javadoc update: ConfigurationClassPostProcessor is priority-ordered
Issue: SPR-17062
2018-07-19 11:59:40 +02:00
Juergen Hoeller d0bbbf4cae OrderUtils caches order values (for AnnotationAwareOrderComparator)
Issue: SPR-17064
2018-07-19 11:58:42 +02:00
Juergen Hoeller 1f5d0faf1f HandlerMethod caches interface parameter annotations
Issue: SPR-11055
2018-07-19 11:38:10 +02:00
Stephane Nicoll 999c169b1c Merge pull request #1888 from vpavic:patch-1
* pr/1888:
  Polish WebSession javadoc
2018-07-19 11:27:13 +02:00
Vedran Pavic b1e28a554a Polish WebSession javadoc
Issue: SPR-17051

Closes gh-1888
2018-07-19 11:26:49 +02:00
Rossen Stoyanchev 9498da5910 Clarify behavior of WebSession#save()
+ minor update to the InMemoryWebSession to match the defined behavior.

Issue: SPR-17051
2018-07-18 22:14:02 -04:00
Rossen Stoyanchev 66d73017d5 PathVariable consistently reflects value up to 1st ";"
Given "/{foo}" and "/a=42;c=b", previously that would be treated as a
sequence of matrix vars with an empty path variable. After the change
the path variable "foo" is "a=42".

This should be ok for backawards compatibility since it's unlikely for
anything to rely on an empty path variable.

Issue: SPR-11897
2018-07-18 22:14:02 -04:00
Juergen Hoeller 9c08a482d1 Prefer ArrayList/ArrayDeque over LinkedList for multi-element holders
LinkedList remains in place where a List is likely to remain empty or single-element (in order to avoid unused capacity).

Issue: SPR-17037
2018-07-18 22:17:42 +02:00
Rossen Stoyanchev 833aee9b2d Add SimpLogging and use o.s.messaging.simp classes
Issue: SPR-17012
2018-07-18 15:33:20 -04:00
Rossen Stoyanchev 4d6f2df3cb Add LogUtils and HttpLogging
SPR-17012
2018-07-18 15:32:50 -04:00
Juergen Hoeller 23d4862017 Find annotations on implemented generic interface methods as well
Issue: SPR-16060
2018-07-18 19:44:30 +02:00
Juergen Hoeller c77dbbb1e6 Specific exception for missing request header, cookie, matrix variable
Issue: SPR-14818
2018-07-18 18:56:51 +02:00
Sebastien Deleuze e8034f2f96 Adapt DefaultParameterNameDiscoverer to Graal constraints
When compiling or running as a Graal native image, no
ParameterNameDiscoverer is used.

Issue: SPR-17005
2018-07-18 17:17:47 +02:00
Juergen Hoeller 790d515f8c HandlerMethod exposes interface parameter annotations as well
The HandlerMethodParameter arrangement uses an approach similar to ModelAttributeMethodProcessor's FieldAwareConstructorParameter, merging the local parameter annotations with interface-declared annotations.

Issue: SPR-11055
2018-07-18 17:13:55 +02:00
Juergen Hoeller 28f7b26294 Null-returning instance supplier resolves to NullBean
Issue: SPR-17057
2018-07-18 15:26:06 +02:00
Juergen Hoeller f8553117d0 Polishing
(cherry picked from commit 4341838)
2018-07-18 14:58:43 +02:00
sdeleuze a87764f1fd Add support for Jetty Reactive Streams HTTP client
Leverage https://github.com/jetty-project/jetty-reactive-httpclient
to add support for Jetty in WebClient via JettyClientHttpConnector.

Implemented with buffer copy instead of optimized buffer wrapping
because the latter hangs since Callback#succeeded doesn't allow
releasing the buffer and requesting more data at different times
(required for Mono<DataBuffer> for example).
See https://github.com/eclipse/jetty.project/issues/2429.

Issue: SPR-15092
2018-07-18 14:49:49 +02:00
Sebastien Deleuze 3c9049d530 Leverage Jetty BOM
Issue: SPR-17058
2018-07-18 14:49:49 +02:00
Brian Clozel a7f97a1669 Avoid null signals when resolving handler arguments
Prior to this commit, resolving an argument for a WebFlux controller
that's missing from the request and not required by the handler would
throw a NullPointerException in some cases.

This involves the conversion of the parameter (a `String` parameter type
might not trigger this behavior) and sending a `null` within a reactive
stream, which is illegal per the RS spec.

We now rely on a `Mono.justOrEmpty()` to handle those specific cases.

Issue: SPR-17050
2018-07-18 14:41:43 +02:00
Juergen Hoeller 5fcfe0fa8e Polishing 2018-07-18 14:27:16 +02:00
Juergen Hoeller cab35aa788 StringUtils.parseLocaleString detects variant without country
Includes tests for parsing all available locales on the JVM, checking toString/toLanguageTag equality between parsed and original locale.

Issue: SPR-7598
Issue: SPR-16651
2018-07-18 11:10:26 +02:00
Stephane Nicoll d8ee1f5c83 Merge pull request #1887 from crewmanmud:patch-2
* pr/1887:
  Correct method signature in code example
2018-07-18 09:08:01 +02:00
Andrew McCallum d8878e4513 Correct method signature in code example
Closes gh-1887
2018-07-18 09:07:31 +02:00
Rossen Stoyanchev 6c4289e238 Polish 2018-07-17 17:39:16 -04:00
Rossen Stoyanchev 0bd7a3646c Update URI Encoding section 2018-07-17 15:58:27 -04:00
Juergen Hoeller b3d6283d7d CookieAssertionTests expects language tag compliance by default
Issue: SPR-16700
2018-07-17 18:18:54 +02:00
Juergen Hoeller ef9027e1c1 Polishing 2018-07-17 17:59:16 +02:00
Juergen Hoeller b8d2a16c31 UrlBasedViewResolver exposes redirect/forward prefix as bean name
Issue: SPR-17045
2018-07-17 17:58:19 +02:00
Juergen Hoeller 88e4006790 CookieLocaleResolver is RFC6265 and language tag compliant by default
Like CookieLocaleResolver, LocaleChangeInterceptor parses both locale formats by default now. Since it does not need to render the locale, its languageTagCompliant property is not relevant anymore at all.

The parseLocale method in StringUtils validates the locale value now and turns an empty locale into null, compatible with parseLocaleString behavior and in particular aligned with web locale parsing needs.

Issue: SPR-16700
Issue: SPR-16651
2018-07-17 17:57:59 +02:00
Juergen Hoeller 955665b419 Consistent processing of binding/validation failures for data classes
Includes an extension of SmartValidator for candidate value validation, as well as nullability refinements in Validator and BindingResult.

Issue: SPR-16840
Issue: SPR-16841
Issue: SPR-16854
2018-07-17 17:01:34 +02:00
Rossen Stoyanchev d8a2927dd3 Update URI links section after encoding changes
Issue: SPR-17039
2018-07-16 21:21:37 -04:00
Rossen Stoyanchev a41a1edd93 Switch to TEMPLATE_AND_VALUES as the default mode
DefaultUriBuilderFactory now uses EncodingMode.TEMPLATE_AND_VALUES by
default. However the RestTemplate explicitly sets it to the previous
setting EncodingMode.URI_COMPONENTS, so this affects mainly the
WebClient and any direct use of DefaultUriBuilderFactory to configure
either the RestTemplate or the WebClient.

Issue: SPR-17039
2018-07-16 21:21:37 -04:00
Rossen Stoyanchev 2a0eac47f9 Add TEMPLATE_AND_VALUES mode to DefaultUriBuilderFactory
Issue: SPR-17039
2018-07-16 21:21:37 -04:00
Rossen Stoyanchev 75e45103b5 Polish DefaultUriBuilderFactory 2018-07-16 21:21:34 -04:00
Juergen Hoeller b915e42c38 Resolve target type for GenericHttpMessageConverter.canWrite/write
Issue: SPR-16877
2018-07-16 19:45:35 +02:00
Juergen Hoeller cacd14c805 Never return null from AnnotationMetadata.getMetaAnnotationTypes
Issue: SPR-17046
2018-07-16 18:05:10 +02:00
Rossen Stoyanchev 5fb4982026 Support for encode() in UriComponentsBuilder
The ability to request to encode before `build()`, and more importantly
before expanding, allows stricter encoding to be applied to URI vars
and consequently to neutralize the effect of characters with reserved
meaning in a URI.

Issue: SPR-17039
2018-07-16 09:16:11 -04:00
Juergen Hoeller fe2eeb43f1 Upgrade to Groovy 2.5.1 2018-07-16 14:50:43 +02:00
Juergen Hoeller 77d72f1e01 Injected Map/Collection does not include null bean entries
Issue: SPR-17034
2018-07-16 13:04:38 +02:00
Juergen Hoeller faef363e85 Evaluate @Cacheable(condition) once per method invocation only
Issue: SPR-17024
2018-07-16 13:04:14 +02:00
Juergen Hoeller 93d91219fd Support for "cacheRegionFactory" injection with Hibernate 5
Issue: SPR-17043
2018-07-16 13:03:46 +02:00
Stephane Nicoll 333ec7400e Fix typo
Issue: SPR-17042
2018-07-15 16:17:48 +02:00
Juergen Hoeller f6fdffd663 Lazily retrieve delegate beans in AsyncConfigurer and CachingConfigurer
Introduces a configure method pattern for Supplier-style configuration and a common SingletonSupplier decorator for method reference suppliers. Also declares jcache.config and jcache.interceptor for non-null conventions.

Issue: SPR-17021
2018-07-14 19:29:32 +02:00
Juergen Hoeller 680afa75d8 ListableBeanFactory.getBeansOfType does not include null bean entries
Issue: SPR-17034
2018-07-14 01:02:39 +02:00
Rossen Stoyanchev 24a30baa2a Typos in InMemoryWebSessionStore 2018-07-13 17:51:23 -04:00
Rossen Stoyanchev 43fbd63254 Add maxSessions, getSessions, removeExpiredSessions
This commit removes the session threshold check added recently which
is not effective since maxIdleTime is usually much longer than the
frequency of checks. The lazy triggering of expiration checks during
create or retreive are simple and the most effective

This commit also adds a maxSessions limit on the total number of
sessions that can be created at any one time, a getSessions method
for management purposes, and a removeExpiredSessions public API
for manual triggering of expiration checks.

Issue: SPR-17020, SPR-16713
2018-07-12 16:12:19 -04:00
Brian Clozel 75fa9c4266 Fix checkstyle issues 2018-07-12 21:54:32 +02:00
Brian Clozel 038af9a303 Improve unknown status codes handling by WebClient
Prior to this commit, `WebClient` would throw `IllegalArgumentException`
when receiving an HTTP response with an unknown HTTP status code.

This commit is a follow up of SPR-16748 (supporting non-standard HTTP
status codes on the reactive `ClientHttpResponse`), and is mirroring
SPR-15978 (supporting non-standard HTTP status codes in `RestTemplate`).

With this change, `WebClient` now tolerates unknown status codes in some
cases, while not offering that choice as a first class citizen:
`HttpStatus` is still the preferred way to deal with HTTP status codes.

Here's how `WebClient` will behave when fetching the full response:

```
// Given a remote endpoint returning a "123" HTTP status code
Mono<ClientResponse> result = this.webClient.get()
				.uri("/status/123")
				.exchange();

// will still throw an IllegalArgumentException
HttpStatus status = result.block().statusCode();

// is safe and will return 123
int statusCode = result.block().rawStatusCode();
```

Resolving directly the response body with `retrieve()` is different.

```
// will send an error signal with a UnknownHttpStatusCodeException
Mono<String> result = this.webClient.get()
				.uri("/status/123")
				.retrieve()
				.bodyToMono(String.class);
```

In general, `WebClient` will provide high-level support
for well-known HTTP status codes, like error handling with
`WebClient.ResponseSpec#onStatus`.

For such support with unknown status codes, it is better to rely
on lower level constructs such as `ExchangeFilterFunction`.

Issue: SPR-16819
2018-07-12 19:08:08 +02:00
Juergen Hoeller f123d6c3bc Upgrade to Netty 4.1.27 and Commons Pool 2.6 2018-07-12 16:53:37 +02:00
Rossen Stoyanchev 32b75221b3 Improve expired session check algorithm
1. Add session count threshold as am extra pre-condition.
2. Check pre-conditions for expiration checks on every request.

Effectively an upper bound on how many sessions can be created before
expiration checks are performed.

Issue: SPR-17020
2018-07-11 15:59:18 -04:00
Rossen Stoyanchev e9ed45ee3b Fix code completion typo 2018-07-11 11:13:57 -04:00
Rossen Stoyanchev 7b3a72f483 Warn when SimpleAsyncTaskExecutor is used
Issue: SPR-16203
2018-07-11 11:10:03 -04:00
Rossen Stoyanchev 1b1bc7f5b5 Switch defaults and model for logging sensitive data
Issue: SPR-17029
2018-07-11 11:10:03 -04:00
Rossen Stoyanchev a40d25a760 Remove no-op classes in web-related Java config 2018-07-11 11:10:03 -04:00
Rossen Stoyanchev 3d6e38bb43 Conditional registration of task scheduler for SockJS
Issue: SPR-16189
2018-07-11 11:10:03 -04:00
Rossen Stoyanchev 6aa6d91ea9 Remove deprecated constructors in WebSocket config
In preparation for SPR-16189.
2018-07-11 11:10:03 -04:00
Juergen Hoeller c2fbd9f321 Upgrade to Rome 1.11 and OpenPDF 1.1 2018-07-11 16:48:12 +02:00
Juergen Hoeller 2ede6f65b4 Upgrade to Netty 4.1.26 and Undertow 2.0.10 2018-07-11 15:48:37 +02:00
Juergen Hoeller 6887802526 Fallback to ClassLoader.defineClass for Lookup.defineClass LinkageError
Issue: SPR-16902
2018-07-10 22:13:57 +02:00
Juergen Hoeller 3a4b5c2ade RootBeanDefinition publicly exposes target type as ResolvableType
Issue: SPR-17028
2018-07-10 19:28:12 +02:00
Juergen Hoeller a1d209726c Upgrade to ASM master (6.2+) and CGLIB 3.2.7
Issue: SPR-16398
2018-07-10 18:51:01 +02:00
Stephane Nicoll aabc5d9766 Merge pull request #1880 from GuiRitter:patch-2
* pr/1880:
  Fix typo
2018-07-10 15:48:11 +02:00
Guilherme Alan Ritter 7f54ae109a Fix typo
Closes gh-1880
2018-07-10 15:39:31 +02:00
Brian Clozel 818e4b0776 Refine Content-Range support for Resources
This commit restricts the support of `"Content-Range"` when returning
`Resource` instances from Controllers - now only "HTTP 200 OK" responses
will be considered, as Controllers might want to handle content range
themselves.

Issue: SPR-16921
2018-07-10 12:11:23 +02:00
xiexed d5df097e0e Small typo fixes in WebSocketHandler doc 2018-07-09 14:27:23 -04:00
Rossen Stoyanchev 931581a1e0 Polish Reactive Spring Web section 2018-07-09 14:27:23 -04:00
Brian Clozel d00f6f09a5 Polish ContentCachingRequestWrapper
Issue: SPR-15762
2018-07-09 19:15:29 +02:00
zilong6 4d0800f392 Improve ContentCachingRequestWrapper performance
This commit improves the performance of `read` method variants
to write to the cache in an optimized way.

Issue: SPR-15762
2018-07-09 19:15:21 +02:00
Arjen Poutsma 2ac6a15f6f Add setBearerAuth method
Issue: SPR-16997
2018-07-09 17:06:55 +02:00
Arjen Poutsma a663454fad Changed Basic Authentication consumer to setBasicAuth method
This commit changes the Basic Authentication Consumer<HttpHeaders> to
a basic setBasicAuth(String, String) method.

Issue: SPR-16913
2018-07-09 16:41:51 +02:00
Juergen Hoeller a80c5121fe Polishing 2018-07-09 15:53:44 +02:00
Juergen Hoeller d9e8d3bbe1 Custom "jdbcExceptionTranslator" on HibernateJpaDialect
Also available on LocalSessionFactoryBean through HibernateExceptionTranslator, as with our former Hibernate 3 support.

Issue: SPR-17015
2018-07-09 15:52:36 +02:00
Juergen Hoeller 39d455073a Update ref doc references to Number/Currency/PercentStyleFormatter
Issue: SPR-17022
2018-07-09 15:48:45 +02:00
Juergen Hoeller 833343f17c Specifically rethrow IllegalAccessError in isPresent/resolveClassName
Issue: SPR-17018
2018-07-09 14:31:45 +02:00
Juergen Hoeller fd0220b85c Suppress rawtypes warning for createReferenceArray 2018-07-09 14:28:15 +02:00
stsypanov 6d6aa72e8f improve performance of projection instantiation 2018-07-09 13:39:23 +02:00
Sam Brannen 581acb62a0 Refine wording 2018-07-08 14:11:04 +02:00
Sam Brannen 8d09222799 Improve description of return value for queryForList(..) 2018-07-08 13:34:56 +02:00
Rossen Stoyanchev 4bd22eeb13 Fallback logger for logging in http and codec packages
Issue: SPR-17012
2018-07-07 10:54:03 -04:00
Rossen Stoyanchev bca9f51092 Polish hint for suppressing logging at Encoder/Decoder 2018-07-06 20:32:08 -04:00
Rossen Stoyanchev 2874dd75ca Fine-tune WebFlux logging at HTTP/WebSocket level
1. Use special category prefix "spring-web.reactivestreams" for logging
of reactive streams signals in spring-web, since those are quite
verbose would fill the logs at TRACE.

2. Add and use loggers in request and websocket session implementations
separate from reactive streams bridge for regular TRACE logging.

3. Improve log messages and add where missing (e.g. for Reactor)

Issue: SPR-16898
2018-07-06 17:33:16 -04:00
Rossen Stoyanchev 7746878b50 Remove workaround for Reactor Netty #171 2018-07-06 15:44:24 -04:00
Rossen Stoyanchev bc3cf0eeb8 Expose request id at the ServerHttpRequest level
Hiding it (at AbstractServerHttpRequest) complicates matters since
requests are often mutated and decorated, plus it's also possible to
implement the interface directly (we've one, albeit corner case).

Issue: SPR-16966
2018-07-06 15:44:24 -04:00
Rossen Stoyanchev 5dc49b16ea Correlated messages at HTTP adapter + WebSocket level
Issue: SPR-16966
2018-07-06 15:44:18 -04:00
Rossen Stoyanchev 7be2943c03 Simplify WebSocket client implementationss in WebFlux
1. Eliminate WebSocketClientSupport base class whose main value was
to provide logging but those methods get in the way of inserting a
log prefix.

2. Remove checks and synchronization in lifecycle methods of Jetty
client since underlying Jetty client already has that.
2018-07-06 15:17:11 -04:00
Sebastien Deleuze fd69c90fcb Add ServerResponse extensions for json, xml and html
Issue: SPR-17017
2018-07-06 14:52:11 +02:00
Juergen Hoeller 2cd006923c Polishing 2018-07-06 14:38:29 +02:00
Sebastien Deleuze c0264072ab Avoid ServerResponse static imports in WebFlux router DSL
Provide functions like ok() in RouterFunctionDsl to avoid
ServerResponse static imports.

Issue: SPR-17009
2018-07-06 13:50:27 +02:00
Arjen Poutsma 37a3765a4e Fix checkstyle errors 2018-07-06 13:38:17 +02:00
Juergen Hoeller b4fc7943e1 Make javax.inject.Provider impl invisible for nested class introspection
Issue: SPR-17014
2018-07-06 13:20:03 +02:00
Arjen Poutsma 490302ebf8 Added RequestPredicates.methods(HttpMethod...)
Added a predicate that tests for multiple HTTP methods.
2018-07-06 12:01:16 +02:00
Arjen Poutsma 91e96d8084 Improve RouterFunction builder
This commit improves the RouterFunctions.Builder based on conversations
had during the weekly team meeting.

Issue: SPR-16953
2018-07-06 12:01:08 +02:00
Juergen Hoeller 22ccdb285f Upgrade to Hibernate ORM 5.3.2 and 5.1.15 2018-07-06 01:23:07 +02:00
Juergen Hoeller d8c7270c00 Consistent Iterator/Stream support in PropertySources and PropertyValues
Issue: SPR-16894
2018-07-05 23:59:56 +02:00
Rossen Stoyanchev bb3061d112 Polish 2018-07-05 14:08:05 -04:00
Violeta Georgieva 22f6e5b9ff Adapt ReactorHttpsServer to lates Reactor Netty changes 2018-07-05 14:00:01 -04:00
Juergen Hoeller d2eb4d2671 SpringBeanContainer falls back to Hibernate's default producer
Issue: SPR-17010
2018-07-05 17:54:07 +02:00
Juergen Hoeller 620e83c35d SpringBeanContainer is public for custom JPA configuration purposes
Issue: SPR-16305
2018-07-05 16:48:35 +02:00
Rossen Stoyanchev 39d5874441 Use connection id in server log messages if possible
Issue: SPR-16966
2018-07-05 08:32:27 -04:00
Rossen Stoyanchev 5cdc26770e Correlated WebClient log messages
Issue: SPR-16966
2018-07-05 08:30:23 -04:00
Rossen Stoyanchev 82310660fd Correlated encoding/decoding log messages via hints
Issue: SPR-16966
2018-07-05 08:28:15 -04:00
Rossen Stoyanchev fd90b73748 Correlated WebFlux server log messages
Issue: SPR-16966
2018-07-05 08:27:13 -04:00
Juergen Hoeller 010ba33d03 Propagate read-only status through setDefaultReadOnly(true) for JPA
This involves a new ResourceTransactionDefinition variant that JpaTransactionManager indicates a transaction-local EntityManager on. HibernateJpaDialect uses this indicator for hard read-only behavior.

Issue: SPR-16956
2018-07-05 13:53:35 +02:00
Juergen Hoeller 83faee67d5 HttpMessageNotReadableException provides access to HttpInputMessage
Issue: SPR-15588
2018-07-04 22:46:09 +02:00
Juergen Hoeller fc699b2b37 @Bean provides autowireCandidate flag (analogous to XML definitions)
Issue: SPR-16204
2018-07-04 22:41:05 +02:00
Juergen Hoeller 182243d20d BeanDefinitionOverrideException in case of overriding not allowed
Issue: SPR-16982
2018-07-04 21:32:51 +02:00
Juergen Hoeller 63d6215247 Polishing 2018-07-04 19:23:27 +02:00
Juergen Hoeller c0d4cb55c7 LocalSessionFactoryBuilder provides Hibernate 5.3 BeanContainer support
LocalSessionFactoryBean automatically registers its containing BeanFactory as a BeanContainer when Hibernate 5.3 or higher is on the classpath.

Issue: SPR-16305
2018-07-04 19:23:19 +02:00
Juergen Hoeller 5dc8b5de6d Polishing 2018-07-04 15:07:17 +02:00
Juergen Hoeller 094c9b8bd2 LocalSessionFactoryBean and HibernateTransactionManager for JPA setup
SessionHolder extends EntityManagerHolder now, allowing for @PersistenceContext and co to interact with HibernateTransactionManager's thread-bound transactions, and SpringSessionContext is capable of interacting with JpaTransactionManager by detecting a plain EntityManagerHolder as well.

Issue: SPR-17002
2018-07-04 15:07:09 +02:00
Juergen Hoeller a5dd0f0c09 Fix accidental @Nullable declaration on addAttribute(Object)
Issue: SPR-16831
2018-07-04 15:06:56 +02:00
Sam Brannen 160002cf8b Polishing 2018-07-04 14:33:39 +02:00
Sam Brannen 755add3087 Verify that TestContextBootstrapper resolution ignores duplicates
This commit introduces a test to verify that multiple declarations of
@BootstrapWith that register the same TestContextBootstrapper type
(i.e., duplicates) do not result in an error.

Issue: SPR-17006
2018-07-04 13:58:49 +02:00
Sebastien Deleuze 18781d70b4 Upgrade to Kotlin 1.2.51 2018-07-04 11:12:16 +02:00
Juergen Hoeller d22d408261 Propagate read-only status through Session.setDefaultReadOnly(true)
Issue: SPR-16956
2018-07-03 22:22:19 +02:00
Juergen Hoeller 0b86c71b2a LogFactoryService class for standard Commons Logging service discovery
Issue: SPR-16585
Issue: SPR-15903
2018-07-03 18:57:12 +02:00
Rossen Stoyanchev 8bffb6a798 Add defaultRequest option to WebClient.Builder
Issue: SPR-16873
2018-07-03 12:44:29 -04:00
Rossen Stoyanchev da5b705328 Polish default headers/attributes in WebClient 2018-07-03 12:44:29 -04:00
Rossen Stoyanchev 43d6ceb6f0 Align settings for sameSite and secure flag
After this change sameSite still gets a default value of "Strict" in
CookieWebSessionIdResolver but for changes to either sameSite or secure
it is now expected to use
addCookieInitializer(Consumer<ResponseCookie.ResponseCookieBuilder>).

Issue: SPR-16418, SPR-16980
2018-07-03 12:44:29 -04:00
Sebastien Deleuze 9b7a492bc9 Test RxReactiveStreams presence in ReactiveAdapterRegistry
Issue: SPR-17000
2018-07-03 18:00:47 +02:00
Juergen Hoeller f7d22a0b42 Move indexer implementation to index.processor subpackage (for Jigsaw)
Issue: SPR-16979
2018-07-03 17:55:24 +02:00
Juergen Hoeller 2fe3c36cc2 Polishing 2018-07-03 17:54:43 +02:00
Juergen Hoeller 9efddea5e0 Upgrade to Apache Johnzon 1.1.8 and JCA 1.7.1 2018-07-03 15:53:49 +02:00
Juergen Hoeller f2787cfb35 Same method filtering in ConstructorResolver and getTypeForFactoryMethod
Issue: SPR-16999
2018-07-03 15:53:17 +02:00
Sebastien Deleuze dcbaecea2a Perform explicit class checks in ReactiveAdapterRegistry
In order to allow Spring Framework applications running as GraalVM
native images, ReactiveAdapterRegistry should perform explicit class
checks instead of catching Throwable in order to avoid
UnsupportedFeatureError errors.

Issue: SPR-17000
2018-07-03 13:35:11 +02:00
Juergen Hoeller e485abbe56 Fix checkstyle violation (plus related polishing)
Issue: SPR-16913
2018-07-02 23:56:58 +02:00
Juergen Hoeller d08b72a75a Consistent throwing of HttpMessageNotReadableException vs IOException
Includes specific fine-tuning of ProtobufHttpMessageConverter and JAXB2 based message converters, as well as revised javadoc for abstract base classes.

Issue: SPR-16995
2018-07-02 22:37:29 +02:00
Juergen Hoeller 779cf8d240 ConcurrentReferenceHashMap caches EntrySet in volatile field
Includes an efficient implementation of isEmpty(), not relying on a full entry count but rather backing out once a non-empty hash segment has been found.

Issue: SPR-16994
2018-07-02 22:32:57 +02:00
Juergen Hoeller 06f9fb9aeb Refine Class serializability check for actual Graal compatibility
Issue: SPR-16992
2018-07-02 22:32:29 +02:00
Arjen Poutsma 6bcf6ffb06 Add Basic Authentication Consumer
Issue: SPR-16913
2018-07-02 15:16:03 +02:00
Juergen Hoeller e5a6711d29 Consistent final declaration for static delegate classes
Issue: SPR-16968
2018-07-02 13:55:18 +02:00
Juergen Hoeller 2ade122543 Bypass serializable type wrapping if java.lang.Class not serializable
Issue: SPR-16992
2018-07-02 13:55:03 +02:00
Juergen Hoeller 4ff1e3e74b Consistent abstract declaration for utility classes (plus polishing)
Issue: SPR-16968
2018-07-01 02:31:20 +02:00
Rossen Stoyanchev e72f4ec501 Fix checkstyle error 2018-06-29 21:45:43 -04:00
Rossen Stoyanchev d74e09a925 Polish MockClientHttpRequest 2018-06-29 17:37:45 -04:00
Rossen Stoyanchev 7f555785dd Add getBodyAsString() to MockClientHttpRequest
Issue: SPR-16988
2018-06-29 17:34:23 -04:00
Rossen Stoyanchev 51ec7c6b4a Add hook for customizing response cookie
Issue: SPR-16980
2018-06-29 18:15:52 -03:00
Rossen Stoyanchev 5ec8db1adc Polish CookieWebSessionIdResolver 2018-06-29 18:15:52 -03:00
Rossen Stoyanchev 907a306ee2 Fix locally failing test in FlushingIntegrationTests 2018-06-29 18:15:52 -03:00
Damiano Albani 3165b3c024 Fix typo in Java doc 2018-06-29 18:12:43 -03:00
Juergen Hoeller 641039d85d Polishing 2018-06-29 22:36:08 +02:00
Juergen Hoeller e22466e9d5 Polishing 2018-06-29 19:44:15 +02:00
Juergen Hoeller df6b01a329 Remove deprecated classes and methods from early 5.0.x phase 2018-06-29 19:44:08 +02:00
Juergen Hoeller 5b24040b5e JtaAnnotationTransactionAspect configured by default (in aspectj mode)
Issue: SPR-16987
2018-06-29 19:43:38 +02:00
Juergen Hoeller d58c09b89f Up-to-date coverage of task executor and scheduler variants
Includes a clarification of ThreadPoolExecutor configuration options and a note on early AsyncConfigurer initialization.

Issue: SPR-16944
Issue: SPR-16945
2018-06-29 19:43:14 +02:00
Juergen Hoeller 71aee9211f Upgrade to Mockito 2.19 and Mockito Kotlin 1.6 2018-06-28 18:02:24 +02:00
Juergen Hoeller d34e6f7f70 Polishing 2018-06-28 18:02:07 +02:00
Juergen Hoeller 8ad5299f4a Polishing 2018-06-28 17:12:29 +02:00
Juergen Hoeller 6f8a524eaa Upgrade to Tomcat 9.0.10, RxJava 2.1.16, EclipseLink 2.7.2, Selenium 3.13 2018-06-28 14:52:35 +02:00
Juergen Hoeller 40efcc933c Polishing 2018-06-28 14:51:33 +02:00
Juergen Hoeller b68e692854 Conventions lazily retrieves shared ReactiveAdapterRegistry
Issue: SPR-16981
2018-06-28 14:47:52 +02:00
Juergen Hoeller 7a02e438e7 StringUtils.cleanPath retains plain pointer to current directory
Issue: SPR-16908
2018-06-28 14:15:16 +02:00
Juergen Hoeller b6d95567e8 Explicit support for Hibernate Integrators on LocalSessionFactoryBean
Issue: SPR-16828
2018-06-28 14:15:16 +02:00
Juergen Hoeller b0ece0e967 Remove hard configuration validation from SpringClassRule/MethodRule
Issue: SPR-16967
2018-06-28 14:15:16 +02:00
Juergen Hoeller 08e1c8cfaf Fix FreeMarker escaping regression for messages and separators
Issue: SPR-16951
2018-06-28 14:15:16 +02:00
Juergen Hoeller bac68c8d3f StandardServletMultipartResolver accepts any HTTP method for multipart
Issue: SPR-16975
2018-06-28 14:15:16 +02:00
Juergen Hoeller bf5fe46fa9 CachedIntrospectionResults completely traverses interface hierarchy
Issue: SPR-16978
2018-06-28 14:15:16 +02:00
Juergen Hoeller 81cb740e0a New postProcessProperties variant on InstantiationAwareBeanPostProcessor
Allows for skipping the now-deprecated postProcessPropertyValues callback with its expensive PropertyDescriptor retrieval requirement. RequiredAnnotationBeanPostProcessor (which is dependent on postProcessPropertyValues) and the @Required annotation itself are also deprecated now: in favor of constructor injection (or afterPropertiesSet).

Issue: SPR-16918
2018-06-28 14:15:16 +02:00
Arjen Poutsma 794693525f Polishing 2018-06-28 14:09:34 +02:00
Arjen Poutsma a691065d05 Polishing 2018-06-28 11:27:30 +02:00
Arjen Poutsma 8202052b38 Introduce RouterFunction builder
This commit introduces RouterFunctions.Builder, a new way to build
router functions that does not require static imports, thus being more
discoverable and convenient.

Issue: SPR-16953
2018-06-28 11:23:38 +02:00
Phillip Webb a89e716cc7 Use tabs rather than spaces in tests
Update tests to ensure that tabs are used instead of spaces. Also
consistently apply a new line at the end of each file.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 1c25cec44f Polish test code
Polish a few issue identified when adding checkstyle to the
build. Although checkstyle is not enforcing rules on tests,
these are a few minor changes that are still worth making.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 81451aa800 Organize imports
Reorganize imports to ensure consistent ordering. This commit also
expands any `.*` static imports in favor of using fully-qualified
method references.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb b220d94cc2 Never use parenthesis for single lambda arguments
Update all lambdas that take a single argument so that parenthesis
are never used.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 5cedd0d5d4 Consistently use tabs rather than spaces
Update code that has accidentally used spaces instead of tabs.
Also remove all trailing whitespace.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb be85bd8e09 Don't use == when comparing strings
Fix a few places where `==` was accidentally used to compare
strings.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 13729364ab Consistently use only one statement per line
Ensure that only one statement is used per line.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb ad6d183a06 Remove unneeded conditional logic
Update `ConversionUtils` to remove conditional logic that isn't
necessary.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 634f5c2792 Ensure when equals() is implemented so is hashCode()
Update classes that override `equals()` to ensure that they also
implement `hashCode()`.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 9de3689f63 Never use 'this.' when accessing loggers
Ensure that `this.` is never used when accessing loggers.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 0b53c1096a Always use 'this.' when accessing fields
Ensure that `this.` is used consistently when accessing class
fields.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb eeebd51f57 Use consistent class design
Update all classes so that inner classes are always last. Also
ensure that utility classes are always final and have a private
constructor and make exceptions final whenever possible.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 0ad0f341bd Don't use single letter catch variables
Update existing catch blocks to ensure that `ex` is always used
in preference to `e` or `t` as the variable name.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 8f9aa06dfe Polishing AbstractBeanDefinition.equals 2018-06-28 10:28:44 +02:00
Phillip Webb 866e9d702e Use consistent block style
Update all code to use a consistent block style.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 04a8c285df Fix annotation styling issues
Update all annotations so that each is on its own line and
consistently use the short form (i.e. don't use `value=`) when
possible.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb e9d1b39aff Apply consistent copyright header
Add copyright header to `package-info.java` files and fix a few
malformed headers on existing java files.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb c3a17dfd47 Ensure all files end with a newline
Update all files to ensure that they always end with a new line.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb e0480f75ac Fix javadoc checkstyle issues
Fix checkstyle violations for javadoc.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb 032096d699 Add checkstyle to build
Add checkstyle to the build to enforce Spring Framework coding
conventions. Rule suppressions are used for several classes where
relaxing the rules makes more sense than fixing them.

Issue: SPR-16968
2018-06-28 10:28:44 +02:00
Phillip Webb d8ef6b7c74 Revert "Fix Eclipse import order"
This reverts commit c14f83e727.
2018-06-26 11:30:54 -07:00
Sam Brannen c14f83e727 Fix Eclipse import order 2018-06-26 17:34:25 +03:00
Phillip Webb 9477915dbf Update eclipse setting and instructions
Refine project specific eclipse settings and update the
instructions with details of how they can be applied.
2018-06-25 17:56:53 -07:00
Napster 8aa6e5bfea Undertow WebSocket sessions use shared ByteBufferPool
Issues: SPR-16957
2018-06-25 17:46:25 -03:00
Rossen Stoyanchev 7ccd2b024d Refine logging for async requests
Issue: SPR-16898
2018-06-25 14:42:29 -03:00
Juergen Hoeller 847202c8f8 MimeTypeUtils lazily initializes SecureRandom for multipart boundary
Issue: SPR-16974
2018-06-25 18:12:43 +02:00
Juergen Hoeller 2a15962d7f WebHttpHandlerBuilder retains ApplicationContext in copy constructor
Issue: SPR-16972
2018-06-25 18:12:12 +02:00
Sam Brannen 853d30df26 Complete the upgrade to Gradle 4.8.1
This commit upgrades the gradle-wrapper.jar.

Issue: SPR-16475
2018-06-24 18:16:52 +03:00
Rossen Stoyanchev 900bc8a2e3 Logging improvements for WebFlux
Issue: SPR-16898
2018-06-22 22:44:24 -04:00
Juergen Hoeller eaffcbe3be Upgrade to Gradle 4.8.1
Includes Kotlin 1.2.50, RxJava 2.1.15 and Protobuf 3.6.

Issue: SPR-16475
2018-06-22 22:49:12 +02:00
Rossen Stoyanchev 69d8f9d3ab Option to disable logging request details
Issue: SPR-16898
2018-06-19 16:53:37 -04:00
Sam Brannen cafb5033e2 Polishing 2018-06-19 13:50:13 +03:00
Brian Clozel 4a26f93a0d WebClient writes Content-Length for Mono bodies
In SPR-16892, the `EncoderHttpMessageWriter` has been improved to write
`"Content-Length"` HTTP response headers if the response body is of type
`Mono` (i.e. the actual content length is easily accessible without
buffering a possibly large response body). That change was relying on
the fact that the server side is using a `ChannelSendOperator` to delay
the writing of the body until the first signal is received.

This strategy is not effective on the client side, since no such channel
operator is used for `WebClient`. This commit improves
`EncoderHttpMessageWriter` and delays, for `Mono` HTTP message bodies
only, the writing of the body so that we can write the
`"Content-Length"` header information once we've got the body resolved.

Issue: SPR-16949
2018-06-19 11:51:45 +02:00
Stephane Nicoll a774305cfc Merge pull request #1860 from yuansuye:master
* pr/1860:
  Fix broken link to CONTRIBUTING.md
2018-06-19 09:07:45 +02:00
Ryan Yin df38af361c Fix broken link to CONTRIBUTING.md
Closes gh-1860
2018-06-19 09:07:07 +02:00
Rossen Stoyanchev c97acbbd8d Fix documentatio issue 2018-06-18 20:29:35 -04:00
Rossen Stoyanchev 03c305136d Fix failing tests 2018-06-18 20:20:32 -04:00
Rossen Stoyanchev 28a5c3009e Improve DEBUG/TRACE logging for Spring MVC
Issue: SPR-16898
2018-06-18 18:33:11 -04:00
Juergen Hoeller 003d643adc Consistent support for new JsonMappingException wording in Jackson 2.9
Issue: SPR-16947
2018-06-17 21:42:20 +02:00
Mark Chesney e4666c17ec Support new exception message wording since Jackson 2.9
The wording changed from "Can not find" to "Cannot find" via PR #1682

Issues: SPR-16947
2018-06-17 13:27:20 +02:00
Sam Brannen bea0e399b8 Polish profile expression support
Issue: SPR-12458
2018-06-17 00:15:18 +03:00
Sam Brannen 4184ebe799 Polish profile expression support
Issue: SPR-12458
2018-06-16 21:40:22 +03:00
Juergen Hoeller 38f9a7b072 FileSystemResource supports java.nio.file.Path based setup
Issue: SPR-16833
2018-06-15 22:12:14 +02:00
Juergen Hoeller bb6ab5dc91 OS-independent alphabetical sorting of directory content
Issue: SPR-16838
2018-06-15 22:09:29 +02:00
Juergen Hoeller 51091f2242 Suppress deprecation warning in DefaultBeanDefinitionDocumentReader
Issue: SPR-12458
2018-06-15 22:09:23 +02:00
Stephane Nicoll 1f3b4f1863 Polish "Add profile expression support"
Issue: SPR-12458
2018-06-15 16:01:16 +02:00
Phillip Webb e2623b7d35 Add profile expression support
Allow the `Environment` to accept a generic `Profiles` interface which
can support more complex matching rules. The previous
`acceptsProfiles(String...)` method now uses `Profiles.of` which
supports basic profile expressions such as "(a | b) & !c"

Issue: SPR-12458
2018-06-15 16:01:16 +02:00
Rossen Stoyanchev 58cce615f5 MvcUriComponentsBuilder is aware of path prefixes
Issue: SPR-16336
2018-06-14 22:11:53 -04:00
Rossen Stoyanchev e6fef9555d Check all HandlerMapping beans for named mappings
Related to (but not required by) SPR-16336.
2018-06-14 22:07:06 -04:00
Rossen Stoyanchev dad9ed83b7 Polish MvcUriComponentsBuilder 2018-06-14 22:07:06 -04:00
Sam Brannen e8bd16ab6e Polish Eclipse/STS Project Import Guide 2018-06-15 01:26:05 +03:00
Sam Brannen 802763d26f Reintroduce suppression of deprecation warning 2018-06-15 00:43:21 +03:00
Sam Brannen 8027e1f109 Remove obsolete suppression of deprecation warning 2018-06-14 22:48:34 +03:00
Sam Brannen 4ae4788e93 Delete unused import 2018-06-14 22:46:10 +03:00
Rossen Stoyanchev ebdcc015a4 Correctly set maxAge and expires in ResponseCookie
Issue: SPR-16940
2018-06-14 13:07:17 -04:00
Brian Clozel 09d9450154 Add SameSite support in WebFlux SESSION cookies
This commit adds support for the "SameSite" attribute in response
cookies. As explained in rfc6265bis, this attribute can be used to limit
the scope of a cookie so that it can't be attached to a request unless
it is sent from the "same-site".

This feature is currently supported by Google Chrome and Firefox, other
browsers will ignore this attribute.

This feature can help prevent CSRF attacks; this is why this commit adds
this attribute by default for SESSION Cookies in WebFlux.

See: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis

Issue: SPR-16418
2018-06-14 11:39:03 +02:00
Juergen Hoeller 1e5f8cc232 FilePart and MultipartFile provide transferTo(Path) variant
Also, ZeroCopyHttpOutputMessage provides writeWith(Path, int, int), enforcing that variant as the implementation target in 5.1 (analogous to FilePart).

Issue: SPR-16925
2018-06-14 00:42:36 +02:00
Juergen Hoeller c38cb43527 MethodParameter strictly asserts parameter index -1 for return type
Issue: SPR-16889
2018-06-14 00:42:19 +02:00
Rossen Stoyanchev afa45950ff Polish ExchangeFilterFunction[s] 2018-06-13 17:14:49 -04:00
Rossen Stoyanchev 0b61c748f6 Protected methods for serializing form content
Issue: SPR-16855
2018-06-13 17:14:49 -04:00
Rossen Stoyanchev 278881b8df Polish form writer and converter 2018-06-13 17:05:34 -04:00
Juergen Hoeller 0058a1f52d Upgrade to Jackson 2.9.6 2018-06-13 22:04:32 +02:00
Juergen Hoeller 0dc434b35e Polishing 2018-06-13 22:04:10 +02:00
Juergen Hoeller 3fc8ec498c MockHttpServletRequest returns a single InputStream or Reader
Issue: SPR-16505
Issue: SPR-16499
2018-06-13 22:03:16 +02:00
Juergen Hoeller 9aed9bf823 Allow for custom ScheduledTaskRegistrar and/or ScheduledMethodRunnable
Issue: SPR-16834
Issue: SPR-16812
2018-06-13 22:03:01 +02:00
Rossen Stoyanchev 0078f46779 Use reflection for JdkFlowAdapter
To avoid compiler issues on Eclipse.
2018-06-13 09:38:54 -04:00
Rossen Stoyanchev 928b7804c8 Add example of explicit handler method registration
Issue: SPR-16336
2018-06-12 15:23:45 -04:00
Dave Syer 39af1b2281 Add instructions for importing into Eclipse using Buildship 2018-06-12 14:11:27 -04:00
Rossen Stoyanchev 0c669def4f Minor polishing for URI encoding docs 2018-06-12 10:14:51 -04:00
Juergen Hoeller 0b64bcd319 Remove outdated Servlet environment constraints from annotation javadoc
Issue: SPR-16936
2018-06-12 11:28:13 +02:00
Allon Mureinik 2573a543b2 SPR-16936 Fix PathVariable javadoc
@PathVariable's javadoc states that it supports MultiValueMap
parameters (introduced by commit df0902), but by reading through the
code, that does not seem to be the case (compare, e.g.,
PathVariableMapMethodArgumentResolver to
RequestParamMapMethodArgumentResolver).

Moreover, parsing MultipleValueMap is done according to the ";"
character, and placing such a character in a path (e.g., consider
something like "/app/{param}/show" would just break the path.

This patch fixes PathVariable's javadoc by removing the mention of
MultiValueMap.
2018-06-12 11:12:57 +02:00
Brian Clozel 05ff8b722d Fix ResourceRegion HttpMessageConverter write checks
This commit fixes the write checks for
`ResourceRegionHttpMessageConverter`, which was previously not checking
properly the parameterized type (e.g. in case of a `List<Something>`).

Issue: SPR-16932
2018-06-11 22:53:55 +02:00
Rossen Stoyanchev ef41dcf687 Add HTTP caching to WebFlux section
Issue: SPR-16395
2018-06-11 16:39:12 -04:00
Rossen Stoyanchev 4a435c12f2 Polish Spring MVC docs on HTTP Caching
Issue: SPR-16395
2018-06-11 16:39:12 -04:00
Juergen Hoeller 59bd21d2fc Restore xjc 2.2.11 (since 2.3.0.1 also breaks with "xjc failed" on CI) 2018-06-11 22:14:21 +02:00
Juergen Hoeller 9c36b53833 Upgrade to JAXB 2.3.0.1, Aalto XML 1.1, Rome 1.10 2018-06-11 22:01:51 +02:00
Juergen Hoeller 0777a80efe Polishing
(cherry picked from commit a2765c0)
2018-06-11 19:17:57 +02:00
Juergen Hoeller 4aafbe5a84 Remove outdated javadoc references to SpEL lambda functions
Issue: SPR-16930

(cherry picked from commit 78d3164)
2018-06-11 19:16:14 +02:00
Brian Clozel a5cd01a4c8 Restrict HTTP methods on Reactive HiddenHttpMethodFilter
This commit restricts the allowed HTTP methods on HiddenHttpMethodFilter
(Reactive variant) to the following: PUT, DELETE, PATCH.

This filter is meant to be used to simulate those methods from HTML
forms sent by browsers, so no other methods are allowed.

Issue: SPR-16836
2018-06-11 18:53:23 +02:00
Brian Clozel f64fa3dea1 Restrict HTTP methods on Servlet HiddenHttpMethodFilter
This commit restricts the allowed HTTP methods on HiddenHttpMethodFilter
(Servlet variant) to the following: PUT, DELETE, PATCH.

This filter is meant to be used to simulate those methods from HTML
forms sent by browsers, so no other methods are allowed.

Issue: SPR-16836
2018-06-11 18:53:23 +02:00
Rossen Stoyanchev d196cdc5cd Update docs on @SendTo and @SendToUser
1. Explain that both can be used on the same method
2. Better describe semantics for class vs method level
3. General improvements

Issue: SPR-16336
2018-06-11 12:42:55 -04:00
Rossen Stoyanchev f4bffea739 Support for @SendTo and @SendToUser for same method
Issue: SPR-16891
2018-06-11 12:42:55 -04:00
Rossen Stoyanchev 7a70f7c5d8 Polish @SendTo test 2018-06-11 12:42:55 -04:00
Rossen Stoyanchev a31204938a Getter for DispatcherSerlvet in MockMvc
Issue: SPR-16924
2018-06-11 12:42:55 -04:00
Brian Clozel 417354da8a Remove dependency management noise from POMs
Prior to this commit, the generated POMs for Spring Framework modules
would contain unneeded/harmful information from the Spring Framework
build:

1. The BOM imports applied to each module by the dependency
management plugin, for example for Netty or Reactor Netty.
Spring should not export that opinion to its POMs.

2. The exclusion of "org.slf4:jcl-over-slf4j" from *all* dependencies,
which made the POMs much larger than necessary and suggested to
developers that they should exclude it as well when using all those
listed dependencies. In fact, only Apache Tiles currently brings that
transitively.

This commit removes that information from the POMs.
The dependencyManagement Gradle plugin is disabled for POM generation
and we manually resolve the dependency versions during the generation
phase.
The Gradle build is streamlined to exclude "org.slf4:jcl-over-slf4j"
only when necessary.

Issue: SPR-16893
2018-06-11 15:57:54 +02:00
Juergen Hoeller 7bce7504c7 JdbcTemplate consistently exposes first value of equally named columns
Issue: SPR-16578
2018-06-11 14:17:03 +02:00
Juergen Hoeller b790bd1fd6 LinkedCaseInsensitiveMap explicitly implements put/computeIfAbsent
Issue: SPR-16926
2018-06-11 14:10:12 +02:00
Juergen Hoeller 646d7f9e57 Unit tests for @MessageExceptionHandler cause and error resolution
Issue: SPR-16912
2018-06-11 13:44:43 +02:00
Stephane Nicoll fa82684c08 Merge pull request #1848 from cheese10yun:master
* pr/1848:
  Prevent instantiation of AnnotatedElementUtils
2018-06-11 08:34:11 +02:00
Yun 28e402bc76 Prevent instantiation of AnnotatedElementUtils
Closes gh-1848
2018-06-11 08:32:03 +02:00
Juergen Hoeller 65a6a04853 Upgrade to Jetty 9.4.11 2018-06-10 23:59:28 +02:00
Juergen Hoeller 0c8cfa05b5 AbstractMethodMessageHandler processes Error as MessageHandlingException
Issue: SPR-16912
2018-06-10 23:59:07 +02:00
Juergen Hoeller e2ccd55d14 ReflectivePropertyAccessor uses computeIfAbsent for cache computation
Issue: SPR-16882
2018-06-10 23:56:32 +02:00
Juergen Hoeller b71795ba36 Restore original DefaultLifecycleProcessor behavior for the time being
Issue: SPR-16901
2018-06-10 23:52:27 +02:00
Rossen Stoyanchev 86c861516d Accept Predicate instead of HandlerTypePredicate
Issue: SPR-16336
2018-06-08 15:32:07 -04:00
Brian Clozel 0092653d42 Fix JDK9 build after Groovy 2.5 upgrade
After the Groovy 2.5 upgrade, the Spring Framework build on JDK9 hit
GROOVY-8631. Adding the relevant `jax-api` dependency to the module
didn't fix this issue. The Groovy release notes mention the use of the
`--add-modules` JVM flag, but this is not an option for this build which
should run on JDK8 -> JDK11.

This commit changes the dependency from `groovy-all` to more focused
dependencies on Groovy in the `spring-beans` and `spring-context`
modules. This change seems to avoid the automatic loading of Groovy
enhancements to JAXB (shipped with `groovy-xml`).

See:

* http://groovy-lang.org/releasenotes/groovy-2.5.html#Groovy2.5releasenotes-Knownissues
* https://issues.apache.org/jira/browse/GROOVY-8631

Issue: SPR-15407
2018-06-08 13:37:44 +02:00
Sebastien Deleuze ac37b678a3 Remove JSONP support
CORS is now widely supported and should be used instead for cross-domain
requests.

Issue: SPR-16914
2018-06-08 12:15:48 +02:00
Rossen Stoyanchev 19dc981685 Path prefixes for groups of controllers
Issue: SPR-16336
2018-06-07 18:18:42 -04:00
Rossen Stoyanchev 31159a8506 Extract HandlerTypePredicate from ControllerAdviceBean
Issue: SPR-16336
2018-06-07 18:18:42 -04:00
Juergen Hoeller 25559b9e44 Polishing 2018-06-06 21:31:24 +02:00
Juergen Hoeller 7ece0e219e Correct code example for YamlProcessor.setDocumentMatchers
Issue: SPR-16849
2018-06-06 21:27:00 +02:00
Juergen Hoeller bfcc1a1f6a ReflectivePropertyAccessor caches sorted methods per class
Issue: SPR-16882
2018-06-06 21:25:53 +02:00
Juergen Hoeller 6cf197864c DefaultLifecycleProcessor properly handles count for dependent beans
Issue: SPR-16901
2018-06-06 21:25:26 +02:00
Juergen Hoeller 0941081b0a Upgrade to HSQLDB 2.4.1, Derby 10.14.2.0, HtmlUnit 2.31, Selenium 3.12 2018-06-06 21:24:53 +02:00
Rossen Stoyanchev 72b1d4c648 Remove explicit references to Reactor Netty version
...now that 0.8 is also listed in the Reactor bom.

Issue: SPR-16387
2018-06-06 14:35:54 -04:00
Rossen Stoyanchev fd946b8157 Protected getContentType in DecoderHttpMessageReader
Issue: SPR-16856
2018-06-05 16:23:21 -04:00
Rossen Stoyanchev 42b4a2feef Exapmle of configuring heartbeats for simple broker in docs
Issue: SPR-16905
2018-06-05 12:16:29 -04:00
Brian Clozel 522f71b907 Update Gradle plugins 2018-06-05 15:25:40 +02:00
Rossen Stoyanchev 3acb96efd0 CachingResourceResolver varies by known codings only
Issue: SPR-16381
2018-06-04 23:30:35 -04:00
Rossen Stoyanchev 010352163b Eliminate the need for Encoder#getContentLength
Issue: SPR-16892
2018-06-04 15:48:47 -04:00
Rossen Stoyanchev 124d4c833c Support for Servlet request params with HTTP DELETE
This commit adds FormContentFilter, which is the same as the
HttpPutFormContentFilter but also supports DELETE.

The HttpPutFormContentFilter is now deprecated.

Issue: SPR-16874
2018-06-04 15:48:47 -04:00
Stephane Nicoll 7396309dba Merge pull request #1849 from jasssonpet:patch-1
* pr/1849:
  Fix format typo in webmvc.adoc
2018-06-04 20:56:33 +02:00
Jason Zhekov 6f17c28246 Fix format typo in webmvc.adoc
Closes gh-1849
2018-06-04 20:56:09 +02:00
Sebastien Deleuze f2ee18493f Make RouterFunctionDsl extensible
Issue: SPR-16897
2018-06-04 15:35:25 +02:00
Stephane Nicoll f1871f9e3f Fix faulty BeanPostProcessorChecker logs with @EnableCaching
Issue: SPR-16896
2018-06-04 14:51:14 +02:00
Sam Brannen 2390695804 Upgrade to Gradle 4.8 2018-06-04 14:03:27 +02:00
Sam Brannen 5811d13d6c Upgrade to Gradle 4.7 2018-06-02 18:23:08 +02:00
Sam Brannen 237c0defa7 Use built-in Gradle wrapper task 2018-06-02 16:37:45 +02:00
Sam Brannen ce002b450a Upgrade to Groovy 2.5 GA
Issue: SPR-15407
2018-06-02 16:37:02 +02:00
Sebastien Deleuze b71d0eeec9 Fix Kotlin bean DSL conditional handling
Issue: SPR-16412
2018-06-01 14:40:27 +02:00
Juergen Hoeller 356bfe6e2e Upgrade to Joda-Time 2.10 2018-05-31 23:35:15 +02:00
Rossen Stoyanchev a3216432b5 Polish
Issue: SPR-16387
2018-05-31 15:38:30 -04:00
Violeta Georgieva ffbc75ae47 Upgrade to Reactor Netty 0.8
Issue: SPR-16387
2018-05-31 15:37:39 -04:00
Stephane Nicoll 61ffbe5554 Merge pull request #1844 from violetagg:fixes-in-docs
* pr/1844:
  Fix code examples for WebFlux functional endpoints
2018-05-31 15:19:10 +02:00
Violeta Georgieva aed63d38b2 Fix code examples for WebFlux functional endpoints
Closes gh-1844
2018-05-31 15:18:36 +02:00
Sebastien Deleuze a7a29a8226 Revisit PropertyResolver Kotlin extensions
Issue: SPR-16883
2018-05-31 12:20:37 +02:00
Stephane Nicoll ab9b575da6 Merge pull request #1843 from izeye:patch-6
* pr/1843:
  Polish doc
2018-05-31 10:20:10 +02:00
Johnny Lim 9c61bb6cdd Polish doc
Closes gh-1843
2018-05-31 10:19:57 +02:00
Juergen Hoeller 1b728fb244 Polishing 2018-05-30 11:10:37 +02:00
Juergen Hoeller 0c52699102 Revised example code (including correct visibility for execute method) 2018-05-30 11:10:29 +02:00
Juergen Hoeller f3e860e8f1 Resource handler tests expect status 404 for directory in jar file
Issue: SPR-16832
2018-05-30 00:31:35 +02:00
Juergen Hoeller 616a40adb6 ClassPathResource.isReadable() returns false for content length 0
Issue: SPR-16832
2018-05-29 22:31:47 +02:00
Juergen Hoeller 8d94d20770 Upgrade to Hibernate ORM 5.3.1 and Undertow 2.0.9 2018-05-29 21:53:06 +02:00
Juergen Hoeller b39ce80c87 Doc: @EnableScheduling needs to be declared per application context
Issue: SPR-16852
2018-05-29 21:52:51 +02:00
Juergen Hoeller c75423216c AbstractRequestLoggingFilter.isIncludeHeaders() declared as protected
Issue: SPR-16881
2018-05-29 21:52:31 +02:00
Juergen Hoeller 74fcdea2d9 SimpleAliasRegistry logs info message for alias overriding
Issue: SPR-16871
2018-05-29 21:51:33 +02:00
Juergen Hoeller 46a89d9534 Restore lenient null return value for ConditionContext.getBeanFactory()
Includes nullable return value for getClassLoader() with corresponding notes in applicable javadoc.

Issue: SPR-16866
2018-05-29 21:51:06 +02:00
Juergen Hoeller 5bbeadec0c Detect nested configuration classes even for empty outer classes
Issue: SPR-16839
2018-05-29 21:47:53 +02:00
Juergen Hoeller 69f14a2038 ClassPathResource.isReadable() checks InputStream (for jar directories)
Resource.isReadable() is defined to semantically imply exists() now.

Issue: SPR-16832
2018-05-29 21:47:33 +02:00
Juergen Hoeller 8593fec22c Avoid ConstantConditions warnings suppression (plus related polishing)
Issue: SPR-15756
2018-05-29 21:47:10 +02:00
Arjen Poutsma 8c30b8e628 Fix parent path variables in nested route functions
This commit fix an issue where path variables in a nested parent
RouterFunction were not committed to the request attributes.

Issue: SPR-16868
2018-05-29 15:48:31 +02:00
nkjackzhang e57d8e1e60 Remove extra backquote 2018-05-29 14:20:51 +02:00
Sebastien Deleuze be416ef9c4 Polish BeanDefinitionDsl
Issue: SPR-16412
2018-05-29 09:34:35 +02:00
Sebastien Deleuze 406f6ec74d Fix PropertyResolverExtensions.kt location 2018-05-28 15:51:22 +02:00
Rossen Stoyanchev 2acf91a438 Polish 2018-05-26 09:24:23 -04:00
Rossen Stoyanchev 3ede3a4b34 Extension point in HttpMessageConverterExtractor 2018-05-25 13:45:10 -04:00
Rossen Stoyanchev c7c3e5585b X-Forwarded-Ssl is listed in ForwardedHeaderFilter
Issue: SPR-16863
2018-05-25 13:39:37 -04:00
Rossen Stoyanchev d77797f42c Improve readability of Body[Inserters|Extractors] 2018-05-25 13:32:00 -04:00
Stephane Nicoll 9fb2fd66c0 Merge pull request #1836 from garyrussell:jmsdoc
* pr/1836:
  Fix JMS Doc typo
2018-05-25 16:31:50 +02:00
Gary Russell c4efe79d5a Fix JMS Doc typo
There is no such class `ReplyQosSettings`.

Closes gh-1836
2018-05-25 16:31:26 +02:00
Juergen Hoeller 836a09d5c0 Upgrade to Woodstox 5.1, XMLUnit 2.6, Gson 2.8.5 2018-05-25 00:18:06 +02:00
Rossen Stoyanchev 3eac2dd31e Support X-Forwarded-Ssl
Issue: SPR-16863
2018-05-24 16:14:12 -04:00
Rossen Stoyanchev 85e8634810 Properly initialize URI/Matrix vars w/ urlDecode=false
Issue: SPR-16867
2018-05-24 15:08:39 -04:00
Rossen Stoyanchev 2a993bf9ff Respect async request timeout of -1 in MockMvc
When falling back on the timeout associated with the async request,
a value of -1 must be treated as: never time out.

Issue: SPR-16869
2018-05-24 12:33:19 -04:00
Rossen Stoyanchev 82480a7908 Update docs on WebClient filters 2018-05-24 07:16:54 -04:00
Rossen Stoyanchev ed439eefcf Minor update to STOMP chapter
Issue: SPR-16681
2018-05-23 21:49:25 -04:00
Rossen Stoyanchev fbf25c536d ChannelInterceptor default methods + deprecate adapter 2018-05-23 21:48:19 -04:00
Rossen Stoyanchev eed663ff7e Fix error in WebFlux chapter on static resources
Issue: SPR-16864
2018-05-23 21:27:02 -04:00
Rossen Stoyanchev 72022899de Polish Forwarded header support 2018-05-23 21:23:23 -04:00
Rossen Stoyanchev 1e4a3a2370 Return SslInfo only if X509Certificate[] present
Issue: SPR-16842
2018-05-23 21:23:23 -04:00
Juergen Hoeller cb80eac9d7 Upgrade to RxJava 2.1.14 and Groovy 2.5 RC3 2018-05-24 00:58:45 +02:00
Rossen Stoyanchev d035593562 Update @RequestParam Javadoc and remove Portlet mentions 2018-05-23 11:52:14 -04:00
Rossen Stoyanchev b472d192f4 Improve support for caching encoded resources
The key in CachingResourceResolver now includes the "Accept-Encoding"
request header cleaned to exclude "*", "identity", and parameters, and
also sorted alphabetically.

For encoded resources the response now includes a response header with
"Vary: Accept-Encoding".

Issue: SPR-16381
2018-05-23 09:17:21 -04:00
Rossen Stoyanchev 9274de390a Polish resource handling tests 2018-05-23 09:17:21 -04:00
Rossen Stoyanchev f121aa5e31 Immutable Resource[Resolver|Transformer]Chains
Issue: SPR-16862
2018-05-23 09:17:21 -04:00
Rossen Stoyanchev 5207672b3f Configurable support for static resource encodings
The new EncodedResourceResolver is a generalized version of
GzipResourceResolver that can be configured to support different
content codings, by "br" and "gzip".

GzipResourceResolver is now deprecated.

Issue: SPR-16381
2018-05-23 09:17:21 -04:00
Sebastien Deleuze 3410155875 Upgrade to Dokka 0.9.17 2018-05-22 17:42:55 +02:00
Rossen Stoyanchev 9b496b1264 CodecConfigurer internal refactoring
Improve how HTTP message writers are obtained for general use vs for
multipart requests.
2018-05-21 21:10:44 -04:00
Rossen Stoyanchev 6e5273f08e Polish CodecConfigurer support classes
Functionally equivalent updates to package private classes to improve
the code and make it easier to understand.
2018-05-21 21:09:42 -04:00
Rossen Stoyanchev 1f8476aaf3 Add missing @param 2018-05-21 21:09:29 -04:00
Stephane Nicoll 36f8d49c4a Polish 2018-05-19 10:32:25 +02:00
Rossen Stoyanchev 192c7a5627 WebSession to WebSocketSession attribute passing
This commit makes it possible to pass attributes from the WebSession of
a handshake request to the WebSocketSession, by configuring a
Predicate<String> on HandshakeWebSocketService.

Issue: SPR-16212
2018-05-18 21:32:46 -04:00
Rossen Stoyanchev 9074828478 Add attributes to WebFlux WebSocketSession
Issue: SPR-16212
2018-05-18 21:32:46 -04:00
Rossen Stoyanchev e043481a26 STOMP client supports setting accept-version
Issue: SPR-16844
2018-05-18 21:32:46 -04:00
Rossen Stoyanchev 592dc628d5 Use specific XSD types in spring-websocket.xsd
Issue: SPR-16531
2018-05-18 21:32:46 -04:00
Rossen Stoyanchev d58888777f Polish ReactiveAdapterRegisry 2018-05-18 21:32:46 -04:00
Juergen Hoeller 285eb94a03 Upgrade to Hibernate Validator 6.0.10 2018-05-18 22:22:12 +02:00
Juergen Hoeller 6710291bbd Polishing 2018-05-18 22:21:33 +02:00
Juergen Hoeller d9c63182d9 MapSqlParameterSource.addValue declares nullable value parameter
Issue: SPR-16843
2018-05-18 22:20:29 +02:00
Juergen Hoeller 5b3bbad6a0 ConcurrentModel.addAttribute javadoc: null value not supported
Issue: SPR-16831
2018-05-18 22:20:08 +02:00
Rossen Stoyanchev fbd12e9d16 Support for SslInfo in ServerHttpRequest#mutate
Issue: SPR-16830
2018-05-17 17:27:52 -04:00
Rossen Stoyanchev ade2eab169 Polish WebFlux WebSocket docs
Issue: SPR-16820
2018-05-17 10:02:54 -04:00
Arjen Poutsma b03905e2b0 Improve toString for filtered router function
Issue: SPR-16829
2018-05-17 12:32:57 +02:00
Rossen Stoyanchev 543f190239 Expand WebFlux docs with WebSocketHandler examples
Issue: SPR-16820
2018-05-16 21:30:31 -04:00
Rossen Stoyanchev 37b0ed9fcb Improve TCP connection info logging.
After the recent changes to expose configuring TcpOperations, it no
longer makes sense to automatically log the relayHost/Port since that's
mutually exclusive with a custom TcpOperations.

Instead we delegate to TcpOperations.toString().

Issue: SPR-16801
2018-05-16 11:40:51 -04:00
Rossen Stoyanchev 4ff4d5a181 Allow client-side use of BodyExtractors#toFormData
Issue: SPR-16804
2018-05-16 10:41:50 -04:00
Rossen Stoyanchev 020c6c0102 Polish: remove Javadoc tags from spring-websocket.xsd 2018-05-16 10:18:01 -04:00
Rossen Stoyanchev 29158aa79a Expose timeToFirstMessage in Java/XML config
Issue: SPR-16531
2018-05-16 10:03:57 -04:00
Rossen Stoyanchev 18854ee544 Polish: simplify ControllerMethodResolver initialization 2018-05-16 10:03:57 -04:00
Arjen Poutsma 7424ca5790 Improve toString for query param and path extension predicates
Issue: SPR-16829
2018-05-16 11:14:21 +02:00
Juergen Hoeller 765d18eb94 Revised code examples for stored procedure type declarations
Issue: SPR-16811
2018-05-16 00:46:57 +02:00
Juergen Hoeller 009824598c SchedulerFactoryBean triggers shutdown after registration failure
Issue: SPR-16816
2018-05-16 00:45:33 +02:00
Juergen Hoeller 3c8c99664f Query termination for JPA 2.1 StoredProcedureQuery.execute() method
Issue: SPR-16826
2018-05-16 00:44:52 +02:00
Juergen Hoeller bba5dcaab3 AspectJExpressionPointcut evaluates interface method on proxy as well
Issue: SPR-16803
2018-05-16 00:43:51 +02:00
Sebastien Deleuze 265960f09c Add StatusResultMatchers.isEqualTo Kotlin extension
Issue: SPR-16429
2018-05-15 15:37:47 +02:00
Sebastien Deleuze 2c85be333c Filter synthetic in ReflectionUtils#USER_DECLARED_METHODS
Issue: SPR-16823
2018-05-15 14:58:50 +02:00
Juergen Hoeller e0ccbcbb66 Upgrade to Hibernate ORM 5.3 GA
Issue: SPR-16303
2018-05-15 12:33:33 +02:00
Sebastien Deleuze bdfee3417e Polishing 2018-05-15 10:45:20 +02:00
Eddú Meléndez 48c3fa9908 Add visibility support to Jackson2ObjectMapperBuilder
Issue: SPR-16411
2018-05-15 10:45:20 +02:00
Rossen Stoyanchev 7fd0cac6f2 Include FormHttpMessageReader in client codecs
Issue: SPR-16804
2018-05-14 23:16:36 -04:00
Rossen Stoyanchev 3af5f00ee7 UnsupportedMediaType[Status]Exception reports body type
Issue: SPR-16805
2018-05-14 23:16:36 -04:00
Rossen Stoyanchev 395792b302 Produces media types cleared prior to error handling
Issue: SPR-16318
2018-05-14 23:16:36 -04:00
Juergen Hoeller b3b233b43a Upgrade to Groovy 2.5 RC2
Includes upgrade to Netty 4.1.25, Undertow 2.0.7, Hibernate ORM 5.1.14.

Issue: SPR-15407
2018-05-15 01:02:08 +02:00
Rossen Stoyanchev 6cf6d8834c List OPTIONS in OPTIONS responses for @RequestMapping
Issue: SPR-16513
2018-05-14 09:05:03 -04:00
Rossen Stoyanchev f7d60b7f58 Add getResource to MultipartFile
Issue: SPR-16808
2018-05-14 09:04:33 -04:00
Rossen Stoyanchev ab6a6f4e17 Merge multipart and query param values
DefaultMultipartHttpServletRequest always returned mulitpart parameter
values only rather than aggregating with query parameters, which
contradicts with Servlet spec, section 3.1, and is inconsistent with
StandardMultipartHttpServletRequest.

Issue: SPR-16590
2018-05-14 09:03:55 -04:00
Rossen Stoyanchev 23001a6c3d Update WebFlux RequestPart tests
Issue: SPR-16621
2018-05-14 09:03:14 -04:00
Sebastien Deleuze ed97e14c7a Update Kotlin refdoc with the new tutorial 2018-05-14 10:55:42 +02:00
Rossen Stoyanchev 5cee607f28 WebFlux @RequestPart support for List and Flux arguments
The resolver now supports List<T>, Flux<T>, and List<Part>.

Issue: SPR-16621
2018-05-11 18:38:29 -04:00
Rossen Stoyanchev 15182b29a4 Add MockWebSession for use with MockServerWebExchange
Issue: SPR-16772
2018-05-11 10:53:28 -04:00
Rossen Stoyanchev 7f954ebc32 Inject UriComponentsBuilder relative to webapp root
Issue: SPR-16813
2018-05-11 09:52:02 -04:00
Rossen Stoyanchev 4da43de7e1 Remove individual detection of forwarded headers
This commit removes all places where forwarded headers are checked
implicitly, on an ad-hoc basis.

ForwardedHeaderFilter is expected to be used instead providing
centralized control over using or discarding such headers.

Issue: SPR-16668
2018-05-11 09:31:39 -04:00
Rossen Stoyanchev 82a8e42ff9 Correct coordinates for Reactor Netty in STOMP chapter
Issue: SPR-16802
2018-05-10 16:44:27 -04:00
Rossen Stoyanchev d3f3b41f52 MockHttpServletResponse writer sets committed flag
Issue: SPR-16683
2018-05-10 16:22:54 -04:00
Rossen Stoyanchev 79e809be24 Public RequestCallback/ResponseExtractor factory methods
Issue: SPR-8604
2018-05-10 15:39:47 -04:00
Rossen Stoyanchev eef592d901 Add builder to MockServerWebExchange
Issue: SPR-16772
2018-05-10 15:16:13 -04:00
Stephane Nicoll d82b0e37df Merge pull request #1824 from nkjackzhang:patch-1
* pr/1824:
  Fix a typo in javadoc
2018-05-10 17:32:36 +02:00
nkjackzhang a1fa0daad5 Fix a typo in javadoc
Closes gh-1824
2018-05-10 17:32:21 +02:00
Rossen Stoyanchev da6e9c6d54 Restore layout of docs zip with index.html at the top
Issue: SPR-16799
2018-05-09 17:29:04 -04:00
Sam Brannen 7444a62f98 Test Spring-managed JUnit Jupiter extension 2018-05-09 13:34:30 +02:00
Rossen Stoyanchev 1aadf2c3a6 Refine compareTo for param and header conditions
Issue: SPR-16674
2018-05-08 18:12:51 -04:00
Juergen Hoeller c238fb441b Polishing
(cherry picked from commit 2da02cc)
2018-05-08 00:58:58 +02:00
Juergen Hoeller a200df6c8d Explicit coverage of root vs cause exception matching in MVC ref docs
Issue: SPR-16743
2018-05-07 22:30:26 +02:00
Rossen Stoyanchev e4b4d3e2f6 Document throwExceptionIfNoHandlerFound property
Issue: SPR-16786
2018-05-07 16:10:49 -04:00
Juergen Hoeller 53aa9cc4cd Upgrade to Servlet API 4.0.1 (aligned with Tomcat 9 and Undertow 2)
Issue: SPR-16470
2018-05-07 14:17:28 +02:00
Juergen Hoeller 3917737df2 Polishing 2018-05-07 14:17:15 +02:00
nkjackzhang 321d7b0b06 Put CacheControl.empty() in else part.
Make sure the constructor of `CacheControl` being invoked only once.
2018-05-07 13:13:44 +02:00
Juergen Hoeller 795e5d306c Upgrade to JSR-354 Money & Currency API 1.0.3 and Moneta 1.2.1 2018-05-05 20:38:28 +02:00
Juergen Hoeller 504e2768de Add SAP HANA to common JPA database platforms
Issue: SPR-16460
2018-05-05 20:38:10 +02:00
Juergen Hoeller a4b44e2713 Upgrade to Hibernate ORM 5.3 CR2 2018-05-05 17:13:50 +02:00
Juergen Hoeller d0bd57b100 Polishing
(cherry picked from commit 0795ae5)
2018-05-05 17:04:24 +02:00
Juergen Hoeller 48807be482 Polishing 2018-05-05 15:16:08 +02:00
Juergen Hoeller c9f488363d Fine-tuned assertions and related polishing 2018-05-05 14:39:43 +02:00
Juergen Hoeller e17fc8d607 Upgrade to Tomcat 9.0.8, Undertow 2.0.6, Jetty 9.4.10, Gson 2.8.4 2018-05-05 12:47:34 +02:00
Juergen Hoeller 138b0d0bbd YamlProcessor embraces SnakeYAML 1.18+ duplicate key handling
Includes removal of StrictMapAppenderConstructor for compatibility with SnakeYAML 1.21.

Issue: SPR-16791
2018-05-05 12:47:11 +02:00
Juergen Hoeller 7b894fe73b ResponseEntityExceptionHandler rethrows unknown exception (for further processing in DispatcherServlet's HandlerExceptionResolver chain)
Issue: SPR-16743
2018-05-05 12:46:58 +02:00
Johnny Lim fb898e1727 Remove inconsistent spaces 2018-05-05 11:07:35 +02:00
Johnny Lim 8f21cb1a7c Polish DatabaseStartupValidator 2018-05-05 11:07:20 +02:00
Arjen Poutsma bfb2effddb Expose resource lookup function
This commit exposes the resource lookup function used by
`RouterFunctions.resources(String, Resource)`, so that it can be
composed upon.

Issue: SPR-16788
2018-05-04 13:36:24 +02:00
nkjackzhang cdf483fd50 Task "docsZip" copies duplicate reference files
Specify task "docsZip" source directory.
Issue: SPR-16789
2018-05-03 16:36:42 -04:00
Arjen Poutsma 51325afbcc Clean up path variables after non match
This commit makes sure the nested path variables are only commited to
the attributes when all predicates match.

Issue: SPR-16692
2018-05-03 11:02:46 +02:00
Stephane Nicoll 03af55a363 Merge pull request #1817 from sgrillon14:master
* pr/1817:
  Remove unnecessary boxing
2018-05-03 10:49:45 +02:00
Stéphane GRILLON c5278aa359 Remove unnecessary boxing
Closes gh-1817
2018-05-03 10:48:50 +02:00
Rossen Stoyanchev f7029ffca6 Uncomment ignored test after Reactor Core fix 2018-05-02 15:44:24 -04:00
Juergen Hoeller 9281f820f1 Expose FactoryBean's raw object on retrieval during post-processing
Issue: SPR-16783
2018-05-02 15:21:40 +02:00
Juergen Hoeller c8b6233bd0 Introspect originating bean definition as configuration class candidate
Issue: SPR-16756
2018-05-02 15:20:42 +02:00
Rossen Stoyanchev 4c021d04ce @Ignore failing test from reactor-core regression 2018-05-02 07:23:46 -04:00
Sebastien Deleuze af0cb53742 Support decoding Mono in Jaxb2XmlDecoder
Issue: SPR-16759
2018-05-02 12:10:46 +02:00
Arjen Poutsma 22edab852d Provide simple way to create ServerRequest
This commit introduces support for creating a new `ServerRequest` from
an existing instance. This is especially useful when filtering requests
in a HandlerFilterFunction.

Issue: SPR-16707
2018-05-02 10:54:00 +02:00
Juergen Hoeller f8c2d7ab51 Nullable HttpMethod parameter only on internal doExecute delegate
Issue: SPR-15540
2018-05-01 23:52:12 +02:00
Juergen Hoeller 21fad8e205 SimpleClientHttpResponse catches any Exception on close
Issue: SPR-16773
2018-05-01 23:51:05 +02:00
Juergen Hoeller ad0d79a97b Lenient fallback to plain getBundle call without Control handle
Includes defaultEncoding variant for platform default encoding.

Issue: SPR-16776
2018-05-01 23:50:34 +02:00
Juergen Hoeller ac1e2a4598 Consistent SpelEvaluationException messages in findAccessorForMethod
Includes abstract declarations for FormatHelper and ReflectionHelper.

Issue: SPR-16762
2018-05-01 23:48:26 +02:00
Rossen Stoyanchev 64b8b6e978 Polish WebSocketIntegrationTests 2018-05-01 14:26:21 -04:00
Rossen Stoyanchev 725d685799 ReactorNettyWebSocketSession implements close properly
Issue: SPR-16774
2018-05-01 12:04:37 -04:00
Oleksandr Hasheniuk 6545cab42c Improve performance of StringUtils#trimWhitespace
Issue: SPR-16766
2018-05-01 11:16:34 +02:00
Rossen Stoyanchev 8d157cb5b5 Consistent handling of URISyntaxException
Issue: SPR-16778
2018-04-30 21:02:36 -04:00
Rossen Stoyanchev 85ee36b385 Uncomment tests that now work 2018-04-30 19:47:14 -04:00
Jeremy Wright 1edd7c3540 Grammatical change. 2018-04-30 16:34:04 -04:00
Sam Brannen de4b65a0f3 Suppress warnings in RequestMappingMessageConversionIntegrationTests 2018-04-30 12:05:34 +01:00
Sam Brannen 6fa1095e35 Upgrade to JUnit Jupiter 5.2 2018-04-30 11:21:26 +01:00
Sebastien Deleuze ea713cf154 Upgrade to Kotlin 1.2.41
Fixes KT-23973 critical regression
2018-04-30 10:40:27 +02:00
Stephane Nicoll e51330e905 Keep YAML entries that haven an empty array value
Prior to this commit, a YAML entry that define an empty array value was
lost. This commit makes sure to flag it with an empty String, which
corresponds as an empty comma separated list of entries in the
properties format.

Issue: SPR-16769
2018-04-29 10:30:08 +02:00
Stephane Nicoll 2bd3b534fb Merge pull request #1813 from Nickolas-Evans:master
* pr/1813:
  Fix typo
2018-04-28 10:51:47 +02:00
Nickloas 0d36401f99 Fix typo
Closes gh-1813
2018-04-28 10:51:18 +02:00
Juergen Hoeller 674015154c Upgrade to RxJava 2.1.13 2018-04-27 23:38:04 +02:00
Juergen Hoeller 9bff5b48cf Fine-tuned assertions and related polishing in WebFlux builders 2018-04-27 23:36:58 +02:00
Johnny Lim 6519e7b22a Polish 2018-04-27 14:06:48 -04:00
Juergen Hoeller d979bbad2d Expose AspectJ 1.9.1 in Maven POMs
Includes upgrade to Hibernate ORM 5.2.17 for integration tests.

Issue: SPR-16780
2018-04-27 19:33:50 +02:00
Juergen Hoeller a683472daa Support for non-standard HTTP status in reactive ClientHttpResponse
Issue: SPR-16748
2018-04-27 18:25:11 +02:00
Juergen Hoeller 44cf002c00 Null-safe handling of response type in AcceptHeaderRequestCallback
Issue: SPR-16690
2018-04-27 18:24:59 +02:00
Juergen Hoeller d5aedac6db Avoid custom ResourceBundle.Control on Jigsaw (as far as possible)
Issue: SPR-16776
2018-04-27 18:24:31 +02:00
Juergen Hoeller eaff2c28a7 Consistent target method resolution for event and caching expressions
Issue: SPR-16779
2018-04-27 18:23:42 +02:00
Juergen Hoeller aa11721ff0 AopUtils.getMostSpecificMethod exposes dynamic proxy class methods
Includes efficient canApply check for IntroductionAwareMethodMatcher.

Issue: SPR-16757
2018-04-27 18:23:34 +02:00
sdeleuze 75a41db071 Fine tune WebFlux server logging verbosity
With this commit, WebFlux server uses warning instead of error log level
for request handling, and also just print the message instead of the
stacktrace which is mostly meaningless in reactive world.

Complementary to this change, Reactor Netty removed additional logging
as part of https://github.com/reactor/reactor-netty/issues/339.

Issue: SPR-16688
2018-04-27 10:40:48 +02:00
nkjackzhang 5b8c6c46e1 Fix broken anchor link in WebFlux refdoc 2018-04-27 08:47:16 +02:00
sdeleuze b5dfdbaa65 Reuse PartBodyStreamStorageFactory in SynchronossPartGenerator
Issue: SPR-16727
2018-04-26 10:59:11 +02:00
Johannes Edmeier 2a0540cb5f Move init of excchangeStrategies to default ctor in DefaultWebClientBuilder
When the copy constructor is used the exchangeStrategies need not to be
initialized as they are set in the copyconstructor

fixes SPR-16771
2018-04-26 10:28:38 +02:00
nkjackzhang d44f1ca2da Fix typos in Spring MVC refdoc
1. Consistent with "xml code" examples.
2. "xml()" is a static method and will use default builder config,
   so use createXmlMapper(true) instead.
3. Fix mvc namespace tag typo.
2018-04-26 10:00:50 +02:00
Rossen Stoyanchev 9bc4e70e93 Better assertion message in MockPart
Issue: SPR-16767
2018-04-25 09:59:06 -04:00
Stephane Nicoll 190e0c7481 Merge pull request #1806 from nkjackzhang:patch-2
* pr/1806:
  Fix typos
2018-04-25 10:07:10 +02:00
nkjackzhang 24e8afeb73 Fix typos
Closes gh-1806
2018-04-25 10:02:24 +02:00
Stephane Nicoll e0ea296e89 Merge pull request #1804 from hasheniuk:patch-1
* pr/1804:
  Fix typo
2018-04-24 10:05:56 +02:00
hasheniuk e0cb97abf0 Fix typo
Closes gh-1804
2018-04-24 10:05:43 +02:00
Rossen Stoyanchev 0e776d4e77 Add more detail to ISE in ServerEndpointExporter
Issue: SPR-16655
2018-04-23 17:03:09 -04:00
Rossen Stoyanchev de18d96413 Validate contextPath in RedirectView
Issue: SPR-16752
2018-04-23 15:26:18 -04:00
Brian Clozel e9a8a5065b Disable HTTP Range support for InputStreamResource
Prior to this commit, the `AbstractMessageConverterMethodProcessor`
would fail to convert `InputStreamResource` to `ResourceRegion` as
expected, since the content length cannot be read without consuming the
stream. This is enforced by the `HttpRange` class.

Now the method processor would still try to output HTTP range response
headers to provide range support information. This step is using the
resource content length and reads the input stream, leading to
exceptions such as "IllegalStateException: InputStream has already been
read".

This commit improves the return type detection and excludes early
`InputStreamResource` return types. With those types, HTTP range support
is now completely disabled.

Issue: SPR-16754
2018-04-23 18:39:05 +02:00
Sam Brannen ae3fd49ebb Introduce non-transactional test for TestNG support 2018-04-23 16:18:02 +02:00
sdeleuze 919f54b3f6 Upgrade Kotlin to 1.2.40 2018-04-23 15:02:28 +02:00
sdeleuze 1d6540b1c2 Enable KotlinScriptTemplateTests after KT-18833 fix 2018-04-23 14:49:22 +02:00
Stephane Nicoll 19ac212868 Merge pull request #1803 from dimitrisli:master
* pr/1803:
  Fix typo
2018-04-21 18:20:38 +02:00
Dimitrios (Dimi) Liapis 6d6da91ab9 Fix typo
See gh-1803
2018-04-21 18:16:13 +02:00
Brian Clozel 3f85eee510 Upgrade to Netty 4.1.24.Final 2018-04-21 09:33:06 +02:00
Stephane Nicoll bf71e86677 Delete ignored files
See gh-1799
2018-04-20 06:16:58 +02:00
Rossen Stoyanchev b6da63aeb7 Align with 5.0.x change #cd3ed7 2018-04-19 13:50:55 -04:00
Rossen Stoyanchev da98ff72d2 Use StringDecoder to split SSE stream
ServerSentEventHttpMessageReader had logic to split on new lines
and buffer until an empty new line (start of a new event). To account
for random data chunking, it later re-assembled the lines for each
event and split again on new lines. However bufferUntil was still
unreliable a chunk may contain nothing but a newline, which doesn't
necessarily mean an empty newline in the overall SSE stream.

This commit simplifies the above by delegating the splitting of the
stream along newlines to StringDecoder.

Issue: SPR-16744
2018-04-19 11:29:12 -04:00
Rossen Stoyanchev 30c98c8a1c Polish tests to use WebClient retrieve() 2018-04-19 09:39:34 -04:00
Daniel Kift 7eb8070d55 Polish WebFlux reference documentation 2018-04-18 12:00:53 +02:00
nkjackzhang fb0e3e9356 Fix a typo in @Nullable Javadoc 2018-04-18 11:53:09 +02:00
Rossen Stoyanchev 06041ea4e2 Polish (minor) in AbstractMessageReaderArgumentResolver 2018-04-17 17:58:03 -04:00
Rossen Stoyanchev babe6c59c4 Avoid creating Exception instance if not needed
Issue: SPR-16726
2018-04-17 17:58:03 -04:00
Juergen Hoeller 2f4010e8d3 Correctly delegate to OrderUtils.getPriority for DecoratingProxy
Issue: SPR-16739
2018-04-17 23:37:42 +02:00
Juergen Hoeller d78e27f1e9 Avoid repeated superclass introspection in findAnnotation(Method,...)
Issue: SPR-16730
2018-04-17 16:44:28 +02:00
sdeleuze 568a0b5b79 Make ResponseSpec.expectBody Kotlin extension usable
Prior to this commit, due to KT-5464 type inference issue there was not
proper way to provide body expectations with WebTestClient. This commit
provides a workaround by updating the existing Kotlin extension to
return a Kotlin compatible API.

Issue: SPR-15692
2018-04-17 15:00:04 +02:00
Juergen Hoeller 51be8a7303 Workaround for generic parameter types on inner class constructors
Issue: SPR-16734
2018-04-17 14:32:54 +02:00
Juergen Hoeller a2a8d0c754 Workaround for generic parameter types on inner class constructors
Issue: SPR-16734
2018-04-17 12:58:32 +02:00
Juergen Hoeller d4a55a257b OperatorMatches flags misguided evaluation attempts as FLAWED_PATTERN
Issue: SPR-16731
2018-04-17 11:10:15 +02:00
Juergen Hoeller c5b524db7c Restore original MethodMapTransactionAttributeSource matching rules
Issue: SPR-16733
2018-04-17 10:56:16 +02:00
Rossen Stoyanchev ff2228fdaf Selector header name is exposed for configuration
Issue: SPR-16732
2018-04-16 23:56:30 -04:00
Rossen Stoyanchev 586be50109 Fix typo 2018-04-16 10:02:47 -04:00
Rossen Stoyanchev 551505bd93 Restore handling of 0 bytes read
Issue: SPR-16728
2018-04-16 09:59:34 -04:00
Juergen Hoeller 0754833b37 Local XMLUnit dependency declarations with consistent version 2.5.1 2018-04-14 21:03:20 +02:00
Juergen Hoeller de4ff4b1fc Polishing 2018-04-14 21:02:53 +02:00
Juergen Hoeller b95e05db04 AspectJExpressionPointcut consistently resolves superinterface methods
Includes efficient check for same ClassLoader in ClassUtils.isVisible, efficient MethodMatchers check for IntroductionAwareMethodMatcher, and supertype method resolution in MethodMapTransactionAttributeSource.

Issue: SPR-16723
2018-04-14 15:10:05 +02:00
Sam Brannen c6ed41ec47 Suppress warning in SpringFailOnTimeoutTests 2018-04-14 15:02:57 +02:00
Stephane Nicoll 19d311dcb2 Merge pull request #1791 from nkjackzhang:patch-1
* pr/1791:
  Fix typo in javadoc
2018-04-13 13:16:05 +02:00
nkjackzhang 961c641973 Fix typo in javadoc
Closes gh-1791
2018-04-13 13:15:39 +02:00
Brian Clozel 69e3fde295 Avoid duplicate Accept header values in RestTemplate
Prior to this commit, the various `HttpMessageConverter` instances
configured for a given `RestTemplate` instance could all contribute
`MediaType` values to the "Accept:" request header.

This could lead to duplicate media types in that request header,
cluttering for the HTTP request for no reason.

This commit ensures that only distinct values are added to the request.

Issue: SPR-16690
2018-04-12 22:28:31 +02:00
Juergen Hoeller 0efa7a05ad ClassUtils.isCacheSafe delegates to isVisible for resolving classes
Issue: SPR-16714
2018-04-12 20:55:26 +02:00
Juergen Hoeller 46e3a919fe Cache-safety check for sibling loaders resolving the same classes
Issue: SPR-16714
2018-04-12 18:50:32 +02:00
Brian Clozel 1fa5f03635 Upgrade to Reactor Californium SNAPSHOTs 2018-04-12 17:25:49 +02:00
Juergen Hoeller 6184c4ecc9 Consistent getTypeForFactoryMethod result for parameterized method
Issue: SPR-16720
2018-04-12 15:14:41 +02:00
Juergen Hoeller 8e1ececd97 Fine-tuned JCA MessageEndpoint exception logging and propagation
Issue: SPR-16717
2018-04-12 14:46:26 +02:00
Juergen Hoeller 7ee6130680 Revised reference example for linkable controller method signature
Issue: SPR-16710
2018-04-12 14:45:11 +02:00
sdeleuze 97ee94f4ca Expose env and context in Kotlin beans DSL
This commit introduces a deferred initialization of the declared beans
in order to make it possible to access to the environment (and even
to the context for advanced use-cases) in the beans { } Kotlin DSL.

Issues: SPR-16269, SPR-16412
2018-04-12 11:31:37 +02:00
Sam Brannen 8317f12a9b Move SpringFailOnTimeoutTests to 'statements' package 2018-04-12 11:14:08 +02:00
Sam Brannen 4f3a7dd9b4 Expand scope of SpringFailOnTimeoutTests
Issue: SPR-16716
2018-04-12 10:56:40 +02:00
Igor Suhorukov 3c34a1cb8c Throw exception from user code in SpringFailOnTimeout even if a timeout occurs
Issue: SPR-16717
2018-04-12 10:37:13 +02:00
Rossen Stoyanchev 697d2e326f Merge pull request #1785 from cakofony/iterator_allocation 2018-04-11 21:54:32 -04:00
Rossen Stoyanchev cca78e42f1 Polish 2018-04-11 21:52:59 -04:00
Carter Kozak e2febbdd8c Remove unnecessary iterator allocation in type handlers
HandlerMethodReturnValueHandlerComposite and
AbstractMethodMessageHandler iterate using index over collections
implementing RandomAccess to avoid unnecessary iterators.
2018-04-11 21:39:32 -04:00
Rossen Stoyanchev 5b9e7e44e0 Improve WebClient test with ParameterizedTypeReference
Issue: SPR-16715
2018-04-11 16:19:53 -04:00
Rossen Stoyanchev 224589ea74 Remove write pausing in Undertow response
Using the simple example shown in the ticket but switching from
Mono<String> to Flux<String> (and 5,000,000 onNext calls) shows that
constant pausing causes significant overhead and is not worth the
trouble vs ignoring the onWritePossible in REQUESTED state.

Issue: SPR-16702
2018-04-11 14:27:27 -04:00
Rossen Stoyanchev 3549745e37 Avoid inifinite recursion in UndertowServerHttpResponse
Undertow does not provide a way to check if we can write so with the
current implementation of isWritePossible, deep recursion can occur
when writing slows down. We now use a flag to keep track of write
ChannelListener callbacks.

This commit also addresses a related issue in
AbstractListenerWriteProcessor that went undected since #3c2d186
where after a large (single) buffer that is not written fully, the
completion signal is processed before the all data is written.

Issue: SPR-16702
2018-04-11 14:27:27 -04:00
Juergen Hoeller e88ca0d633 Upgrade framework build to Tomcat 9.0 and Undertow 2.0
Issue: SPR-16470
2018-04-11 16:06:26 +02:00
Juergen Hoeller e170cb0f79 Upgrade framework build to JPA 2.2 and JTA 1.3
Issue: SPR-16685
2018-04-11 16:06:10 +02:00
Juergen Hoeller f28a5d0cf7 Proper exception for controller method return types that do not work with MvcUriComponentsBuilder (e.g. final classes)
Includes direct use of ControllerMethodInvocationInterceptor for return type Object, avoiding the attempt to generate an Object subclass.

Issue: SPR-16710
2018-04-11 16:05:54 +02:00
Juergen Hoeller a6885c7235 Polishing 2018-04-11 16:05:35 +02:00
Andreas Asplund 6a34ca24ce Restore org.springframework.cglib.core.KeyFactoryCustomizer.class
Issue: SPR-15859
2018-04-11 15:41:40 +02:00
sdeleuze 89d069b09d Add default ctor to Reactive UrlBasedCorsConfigurationSource
Issue: SPR-16712
2018-04-11 14:38:42 +02:00
Juergen Hoeller da80502ea6 AnnotationUtils.getAnnotation non-null check for synthesizeAnnotation
Issue: SPR-16708
2018-04-11 12:50:27 +02:00
Juergen Hoeller 61c3db0869 MethodHandles.Lookup.defineClass for CGLIB class definition purposes
Spring's CGLIB fork is patched with local copies of affected files here, introducing the notion of a "contextClass" (e.g. the proxy superclass) which gets passed through to ReflectUtils.defineClass for delegating to MethodHandles.Lookup.defineClass eventually, against a privateLookupIn(contextClass) lookup context on JDK 9/10/11.

Issue: SPR-15859
2018-04-11 12:47:55 +02:00
Juergen Hoeller cdaa247861 Unwind _TestTypes to top-level public test classes in AOP test suite 2018-04-11 12:43:49 +02:00
Sam Brannen 2523c3ab77 Clean up deprecation warning in spring-test 2018-04-11 12:03:55 +02:00
Sam Brannen 8874427cf4 Clean up warnings in spring-core 2018-04-10 13:10:58 +02:00
Arjen Poutsma 7e2726f400 Add remoteAddress() to ServerRequest
Issue: SPR-16681
2018-04-10 11:13:45 +02:00
Juergen Hoeller ff53d78e96 Remove bogus DataSource test from JpaTransactionManagerTests 2018-04-10 00:40:51 +02:00
Juergen Hoeller 9fbab791a0 Upgrade to TestNG 6.14.3, JUnit 5.1.1, Mockito 2.18 2018-04-10 00:12:28 +02:00
sdeleuze 27e87e5593 Document why "charset=UTF-8" is specified for JSON
Issue: SPR-14715
2018-04-09 12:03:17 +02:00
KwonJH 967ea152b7 Fix Java 9 link in the reference documentation 2018-04-09 11:10:37 +02:00
sdeleuze e4298e8366 Improve Kotlin + bean validation documentation
Issue: SPR-16701
2018-04-09 10:15:50 +02:00
Juergen Hoeller c82bf0b004 Upgrade to Mockito 2.17 2018-04-06 21:48:59 +02:00
Rossen Stoyanchev 313308208e TestDispatcherServlet unwraps to find mock request
Issue: SPR-16695
2018-04-06 11:02:46 -04:00
Brian Clozel 2dde000475 Document socket timeout config limitations for HttpClient
This commit documents the difference between configuring the socket
timeout on the `RequestConfig` and on the `SocketConfig`.

The first one does not affect timeouts when establishing an SSL
connection or sending a CONNECT request to a proxy. For these use cases,
it is required to configure `SocketConfig` on the `HttpClient` instance
directly.

Issue: SPR-16697
2018-04-06 16:35:17 +02:00
Jinghu Wang de3a9560d9 [docs] Fix formatting 2018-04-05 20:11:07 -04:00
Juergen Hoeller a6fd9a7725 Upgrade to FreeMarker 2.3.28 and Netty 4.1.23 2018-04-05 10:30:03 +02:00
Sam Brannen 56774baa2a Use Gradle 4.6's built-in support for the JUnit Platform
Gradle 4.6 provides built-in support for the JUnit Platform within the
standard `test` task.

This commit configures a custom `testJUnitJupiter` test task for
executing JUnit Jupiter tests directly on the JUnit Platform instead of
indirectly on JUnit 4 via @RunWith(JUnitPlatform.class).

This switch provides for better integration with Gradle's test reporting
and paves the way for a possible transition to the JUnit Platform in the
future.

Issue: SPR-16672
2018-04-04 15:43:44 +02:00
Sam Brannen aba882af4c Clean up warnings in spring-webmvc 2018-04-04 14:04:54 +02:00
Sam Brannen 2c648379ab Delete dead code in spring-webmvc 2018-04-04 14:01:24 +02:00
Thor Andreas Rognan 17c16eaa9e Upgrade to Gradle 4.6
Issue: SPR-16475
2018-04-04 12:39:09 +02:00
Sam Brannen 71cacff8c2 Upgrade to JUnit Jupiter 5.1
Issue: SPR-16408
2018-04-04 12:29:26 +02:00
sdeleuze f1727bfbdb Cleanup settings.gradle pluginManagement configuration 2018-04-04 11:08:13 +02:00
sdeleuze c7c743872a Fix Dokka reference to Spring Framework's Javadoc
This commit specifies a local packageListUrl and defines that dokka task
must be executed after the api task in order to be able to build KDoc
during the release process when the Spring Framework's Javadoc is not
published yet.

Issue: SPR-16687
2018-04-04 11:08:05 +02:00
Spring Buildmaster 4967dd887d Next Development Version 2018-04-03 20:11:32 +00:00
Stephane Nicoll 3fb8d16ff7 Temporarily remove reference to Spring Framework's Javadoc
Issue: SPR-16687
2018-04-03 21:14:49 +02:00
Juergen Hoeller 40d5e7cc80 Upgrade to AspectJ 1.9 GA
Issue: SPR-16686
2018-04-03 17:43:09 +02:00
Stephane Nicoll 7be4193933 Upgrade to Reactor Bismuth-SR8 2018-04-03 15:45:36 +02:00
Juergen Hoeller aa0face9a1 Upgrade to RxJava 1.3.8 and Rhino 1.7.9 2018-04-03 15:18:25 +02:00
Juergen Hoeller 475c4d4425 Polishing 2018-04-03 12:24:00 +02:00
Juergen Hoeller 9601d4bb5b Revised mime.types file with cpp extension and updated modification docs
Issue: SPR-16678
2018-04-03 12:23:09 +02:00
Juergen Hoeller 5d0700b936 AnnotationUtils.annotatedInterfaceCache available as deprecated field
Issue: SPR-16675
2018-04-03 12:21:03 +02:00
Juergen Hoeller 6102715b8d Consistent treatment of proxy classes and interfaces for introspection
Issue: SPR-16675
Issue: SPR-16677
2018-04-03 02:42:41 +02:00
Rossen Stoyanchev 65fdd0efeb [docs] Updates for exception handling in web sections
Issue: SPR-16394
2018-04-02 00:51:14 -04:00
Rossen Stoyanchev 9dd3cd98ac [docs] Move Filters section under Reactive Spring Web
Issue: SPR-16394
2018-04-02 00:50:56 -04:00
Juergen Hoeller cc379f1cc7 Polishing 2018-04-01 12:57:19 +02:00
Juergen Hoeller 666037ec5c Pointcut checking directly against superclass in case of CGLIB subclass
Issue: SPR-16675
2018-04-01 12:57:02 +02:00
Juergen Hoeller 66a3a82fb3 Avoid reference to HandlerMethod class in ServerErrorException
This breaks the package dependency cycle between web.server/web.method and makes ServerErrorException more generally applicable. Includes deprecation of the plain reason constructor variant, in favor of providing a Method or MethodParameter context (which MatrixVariableMethodArgumentResolver does now).
2018-04-01 00:21:15 +02:00
Juergen Hoeller 97735e4ffc Proper references to JDK 9+ (including JDK 10) in build comments 2018-04-01 00:07:06 +02:00
Juergen Hoeller 28ea718d2d Build setup allows for JDK 10 as source/test target compatibility
Includes upgrade to Groovy 2.4.15 and HtmlUnit 2.30.

Issue: SPR-16390
2018-03-31 23:17:31 +02:00
Juergen Hoeller bc07a54075 Clear AnnotationUtils cache after context refresh (along with others)
Issue: SPR-16675
2018-03-31 23:08:30 +02:00
Juergen Hoeller 8a9321652d Refined javadoc 2018-03-31 23:07:08 +02:00
Rossen Stoyanchev d9e17a62ce Refine SyncInvocableHandlerMethod error handling
Ensure the error is wrapped as ServerErrorException
2018-03-31 12:06:24 -04:00
Juergen Hoeller 912c270f2b Polishing 2018-03-31 17:49:21 +02:00
Rossen Stoyanchev 4454ffd2b1 Replace remaining use of block operator 2018-03-31 11:18:38 -04:00
Juergen Hoeller 129c05bcff Comprehensively cache annotated methods for interfaces and superclasses
Issue: SPR-16675
2018-03-31 15:12:02 +02:00
Stephane Maldini b8d32095a9 workaround multipart integration test using blocking receive inside netty thread 2018-03-30 15:43:11 -07:00
Juergen Hoeller 6393e5ce0c Consistent Ordered.LOWEST_PRECEDENCE declarations for default order 2018-03-31 00:20:44 +02:00
Juergen Hoeller 4da27c2a73 Avoid unnecessary introspection on methods and meta-annotations
Issue: SPR-16667
2018-03-31 00:18:14 +02:00
Rossen Stoyanchev b1048975d2 Minor updates based on PR#1058
The original repo no longer exists:
https://github.com/spring-projects/spring-framework/pull/1058
2018-03-30 13:36:20 -04:00
Kazuki MATSUDA d232fffa63 Use whenComplete since (null) return value not needed 2018-03-30 11:07:46 -04:00
Bian Jiaping 8f525f07e9 Fix typos, formatting and escaping in reference
Note: Some symbol combinations (including <=) serve as textual symbol
replacements in AsciiDoc.

http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#text-replacement
2018-03-30 10:06:33 -04:00
Juergen Hoeller 22a8a668c9 AnnotationTypeFilter assumes no custom annotations on common Java types
Issue: SPR-16667
2018-03-30 15:31:43 +02:00
Juergen Hoeller 78681c6369 JndiRmiServiceExporter still calls PortableRemoteObject when available
Issue: SPR-16670
2018-03-30 15:19:38 +02:00
Juergen Hoeller 0bc01fcd55 Polishing 2018-03-30 13:42:23 +02:00
Juergen Hoeller 7a8d41e5d6 Extended set of common classes and language interfaces in ClassUtils
Issue: SPR-16667
2018-03-30 13:41:22 +02:00
Johnny Lim 8dd0974e2f Rename SingleColumnRowMapperTest to align with the other tests 2018-03-30 12:28:16 +02:00
Sam Brannen e5096be660 Polishing 2018-03-30 12:23:28 +02:00
Sam Brannen f79562f8d1 Introduce tests for generics & @Nested test classes 2018-03-30 12:12:21 +02:00
Sam Brannen a6c45f0cd9 Polishing 2018-03-30 11:45:28 +02:00
Rossen Stoyanchev 240d6f52c9 Replaces rather than prepend contextPath
Issue: SPR-16650
2018-03-29 18:17:29 -04:00
Juergen Hoeller d553ddc5b3 Nullability refinements (based on IntelliJ IDEA 2018.1 introspection)
Issue: SPR-15756
2018-03-29 23:50:17 +02:00
Juergen Hoeller 1cc513d7db Consistent to/cc/bcc array handling and revised hashCode without text
Issue: SPR-16671
2018-03-29 23:44:04 +02:00
Juergen Hoeller 9a722b4558 Pass type name into PreparedStatement.setNull in case of Types.OTHER
Issue: SPR-16669
2018-03-29 23:43:53 +02:00
igor-suhorukov 93abe0e94b All branches in a conditional structure should not have exactly the same implementation 2018-03-29 23:33:50 +02:00
igor-suhorukov ab96bb5428 Remove redundant check 2018-03-29 23:33:38 +02:00
igor-suhorukov c1ff97e2a8 Short-circuit logic should be used in boolean contexts 2018-03-29 23:33:22 +02:00
Rossen Stoyanchev dd96c873e3 Improve docs on forwarded headers
Issue: SPR-16660
2018-03-29 16:11:01 -04:00
Rossen Stoyanchev a546cf0a3b Reject invalid forwarded headers
Issue: SPR-16660
2018-03-29 15:28:34 -04:00
Thor Andreas Rognan 5fb4c8254f Fix inclusion of license in jar 2018-03-29 12:30:28 -04:00
Rossen Stoyanchev 30b63a71bd Switch to Bismuth snapshots 2018-03-29 12:28:05 -04:00
Sam Brannen 9244090ba0 Support DI of individual constructor args in @Nested tests
Prior to this commit it was impossible to have an individual
constructor argument in a @Nested (i.e., inner) test class injected via
@Autowired, @Qualifier, or @Value.

This is due to a bug in javac on JDK versions prior to 9, whereby
annotation lookups performed directly via the
java.lang.reflect.Parameter API fail for inner class constructors.

Specifically, the parameter annotations array in the compiled byte code
for the user's test class excludes an entry for the implicit enclosing
instance parameter for an inner class constructor.

This commit introduces a workaround in ParameterAutowireUtils for this
off-by-one error by transparently looking up annotations on the
preceding Parameter object (i.e., index - 1). In addition, this commit
relies on the change recently introduced in MethodParameter in order to
compensate for the same JDK bug (see SPR-16652).

Issue: SPR-16653
2018-03-29 17:47:45 +02:00
Sam Brannen 17703e5dde Polishing 2018-03-29 17:45:55 +02:00
Sam Brannen 7c28152c13 Introduce ClassUtils.isInnerClass() utility method 2018-03-29 17:45:25 +02:00
Juergen Hoeller b165475eb6 Polishing 2018-03-29 16:05:52 +02:00
Juergen Hoeller 08dad4e3ac Consistent references to primitive types (in alphabetical order) 2018-03-29 16:05:00 +02:00
Juergen Hoeller 695bf2961f Consistent trace logging in PathResourceResolver
Issue: SPR-16616
2018-03-29 16:04:33 +02:00
Juergen Hoeller 53d01392d7 Workaround for inner class constructor parameter annotation bug in javac
Issue: SPR-16652
2018-03-29 15:45:02 +02:00
Juergen Hoeller 3ac46da22f Correct description for doWithLocalFields
Issue: SPR-16658
2018-03-29 15:42:30 +02:00
nkjackzhang 82cb5dbf2b NamedParameterUtils.parseSqlStatement should parse :{x} style parameter correctly
In my opinion, we should parse ":{x}" style parameter as "x" is parameter using "NamedParameterUtils.parseSqlStatement",
so the condition "j - i > 2" is the correct condition, not "j - i > 3", because if "i" is the index of
":" in ":{x}", and "j" is the index of "}" in ":{x}",  "j - i == 3" is true.
Also add a test case for SPR-16663.
2018-03-29 15:00:25 +02:00
Stephane Nicoll f4813f5b4c Merge pull request #1759 from igor-suhorukov
* pr/1759:
  Nested "enum"s should not be declared static
2018-03-29 09:13:18 +02:00
igor-suhorukov 8d2f64fe2d Nested "enum"s should not be declared static
Closes gh-1759
2018-03-29 09:12:03 +02:00
Rossen Stoyanchev f9e6ea5482 MvcResult returns asyncResult after asyncDispatch
Issue: SPR-16648
2018-03-28 22:15:16 -04:00
igor-suhorukov e6020ed377 avoid unnecessary autoboxing 2018-03-28 23:48:12 +02:00
Rossen Stoyanchev b8d72516e1 Update link to WebSocket spec issue 2018-03-28 15:54:57 -04:00
Sam Brannen 4b9e3a9211 Introduce failing test for SPR-16652
This commit introduces tests for looking up annotations on parameters
in constructors for nested and inner classes via Spring's
MethodParameter abstraction.

The test for an inner class is currently disabled since it fails on
JDK 8. See JIRA issue for details.

Issue: SPR-16652
2018-03-28 17:42:55 +02:00
Juergen Hoeller d95bbb6b1b Test for hasError keeping body available in case of unknown status code
Issue: SPR-16604
2018-03-28 12:16:03 +02:00
Juergen Hoeller b2d87abcbb Polishing 2018-03-28 12:06:38 +02:00
Stephane Nicoll d1a0b8d53f Clarify the format supported by @PropertySource
Issue: SPR-16563
2018-03-28 11:03:53 +02:00
Rossen Stoyanchev 5861e9685b Always specify charset for form data requests
Issue: SPR-16613
2018-03-27 19:56:09 -04:00
Rossen Stoyanchev e00384a6fd MimeTypeUtils trims parameter names / values
Issue: SPR-16630
2018-03-27 19:56:09 -04:00
igor-suhorukov 4aae6a6dda Use Map.forEach instead of manual Map.Entry iteration wherever possible SPR-16646 2018-03-28 01:09:03 +02:00
Rossen Stoyanchev 224d52e032 Refine RequestedContentTypeResolver contract
Consistently return "*/*" if no media types were requested rather than
an empty list. Existing code has to check for both in any case to see
if nothing was requested.

Issue: SPR-16624
2018-03-27 16:54:25 -04:00
Rossen Stoyanchev f3994467c4 Refine ContentNegotiationStrategy contract
Consistently return "*/*" if no media types were requested rather than
an empty list. Existing code has to check for both in any case to see
if nothing was requested.

Issue: SPR-16624
2018-03-27 16:54:19 -04:00
Juergen Hoeller 9a27bc9b3e Upgrade to Jackson 2.9.5 and Hibernate Validator 6.0.9 2018-03-27 17:33:34 +02:00
Juergen Hoeller c072c6deb5 Refined javadoc for SimpleEvaluationContext and its builder features
Issue: SPR-16588
2018-03-27 17:07:03 +02:00
Juergen Hoeller 98ad23bef8 Consistent logging of encoded path evaluation failure
Issue: SPR-16616
2018-03-27 17:04:59 +02:00
Sam Brannen 75f70b269e Introduce @Nested tests with constructor injection
This commit introduces @Nested tests to verify support for constructor
injection when using the SpringExtension.

One of the tests is disabled on Java 8 due to a bug in javac that was
first fixed in JDK 9.

See https://github.com/junit-team/junit5/issues/1345 for details.
2018-03-27 16:45:26 +02:00
Sam Brannen b6e9d1c9ad Publish SpEL content in Reference Manual 2018-03-27 12:48:37 +02:00
Juergen Hoeller 13356a7ee2 Consistent encoded path evaluation in reactive ResourceWebHandler and co
Issue: SPR-16616
2018-03-27 01:00:42 +02:00
Juergen Hoeller e3d0ef6015 Use Map.forEach instead of manual Map.Entry iteration wherever possible
Issue: SPR-16646
2018-03-27 00:38:32 +02:00
Juergen Hoeller 10cb2ccaef Avoid triggering lazy resolution in MultipartResolver.cleanupMultipart
Issue: SPR-16640
2018-03-27 00:25:05 +02:00
Juergen Hoeller 24aae2e104 Defensive containsSingleton cache guard within getObjectFromFactoryBean
Issue: SPR-16625
2018-03-27 00:24:03 +02:00
Juergen Hoeller f59ea610df Simplified separator check within isInvalidEncodedPath
Issue: SPR-16616
2018-03-27 00:23:36 +02:00
Juergen Hoeller c60cefa331 SimpleEvaluationContext.Builder withRootObject/withTypedRootObject
Issue: SPR-16588
2018-03-27 00:22:54 +02:00
Rossen Stoyanchev 19875d8e3f Document WebFlux concurrency model
Issue: SPR-16538
2018-03-26 09:59:38 -04:00
Juergen Hoeller c441d60d1d Upgrade to Kotlin 1.2.31 and RxJava 2.1.12
Includes H2 1.4.197 and Selenium HtmlUnit Driver 2.29.3 as well.
2018-03-24 16:48:53 +01:00
Juergen Hoeller 8d5587fe4f Consistent thread-safe iteration in DefaultSingletonBeanRegistry
Issue: SPR-16620
2018-03-24 16:30:51 +01:00
Juergen Hoeller 9128226da4 SimpleEvaluationContext.Builder withMethodResolvers/withInstanceMethods
Includes DataBindingMethodResolver as ReflectiveMethodResolver subclass.

Issue: SPR-16588
2018-03-24 16:30:37 +01:00
Rossen Stoyanchev a989ea0867 Polish Synchronoss message reader
Issue: SPR-16639
2018-03-24 08:59:16 -04:00
Rossen Stoyanchev 729d0d2796 Property handling of Void.class in WebClient retrieve()
Issue: SPR-16636
2018-03-23 22:21:06 -04:00
Rossen Stoyanchev ab2410c754 MimeTypeUtils uses SecureRandom
The prevailing current wisdom is to use the default constructor for
secure and let it pick the best algorithm for the OS.

On Java 8 (Oracle), Linux this results in "NativePRNG" which uses
/dev/random (potentially blocking) for the initial seed, and
/dev/urandom (non-blocking) for subsequent calls to nextInt.

Issue: SPR-16635
2018-03-23 21:45:41 -04:00
Rossen Stoyanchev f6ea7407e6 Improve docs on client-side multipart requests
Issue: SPR-16635
2018-03-23 21:44:27 -04:00
Rossen Stoyanchev d007c25585 Improve docs on RestTemplate
In preparation for adding multipart content.

Issue: SPR-16635
2018-03-23 21:44:18 -04:00
Rossen Stoyanchev 0af847c01c ServerSentEventHttpMessageReader internal refactoring
Eliminate use of .block() which Reactor now flags as illegal on
schedulers where that's not expected.
2018-03-23 19:01:11 -04:00
Juergen Hoeller b2f900e518 Upgrade to Hibernate ORM 5.2.16 and 5.1.13 2018-03-23 17:36:55 +01:00
Juergen Hoeller f00afe3247 Use (Concurrent)Map.computeIfAbsent for lazy nested collection creation 2018-03-23 17:36:23 +01:00
Juergen Hoeller 8d8e218b52 Consistent FactoryBean cache visibility in concurrent creation scenarios
Issue: SPR-16625
Issue: SPR-16627
2018-03-23 17:34:33 +01:00
Juergen Hoeller 937cd48fcb Contextual BeanCreationException in case of depending on a missing bean
Issue: SPR-16628
2018-03-23 17:32:08 +01:00
Juergen Hoeller 38dcd179d5 Guidance of which PropertyAccessors to use with SimpleEvaluationContext
Issue: SPR-16588
2018-03-23 17:29:21 +01:00
Rossen Stoyanchev 94924566d5 Minor typo in docs 2018-03-23 11:12:54 -04:00
Rossen Stoyanchev 3b4c7a40c0 Improve docs on @Controller methods in STOMP section
Issue: SPR-16631
2018-03-23 10:54:53 -04:00
Arjen Poutsma c56317928f Add formData() and multipartData() to ServerRequest
Issue: SPR-16551
2018-03-23 10:00:30 +01:00
Rossen Stoyanchev 1b83f129a2 ReactorNettyTcpClient uses elastic pool
Issue: SPR-16626
2018-03-22 20:22:07 -04:00
Juergen Hoeller a8688880b1 Upgrade to RxJava 2.1.11 and 1.3.7 as well as Jetty 9.4.9 2018-03-22 18:10:29 +01:00
Juergen Hoeller 51c57d77d9 SimpleEvaluationContext with dedicated factory methods for common cases
Aligned with DataBindingPropertyAccessor and shown in ref doc examples.

Issue: SPR-16588
2018-03-22 18:09:27 +01:00
Rossen Stoyanchev 025ee83403 Update CONTRIBUTING.md 2018-03-22 10:57:19 -04:00
sn42 f18d8c31e2 Correct link caption. 2018-03-22 13:21:57 +01:00
Christoph Dreis d3a0a8e007 Use Collection.removeIf() where possible (#1747)
Use Collection.removeIf() where possible

Issue: SPR-16622
2018-03-22 11:36:11 +01:00
Rossen Stoyanchev e0de9126ed Re-use EvaluationContext in DefaultSubscriptionRegistry
Rather than create a new EvaluationContext instance per evaluation, we
now create a statically shared instance, without the root object in it,
and re-use it for all evalutations.
2018-03-21 23:29:58 -04:00
Rossen Stoyanchev 19293b9847 SimpleEvaluationContext builder
Issue: SPR-16588
2018-03-21 22:36:08 -04:00
Juergen Hoeller b5511645b8 DataBindingPropertyAccessor with factory methods (forReadOnlyAccess etc)
Includes configurable write support at ReflectivePropertyAccessor level.

Issue: SPR-16588
2018-03-22 00:03:06 +01:00
Rossen Stoyanchev 94c525cdc8 Polish @RequestPart support 2018-03-21 18:26:13 -04:00
Juergen Hoeller c1405ef140 Polishing 2018-03-21 16:12:42 +01:00
Juergen Hoeller ba5ef6456f WebFluxResponseStatusExceptionHandler for @ResponseStatus introspection
The web.server package is quite low-level and should not depend on web.bind in order to avoid a dependency cycle. Extracting the introspection of the ResponseStatus annotation into a WebFlux-level subclass resolves the cycle.

Issue: SPR-16567
2018-03-21 16:12:32 +01:00
Juergen Hoeller 639d2c6fe7 Polishing 2018-03-21 12:39:15 +01:00
Juergen Hoeller 1fd5935afa SimplePropertyAccessor with configurable write support
Issue: SPR-16588
2018-03-21 12:06:40 +01:00
Juergen Hoeller 91b803a231 Consistent encoded path evaluation in ResourceHttpRequestHandler and co
Issue: SPR-16616
2018-03-21 12:02:13 +01:00
Rossen Stoyanchev f9df8c738a Avoid inifinite recursion in UndertowServerHttpRequest
Undertow does not provide a way to check if data is available to read
but instead we have to try to read and see if any data is returned.
This makes it impossible to implement checkOnDataAvailable without
trying to read and that can lead to infinite recursion like this:

...
UndertowServerHttpRequest$RequestBodyPublisher.checkOnDataAvailable(UndertowServerHttpRequest.java:156)
AbstractListenerReadPublisher.changeToDemandState(AbstractListenerReadPublisher.java:177)
AbstractListenerReadPublisher.access$900(AbstractListenerReadPublisher.java:47)
AbstractListenerReadPublisher$State$4.onDataAvailable(AbstractListenerReadPublisher.java:319)
AbstractListenerReadPublisher.onDataAvailable(AbstractListenerReadPublisher.java:85)
UndertowServerHttpRequest$RequestBodyPublisher.checkOnDataAvailable(UndertowServerHttpRequest.java:156)

This commit prevent the call to checkOnDataAvailable() when switching
states from READING->DEMAND which implies we exited the readAndPublish
loop because there was no more data to read.

Issue: SPR-16545
2018-03-20 17:21:33 -04:00
Rossen Stoyanchev 88a17a4b10 Reactor2TcpClient constructor with address supplier
Issue: SPR-12452
2018-03-20 12:21:45 -04:00
Rossen Stoyanchev 0e28bee0f1 Clean duplicate separators in resource URLs
Most Servlet containers do this anyway, but not all, and not
consistently for forward and backslashes.

Issue: SPR-16616
2018-03-19 17:16:03 -04:00
Juergen Hoeller fdd756ce8a Upgrade to Log4J 2.11 2018-03-19 20:39:54 +01:00
Juergen Hoeller 442ddb0845 Correct documentation of default HttpMessageConverters in RestTemplate
Issue: SPR-7885
2018-03-19 20:38:14 +01:00
Rossen Stoyanchev 2ff35daf9b Add test case based on SPR-16615 2018-03-19 13:32:10 -04:00
Rossen Stoyanchev 26bb3a0893 Improve docs on enabling Servlet 3 multipart 2018-03-19 11:20:08 -04:00
Rossen Stoyanchev 8651b8d4c1 Show use of RequestEntity rather than HttpEntity
Issue: SPR-16608
2018-03-19 08:57:01 -04:00
Juergen Hoeller 99399084a6 Consistent Future check (even if typically encountering RunnableFuture)
Issue: SPR-16607
2018-03-19 12:42:49 +01:00
Juergen Hoeller 578c04ea17 Consistent table declarations (including fix for disarranged FTL macros)
Issue: SPR-16612
2018-03-19 12:41:22 +01:00
Juergen Hoeller 702b27e1e4 Polishing 2018-03-19 12:05:04 +01:00
Juergen Hoeller 2c7efbb9d0 Deprecate TableMetaDataContext.getSimulationQueryForGetGeneratedKey 2018-03-19 12:04:51 +01:00
Juergen Hoeller b7c423813d CallMetaDataContext handles 'procedureColumnResult' as return parameter
Issue: SPR-16611
2018-03-19 12:04:15 +01:00
Juergen Hoeller 3c1adf7f6a ThreadPoolTaskExecutor/Scheduler cancels remaining Futures on shutdown
Issue: SPR-16607
2018-03-19 01:45:22 +01:00
Wang Jingyu 9d63f805b3 Fix AsciiDoc typos in AOP documentation (#1743)
* Fix AsciiDoc typos in AOP documentation

* Polish formatting
2018-03-17 17:17:41 +01:00
Rossen Stoyanchev 30583a62cf Fix Class isAssignableFrom checks for Resource conversion
Issue: SPR-16606
2018-03-16 16:18:05 -04:00
Rossen Stoyanchev 842c29103f MultipartBodyBuilder supports PublisherEntity as input
Issue: SPR-16601
2018-03-16 16:18:05 -04:00
Rossen Stoyanchev 313c6cef32 Polish 2018-03-16 16:18:05 -04:00
Juergen Hoeller 4fef1fe820 Polishing 2018-03-16 18:49:12 +01:00
Juergen Hoeller 914b2470dc Scope annotation in class hierarchies vs XML bean definition inheritance
Issue: SPR-16602
2018-03-16 18:49:00 +01:00
Arjen Poutsma b31d55dfce Deprecated ClientRequest.method in favor of ClientRequest.create
The former method clashed with the ClientRequest.method() getter.
2018-03-16 17:27:29 +01:00
Arjen Poutsma 04c2a2990d Provide simple way to create ClientResponse
This commit introduces ClientResponse.Builder, an easier way to create a
ClientResponse from an existing response, or from scratch.

Issue: SPR-16553
2018-03-16 17:27:29 +01:00
Juergen Hoeller f8588e364a AcceptHeaderLocaleResolver keeps language match among supported locales
Issue: SPR-16599
2018-03-16 14:17:50 +01:00
Rossen Stoyanchev 7de2650a70 Drop @WebServlet annotation
Issue: SPR-16591
2018-03-16 00:14:54 -04:00
Rossen Stoyanchev 72bbb2619d Commit actions are (properly) deferred
Issue: SPR-16597
2018-03-15 23:17:57 -04:00
Rossen Stoyanchev 541ee13934 Add bufferContent option to MockRestServiceServer
Issue: SPR-14694
2018-03-15 22:13:44 -04:00
Rossen Stoyanchev f7e75a5b82 Polish MockRestServiceServer client tests 2018-03-15 22:13:43 -04:00
Rossen Stoyanchev 8d51d6769b [docs] Polish reactive types section 2018-03-15 22:13:43 -04:00
Juergen Hoeller 2096676b3f Upgrade to Apache Johnzon 1.1.7 and JRuby 9.1.16 2018-03-15 15:43:45 +01:00
Juergen Hoeller d4a8f76bf9 Consistent volatile access to running flag in Lifecycle implementations
Issue: SPR-16488
2018-03-15 15:17:55 +01:00
Rossen Stoyanchev b8d94f8a20 Improve WebFlux support for response status exceptions
Support @ResponseStatus annotated exceptions.
Supported root cause exceptions with response status information.

Issue: SPR-16567
2018-03-14 20:07:00 -04:00
Rossen Stoyanchev cb8c6e3251 Add SimpleEvaluationContext
Issue: SPR-16588
2018-03-14 15:53:19 -04:00
Juergen Hoeller 58011f71e9 Consistent assertions for template method result vs servlet registration 2018-03-14 18:55:50 +01:00
Juergen Hoeller c4e9ce8d0e Clarified repeatable PropertySource annotation vs use as meta-annotation
Issue: SPR-16592
2018-03-14 18:53:50 +01:00
Juergen Hoeller 3988dd9ebb Polishing 2018-03-14 17:24:58 +01:00
Juergen Hoeller 356ef45e99 ConcurrentReferenceHashMap properly handles getOrDefault for null values
Issue: SPR-16584
2018-03-14 17:17:04 +01:00
Stephane Nicoll cc12afdea2 Add support for deferred import selector group
This commit allows several DeferredImportSelector instances to be
grouped and managed in a centralized fashion. This typically allows
different instances to provide a consistent ordered set of imports to
apply.

Issue: SPR-16589
2018-03-13 16:52:26 -04:00
Sam Brannen 5f4d5f17f7 Polishing 2018-03-13 16:48:52 +01:00
Sam Brannen 2c2ce55f47 Support target type in JsonPath assertions for MockMvc results
This commit picks up where SPR-14498 left off by adding support for an
explicit target type when using JsonPath to perform an assertion against
the response content using a Hamcrest Matcher.

Specifically, there is a new overloaded value(Matcher<T>, Class<T>)
method in JsonPathResultMatchers for use with Hamcrest matchers where
the target type (i.e., Class<T>) can be specified.

Issue: SPR-16587
2018-03-13 15:55:39 +01:00
Bronwyn Perry-Huston d64f2eb038 Add JSON matcher to assert on request body
Support asserting JSON regardless of order and formatting.
Based on same JsonExpectationHelper used in ContentResultMatchers.

Issue: SPR-13919
2018-03-13 12:27:05 +01:00
Andy Clement 1db7e02de3 Modify SpEL code gen to take account of null safe refs
With this change the code generation for method and property
references is modified to include branching logic in the
case of null safe dereferencing (?.). This is complicated
by the possible usage of primitives on the left hand side
of the dereference. To cope with this case primitives are
promoted to boxed types when this situation occurs enabling
null to be passed as a possible result.

Issue: SPR-16489
2018-03-12 15:58:59 -07:00
Juergen Hoeller 41730220f4 InterceptingClientHttpRequest adapts to StreamingHttpOutputMessage
Issue: SPR-16582
2018-03-12 22:31:48 +01:00
Juergen Hoeller 499128dae7 URIEditor uses straight ClassPathResource.getURI() access
Issue: SPR-16581
2018-03-12 22:26:18 +01:00
sdeleuze 36a222acd5 Take into account the MimeType's charset in Jackson encoder
Notice that per specification, only Unicode is supported
(UTF8, UTF16_BE, UTF16_LE, UTF32_BE, UTF32_LE).

Issue: SPR-16539
2018-03-12 21:54:53 +01:00
Juergen Hoeller 99bb97388e Upgrade to Tomcat 8.5.29 and Selenium 3.11 2018-03-12 20:42:11 +01:00
Juergen Hoeller 04a8f81710 Polishing 2018-03-12 20:42:03 +01:00
Juergen Hoeller 967a2ef2d2 Validate Class attributes as well as Class array attributes
Issue: SPR-16564
2018-03-12 20:41:44 +01:00
Juergen Hoeller 50e980c02f Validate declared annotations before deciding between reflection and ASM
Issue: SPR-16564
2018-03-12 13:40:26 +01:00
Juergen Hoeller 1b1a69a144 SimpleAliasRegistry fully synchronizes registerAlias and removeAlias
Issue: SPR-16577
2018-03-12 13:27:48 +01:00
Sam Brannen 42b4f6e1ff Clean up warnings and dead code in spring-core module 2018-03-11 14:13:30 +01:00
Sam Brannen 2575c26020 Clean up warnings and dead code in spring-webflux module 2018-03-11 13:44:27 +01:00
Stephane Nicoll fb7c4a3066 Polish 2018-03-11 10:26:41 +01:00
Sam Brannen 1fa1f2b58a Delete unused import 2018-03-10 16:56:33 +01:00
Rossen Stoyanchev e228ded589 Include form and multipart data in WebFlux.fn chapter
Issue: SPR-16547
2018-03-09 21:16:19 -05:00
Rossen Stoyanchev a3d8c60aba Restructure functional endpoints chapter
This commit restructures the existing content to separate out Overview
content into its own section, and also introduces more formal structure
where reference type content can be expanded over time.

Issue: SPR-16547
2018-03-09 21:16:19 -05:00
Rossen Stoyanchev 3653a37e27 Polish tests 2018-03-09 21:16:18 -05:00
Sam Brannen 107f8bb5fd Polishing 2018-03-09 18:19:30 +01:00
Sam Brannen 00fea23e6b Introduce test for WebTestClient with RegEx-based JsonPath 2018-03-09 14:51:37 +01:00
Juergen Hoeller 2a3f90dc7b Upgrade to Hibernate ORM 5.2.15 and Hibernate Validator 6.0.8 2018-03-09 09:40:12 +01:00
Juergen Hoeller df8061494c TransactionTemplate equality for same transaction manager only
Issue: SPR-16572
2018-03-09 09:39:45 +01:00
Juergen Hoeller cf74b1b8be Consistent result synchronization in WebAsyncManager
Issue: SPR-16571
2018-03-09 09:03:15 +01:00
igor-suhorukov 58a5138f26 simplify lambda expression 2018-03-08 23:44:32 +01:00
igor-suhorukov 2f9d0a7de8 simplify boolean NOT operation 2018-03-08 23:44:15 +01:00
igor-suhorukov d89f9af22d parentheses should be removed from a single lambda input parameter when its type is inferred 2018-03-08 21:55:45 +01:00
igor-suhorukov 0c45c4c6a3 lamdbas containing only one statement should not nest this statement in a block 2018-03-08 21:49:04 +01:00
igor-suhorukov 6163f2d32f use more modern java API for empty collections 2018-03-08 21:41:57 +01:00
igor-suhorukov 32b689a994 use StringBuilder for complex string concatenation 2018-03-08 21:25:47 +01:00
igor-suhorukov 407ecf7334 to get rid of "magic" time constants 2018-03-08 20:37:48 +01:00
Brian Clozel ed7684d2b2 Don't implicitly check preconditions on PUT requests
Prior to this commit, the `HttpEntityMethodProcessor` would check HTTP
conditions on non-safe requests (i.e. not GET/HEAD). This would prevent
Controllers from returning `ResponseEntity` containing response headers
with updated values of `"Last-Modified"` or `ETag` once the resource has
been updated.

This commit avoids those checks for non GET/HEAD requests - this code
can still be leveraged from Controllers themselves using
`ServletWebRequest::checkNotModified` methods.

Issue: SPR-15780
2018-03-08 19:43:01 +01:00
Juergen Hoeller 50253f670e Quick access to volatile field (full synchronization only for lazy init)
Issue: SPR-16570
2018-03-08 18:13:00 +01:00
Juergen Hoeller 139dc1d373 Polishing (collapsed if checks, consistent downcasts, refined javadoc) 2018-03-08 18:11:57 +01:00
igor-suhorukov 0f7485b01d Polish: reorder the modifiers to comply with the Java Language Specification. 2018-03-08 17:57:47 +01:00
Juergen Hoeller a02aafe5fe Regular getBeanInfo call for interfaces (enabling Introspector's cache)
Issue: SPR-16568
2018-03-08 12:29:09 +01:00
Rossen Stoyanchev eb96ff2943 Doc improvements related to HTTP streaming
Issue: SPR-16494
2018-03-07 17:07:09 -05:00
Rossen Stoyanchev 568c93457a Improve ResponseBodyEmitter error handling
After send error, ignore calls to complete or completeWithError by the
application in the same thread (e.g. try-catch block), to avoid a
competing with an error callback from servlet container during which
the same action is taken.

Issue: SPR-16548
2018-03-07 15:25:31 -05:00
Rossen Stoyanchev e20652009d Improve docs on SseEmitter onComplete/onError
Issue: SPR-16548
2018-03-07 14:59:18 -05:00
Sam Brannen b14301bfba Allow TestContextManager to be compiled in Eclipse again 2018-03-07 17:44:24 +01:00
Violeta Georgieva 030bc224e3 Invert the check for ServletInputStream.isReady()
When checking whether there is still request body the first method
that should be checked is ServletInputStream.isReady() and then
ServletInputStream.isFinished(). ServletInputStream.isReady() is the active
method whereas the ServletInputStream.isFinished() is not.
It is important to call ServletInputStream.isReady() because if it returns
false it will schedule a dispatch and if the request body is already read it will
send onAllDataRead event.

Issue: SPR-16521
2018-03-07 11:23:10 -05:00
Juergen Hoeller 20287e0cb0 Polishing 2018-03-07 17:09:09 +01:00
Juergen Hoeller 934a995acb Strong recommendation for OpenPDF 1.0.5 instead of iText 2.1.7
Issue: SPR-16107

(cherry picked from commit b70d400)
2018-03-07 17:08:45 +01:00
Sam Brannen 0f5a3e2647 Polish formatting in Groovy scripts 2018-03-07 16:09:04 +01:00
Sam Brannen df0b39e8ac Add missing packages to Groovy scripts 2018-03-07 16:09:03 +01:00
Juergen Hoeller f57fcdee3c Polishing 2018-03-07 15:49:58 +01:00
Patrick0308 6f4d25a6e6 Polish "Use Java 8 forEach method on Map" 2018-03-07 15:39:58 +01:00
Sam Brannen 2454b31b30 Polish MockRestRequestMatchers[Tests] 2018-03-07 14:20:57 +01:00
Sam Brannen f932796201 Polishing 2018-03-07 13:22:36 +01:00
Sam Brannen fef0c7b151 Throw AssertionError instead of IAE in MockRestRequestMatchers 2018-03-07 13:22:21 +01:00
Yannik Hampe 4094879daf Make MockRestRequestMatchers independent of JUnit (#1720)
MockRestRequestMatchers was using org.junit.Assert.assertNotNull
and thus could not be used in projects that use e.g. TestNG instead
of JUnit 4.
2018-03-07 13:07:32 +01:00
Rossen Stoyanchev 27815847b1 content-length support in EncoderHttpMessageWriter
EncoderHttpMessageWriter checks explicitly for Mono publishers and sets
the content length, if it is known for the given data item.

Issue: SPR-16542
2018-03-06 19:04:02 -05:00
Rossen Stoyanchev 7a8e0ff3c3 Update ServerWebExchangeTests 2018-03-06 18:12:37 -05:00
Juergen Hoeller eb9c43dcbc Reliably expose nested cause exception message for PersistenceException
Issue: SPR-16559
2018-03-06 23:06:14 +01:00
Juergen Hoeller 90d768bb7f Overloaded convenience setters: setCacheControl(CacheControl), setExpires(ZonedDateTime)
Issue: SPR-16562
2018-03-06 23:06:04 +01:00
Juergen Hoeller 82515a3f01 Consistent incrementer arrangement for PostgreSQL, DB2 and SAP HANA
Includes related polishing in core.metadata and datasource.embedded and a revision of the corresponding database definitions in sql-error-codes.

Issue: SPR-16558
2018-03-06 13:36:15 +01:00
Juergen Hoeller 4a4f2c2f08 Drop version check in isGetGeneratedKeysSimulated (for PostgreSQL 10)
Issue: SPR-16556
2018-03-06 13:31:26 +01:00
Rossen Stoyanchev e48def2d35 Set readyToWrite flag after cached signals emitted
Issue: SPR-16555
2018-03-05 23:23:39 -05:00
Brian Clozel 6d26e61ac7 Guard against invalid paths in ResourceUrlProvider
This commit makes sure that no `StringIndexOutOfBoundsException` is
thrown when `getForRequestUrl` is called with a URL that's shorter than
the expected context path.

Issue: SPR-16526
2018-03-05 15:26:56 +01:00
Juergen Hoeller 4f8c4546f1 Upgrade to SnakeYAML 1.20 and Selenium 3.10 2018-03-05 15:25:01 +01:00
Juergen Hoeller a0cc80063d Concurrency and exception message refinements for test transactions 2018-03-05 13:00:35 +01:00
Juergen Hoeller ff818d56a4 Correct description for class-level @Transactional with AspectJ
Includes proper quoting of AspectJ expressions in Asciidoc.

Issue: SPR-16552
Issue: SPR-16549
2018-03-05 12:22:17 +01:00
Juergen Hoeller c543368aad Polishing 2018-03-03 17:33:48 +01:00
igor-suhorukov 06fef1e5a4 Polish: assertion arguments should be passed in the correct order 2018-03-03 16:14:45 +01:00
Stephane Nicoll 38ebb6c982 Restore includes and isCompatibleWith
See gh-1713
2018-03-03 12:41:58 +01:00
Stephane Nicoll d89d95ef1c Merge pull request #1715 from igor-suhorukov:master
* pr/1715:
  Polish
2018-03-03 12:12:45 +01:00
igor-suhorukov 129530f792 Polish
Closes gh-1715
2018-03-03 12:12:15 +01:00
Rossen Stoyanchev cef98e1125 FilePart uses correct flags when opening files
Issue: SPR-16546
2018-03-02 10:42:50 -05:00
Juergen Hoeller cec7204fca Polishing 2018-03-02 13:53:17 +01:00
Juergen Hoeller 2e164787db Upgrade to Groovy 2.4.14 and Undertow 1.4.23 2018-03-02 13:52:42 +01:00
igor-suhorukov ed936cbd89 Polish: Overriding methods should do more than simply call the same method in the super class 2018-03-02 00:06:27 +01:00
Juergen Hoeller cd4f0935c5 Revised deprecation markers 2018-03-01 23:43:06 +01:00
Juergen Hoeller cf1d162e1c Upgrade to Kotlin 1.2.30 2018-03-01 23:41:59 +01:00
Rossen Stoyanchev 9352e3d047 Add ClientRequest attribute for URI template
Issue: SPR-16537
2018-03-01 17:06:24 -05:00
Rossen Stoyanchev 36cfdf68b1 Correct log level
Issue: SPR-16528
2018-03-01 15:52:59 -05:00
Juergen Hoeller fa670dd07d Indexer enforces target descriptor only after non-null target check
Issue: SPR-16544
2018-03-01 13:31:56 +01:00
Juergen Hoeller bfddbbe731 Polishing 2018-03-01 01:39:06 +01:00
Juergen Hoeller 478162741d WebApplicationContextFacesELResolver.isReadOnly returns true for WAC
Issue: SPR-16543
2018-03-01 01:32:11 +01:00
Juergen Hoeller 6f7ad0304c Polishing 2018-03-01 00:29:38 +01:00
igor-suhorukov 83300c4b27 Polish: follow naming convention 2018-03-01 00:22:29 +01:00
igor-suhorukov 8080f56db8 Polish: "@Override" should be used on overriding and implementing methods 2018-03-01 00:15:18 +01:00
Juergen Hoeller a19d4deb24 Polishing 2018-02-28 16:41:59 +01:00
Juergen Hoeller 33cd160861 Upgrade to Reactor Bismuth SR7, Hibernate ORM 5.2.14, Common Annotations 1.3.2 2018-02-28 14:01:04 +01:00
Juergen Hoeller 9962df6527 Polishing 2018-02-28 00:09:15 +01:00
Juergen Hoeller 95aad9cdc2 Interrupt listener invoker threads on shutdown (after initial wait step)
Issue: SPR-16536
2018-02-28 00:06:46 +01:00
igor-suhorukov d1ccecd021 Polish: to get rid unnecessary array creation 2018-02-27 23:37:54 +01:00
Rossen Stoyanchev bf0308b0cf Merge pull request #1706 from mariusz-jasinski/SPR-16519 2018-02-27 15:39:30 -05:00
Rossen Stoyanchev 356ef5199e Polish
Issue: SPR-16519
2018-02-27 15:38:34 -05:00
Mariusz Jasinski 184ed6da57 Overloaded acknowledge method with StompHeaders
Issue: SPR-16519
2018-02-27 15:38:10 -05:00
igor-suhorukov 7bce04c06c Polish: combine catches block with same body 2018-02-27 12:51:28 +01:00
Rossen Stoyanchev f835f7b500 Switch to Bismuth snapshots 2018-02-26 20:41:00 -05:00
Rossen Stoyanchev e12fcca1e3 Fix failing test 2018-02-26 20:35:17 -05:00
Rossen Stoyanchev e0e90ed006 SSE writer respects charset in MediaType
Issue: SPR-16516
2018-02-26 16:42:00 -05:00
Juergen Hoeller 6663d0ff07 Support for ResolvableType.getType().getTypeName() on Java 8
Issue: SPR-16535
2018-02-26 17:19:12 +01:00
Juergen Hoeller c2d5ca9811 Proper nullable return declaration for AbstractValueAdaptingCache.lookup
Issue: SPR-15540
2018-02-26 13:05:12 +01:00
Juergen Hoeller 7d89de06e3 Enforce GMT timezone for testBindInstantFromJavaUtilDate
Issue: SPR-16534
2018-02-26 13:02:17 +01:00
Juergen Hoeller 15c97b753e Revised URI building in http.server (consistently use raw attributes)
Issue: SPR-16434
2018-02-26 13:00:38 +01:00
sdeleuze c6f5acf15d Upgrade Dokka to 0.9.16 2018-02-26 11:07:02 +01:00
Juergen Hoeller 2a379e099c Polishing 2018-02-25 21:24:38 +01:00
Juergen Hoeller 8a56cd0e8b Revised URI building in http.server (avoid package cycle with web.util)
Issue: SPR-16434
2018-02-25 21:24:10 +01:00
igor-suhorukov b202205d77 Polish: String.valueOf() should not be appended to a String 2018-02-25 21:10:19 +01:00
igor-suhorukov 49fd724d8f Polish: String function use should be optimized for single characters 2018-02-25 20:48:47 +01:00
Rossen Stoyanchev 9c55dd5961 Additional shortcut with charset in WebSocketMessage 2018-02-25 14:41:13 -05:00
Alexander Sparkowsky d3eff49c59 Fix typos in webmvc documentation 2018-02-25 19:40:25 +01:00
Juergen Hoeller 3732032ee4 Customizable PreparedStatementCreator in NamedParameterJdbcTemplate
Issue: SPR-16050
2018-02-25 18:23:00 +01:00
Juergen Hoeller 0ef9568c06 Upgrade to OkHttp 3.10 (as well as RxJava 2.1.10 and Caffeine 2.6.2) 2018-02-25 15:38:56 +01:00
Juergen Hoeller 9e55422334 Polishing 2018-02-25 15:38:32 +01:00
Juergen Hoeller 01d9475bcc Turn registered controller classes into controller instances on the fly
Issue: SPR-16520
2018-02-25 14:29:44 +01:00
Juergen Hoeller 85984f3b72 Mark Castor tests as deprecated
Issue: SPR-16219
2018-02-25 14:29:28 +01:00
igor-suhorukov c782075a13 Polish: Array designators "[]" should be on the type, not the variable 2018-02-25 13:14:20 +01:00
Juergen Hoeller 7f58d9ede0 Efficiently merge bean name result with parent result (possibly empty) 2018-02-25 00:27:06 +01:00
Juergen Hoeller 3531c104b0 Prefer Collections.addAll call with array over Set.addAll(Arrays.asList) 2018-02-25 00:21:39 +01:00
igor-suhorukov 67a91cf6f9 Polish: redundant pairs of parentheses should be removed 2018-02-25 00:01:43 +01:00
Juergen Hoeller eeecbaef2c Gson/JsonbHttpMessageConverter keeps output stream open (for SseEmitter)
Issue: SPR-16529
2018-02-23 10:49:38 +01:00
Juergen Hoeller 578c078082 Polishing 2018-02-22 15:14:20 +01:00
Juergen Hoeller 0f740527c1 Deprecated StringUtils.mergeStringArrays 2018-02-22 15:13:57 +01:00
Juergen Hoeller 1278459ad5 ReactorHttpHandlerAdapter logs bad request at warn level only
Issue: SPR-16524
2018-02-22 15:12:51 +01:00
Juergen Hoeller 3d6483873f Upgrade to Netty 4.1.22 2018-02-22 15:11:45 +01:00
Juergen Hoeller 0939492966 Upgrade to Apache Johnzon 1.1.6 2018-02-22 11:32:14 +01:00
Juergen Hoeller a5cbf5fe24 Consistent use of Collection.toArray with zero-sized array argument
Includes consistent use of ClassUtils.toClassArray (as non-null variant)

Issue: SPR-16523
2018-02-22 11:29:46 +01:00
Jinsoo Park 1ab3f88e82 Fix typo
MockMVc -> MockMvc
2018-02-21 14:22:40 -05:00
Rossen Stoyanchev bb8cddda23 Assert instances (vs classes) in MockMvc/WebTestClient
Issue: SPR-16520
2018-02-21 14:01:53 -05:00
Rossen Stoyanchev 3bfa56dff2 Polish 2018-02-21 10:29:46 -05:00
Rossen Stoyanchev 6959e66b25 JsonEOFException is wrapped as DecodingError
Jackson2Tokenizer now also wraps JsonProcessingException's on
endOfInput(), as it also does in tokenize(DataBuffer). This ensures
treating those errors as 400 vs 500.

Issue: SPR-16521
2018-02-21 10:12:33 -05:00
Rossen Stoyanchev a6d527e57a Call onAllDataRead when read() returns -1
When read returns -1, we know we've reached the end of input. Instead
of waiting for the onAllDataRead container callback, this commit
proactively calls onAllDataRead.

Issue: SPR-16521
2018-02-21 09:44:24 -05:00
Spring Buildmaster 1aaefbdd03 Next Development Version 2018-02-19 11:12:59 +00:00
Juergen Hoeller f316f6a46a Remove unnecessary assertions from annotation resolution code paths
Issue: SPR-16514
2018-02-19 10:29:09 +01:00
Juergen Hoeller 3ba858213f Upgrade to RxJava 1.3.6 2018-02-18 23:43:32 +01:00
Juergen Hoeller 0de36d2883 Consistent HttpMethod identity comparisons 2018-02-18 22:01:22 +01:00
Stephane Nicoll d1e9161ca6 Merge pull request #1691 from theHacker:patch-1
* pr/1691:
  Polish Javadoc
2018-02-18 08:57:51 +01:00
Alexander Münch 37f19a4b43 Polish Javadoc
WebSocketMessageBrokerStats's Javadoc now states the correct default
logging period.

Closes gh-1691
2018-02-18 08:57:08 +01:00
Juergen Hoeller 1ea233ac56 Upgrade to Reactor Bismuth SR6 2018-02-17 23:23:24 +01:00
Juergen Hoeller d7cab23e6d Consistent use of StringUtils.toStringArray
(cherry picked from commit 6d11b40)
2018-02-16 20:49:17 +01:00
Rossen Stoyanchev c198138d4e Polish URI encoding section 2018-02-16 14:35:15 -05:00
Rossen Stoyanchev 2b4250ec44 [doc] WebFlux has coverage of URI links
Issue: SPR-16423
2018-02-16 12:58:01 -05:00
Rossen Stoyanchev 9c679fccdf Fix intdentation 2018-02-16 12:34:25 -05:00
Rossen Stoyanchev ac495d7380 Polish ForwardedHeaderFilter and related code
Issue: SPR-16506
2018-02-16 12:17:23 -05:00
Juergen Hoeller c9d08bff41 DefaultListableBeanFactory only calls getPriority for non-null instance
Issue: SPR-16508
2018-02-16 17:27:42 +01:00
Rossen Stoyanchev 6920a1f958 ForwardedHeaderFilter handles query+fragment correctly
Issue: SPR-16506
2018-02-16 11:10:50 -05:00
Rossen Stoyanchev dcf5c646be Use correct X509 certificate attribute name
Issue: SPR-16507
2018-02-16 09:45:17 -05:00
Sam Brannen 1513e7be63 Polishing 2018-02-16 14:25:13 +01:00
Juergen Hoeller 8d3264f680 Prefer List.sort(Comparator) over Collections.sort(List, Comparator) 2018-02-16 10:23:18 +01:00
Juergen Hoeller b35274f5a7 WebSocket callbacks need to remain inner classes (retaining generics) 2018-02-16 10:22:05 +01:00
igor-suhorukov d5b0df8c3f Polish codacy warning: fields should be declared at the top of the class, before any method declarations, constructors, initializers or inner classes. 2018-02-16 09:38:19 +01:00
igor-suhorukov 2be4985b8f Polish: anonymous inner classes containing only one method should become lambdas,
use getOrDefault instead of ternary operator
2018-02-16 09:38:19 +01:00
Rossen Stoyanchev aa4bcedad3 Up-to-date and expanded coverage on preparing URIs
Issue: SPR-16422
2018-02-15 23:25:52 -05:00
Rossen Stoyanchev 9801afb85d Fix compile error
Update places that call UriUtils to catch the right exception that is
now raised as a result of using Charet.forName.
2018-02-15 15:59:21 -05:00
Rossen Stoyanchev 4db0d999af Polish UriBuilderFactory and implementation
Issue: SPR-16422
2018-02-15 15:44:44 -05:00
Rossen Stoyanchev 3d20db1e49 Polish UriUtils, UriComponents
Issue: SPR-16422
2018-02-15 15:44:37 -05:00
Rossen Stoyanchev 394c30efd0 Update to Bismuth snapshots 2018-02-15 11:08:05 -05:00
Juergen Hoeller cd8a1bdb8b AcceptHeaderLocaleContextResolver leniently handles invalid header value
Also falls back to language-only match among its supported locales now.

Issue: SPR-16500
Issue: SPR-16457
2018-02-15 13:14:49 +01:00
sdeleuze 067ad4c57a Update Kotlin reference documentation 2018-02-15 11:46:30 +01:00
Andy Wilkinson 52dfc4ebc4 Align spring-webflux's Webjars Locator dependency with spring-webmvc 2018-02-15 00:58:17 +01:00
Rossen Stoyanchev 3367df8637 Suggest use of OkHttp MockWebServer
Issue: SPR-16482
2018-02-14 17:32:24 -05:00
Juergen Hoeller 7baf33fea0 Avoid multiple warnings related to jackson-module-kotlin
Issue: SPR-16497
2018-02-14 21:19:57 +01:00
Rossen Stoyanchev 1aeae5d40d Fix compiler error 2018-02-14 12:23:52 -05:00
Rossen Stoyanchev 0ead0503eb AbstractJackson2Encoder uses private fields
Make the protected fields in AbstractJackson2Encoder private plus
minor refactoring to the way streaming separators are applied.

The current (5.0.3) behavior is to always use '\n', but in 5.0.4 the
newly supported "application/stream+x-jackson-smile" needs to be
excluded from that. For now, separator determination remains private
in the abstract base class, but current behavior remains which is to
apply '\n' by default.

Issue: SPR-15424
2018-02-14 12:15:01 -05:00
Juergen Hoeller 6d7573262e FormTag skips rendering of hidden fields in case of empty Map
Issue: SPR-16498
2018-02-14 17:41:45 +01:00
Juergen Hoeller de7ff556d9 Polishing 2018-02-14 17:41:08 +01:00
Sam Brannen 24adc7d3c6 Delete unused imports 2018-02-14 16:55:57 +01:00
Juergen Hoeller 95f7180298 Explicit documentation notes on transacted sessions vs AUTO_ACKNOWLEDGE
Issue: SPR-16487
2018-02-14 15:32:23 +01:00
Juergen Hoeller 3b810f3544 Consistent Class array vs vararg declarations (and related polishing) 2018-02-14 14:44:00 +01:00
Juergen Hoeller 46cbdff5c3 Consistent ControllerAdvice applicability against user-declared class
Issue: SPR-16496
2018-02-14 14:41:16 +01:00
Juergen Hoeller 766e6028d7 Defensively handle DatabaseMetaData.getConnection() returning null
Issue: SPR-16495
2018-02-14 14:40:52 +01:00
igor-suhorukov 7826567df6 Polish: lamdbas containing only one statement should not nest this statement in a block 2018-02-14 01:22:01 +01:00
Juergen Hoeller 99662bc702 Polishing 2018-02-13 23:32:10 +01:00
igor-suhorukov 45e520ed86 Polish: remove unused private fields, remove empty operator 2018-02-13 23:00:18 +01:00
Rossen Stoyanchev 1908080d5c Test for disconnected client detection
Issue: SPR-16494
2018-02-13 14:58:10 -05:00
Rossen Stoyanchev 8c37ad7ac5 Startup/shutdown log messages for AbstractHttpServer
Issue: SPR-16494
2018-02-13 14:58:10 -05:00
Juergen Hoeller 37609e4ede Object/FieldError exposes source object through unwrap/contains methods
Issue: SPR-16372
2018-02-13 17:58:31 +01:00
Stephane Nicoll 6bbc5b0f26 Merge pull request #1681 from olivergierke-patch-1
* pr/1681:
  Add explicit anchor to discussion about constructor VS. setter injection
2018-02-13 17:31:36 +01:00
Oliver Gierke 30316b16e5 Add explicit anchor to discussion about constructor VS. setter injection
This commit adds an Asciidoc anchor to the section on different injection
styles to be able to link to the discussion as official recommendation.

Closes gh-1681
2018-02-13 17:29:56 +01:00
Juergen Hoeller 0c78c9c6f7 Refined javadoc and exception messages 2018-02-13 15:25:42 +01:00
Juergen Hoeller d3cee45f30 Polishing 2018-02-13 13:15:29 +01:00
Sam Brannen c11a963b1e Remove dependency on apiguardian-api in spring-test
The apiguardian-api dependency is once again a mandatory transitive
dependency of JUnit 5 since JUnit Jupiter 5.0.3.
2018-02-13 13:04:48 +01:00
Sam Brannen 02fb5a4121 Use effectively final local variable in lambda expression 2018-02-13 12:56:36 +01:00
Juergen Hoeller c9aede3727 Upgrade to Tomcat 8.5.28 (and Selenium HtmlUnit Driver 2.29.2) 2018-02-13 12:44:34 +01:00
Vladimir Sitnikov 659f13be1c Avoid creating message arguments to Assert.isABC calls
See https://github.com/spring-projects/spring-framework/commit/67f184293b94c076b0474231f739a74f42d5ffa8
2018-02-13 12:31:49 +01:00
Juergen Hoeller b449928691 Avoid unused arguments for internal delegates 2018-02-13 11:40:28 +01:00
Rossen Stoyanchev 0585fb3999 Polish 2018-02-12 22:04:53 -05:00
Rossen Stoyanchev 4ee09c89b5 Fix regression in MappingJackson2MessageConverter
As of 4.3.13 MappingJackson2MessageConverter uses the MethodParameter
hint to obtain generic type information but it needs to be careful, and
nest one level, if the target parameter type has a Message wrapper.

Issue: SPR-16486
2018-02-12 21:30:26 -05:00
Juergen Hoeller 3c631f8ea0 SubProtocolWebSocketHandler closes sessions outside of lifecycle monitor
Issue: SPR-16488
2018-02-13 00:04:55 +01:00
Juergen Hoeller a5a069c5b1 Upgrade to JavaMail 1.6.1 2018-02-13 00:02:43 +01:00
Rossen Stoyanchev 73095955bf Refine logging in ExchangeFunctions
Notably do not log error signal since we are letting that propagate.

Also improve logging messages vs relying on the log operator.

Issue: SPR-16484
2018-02-12 15:56:04 -05:00
Juergen Hoeller b089ded5b0 Polishing 2018-02-12 15:55:18 +01:00
Juergen Hoeller d5cabca2f7 Internal adaptation to Deque semantics 2018-02-12 15:55:09 +01:00
Stephane Nicoll e7076ad35c Merge pull request #1676 from fabriziocucci:patch-1
* pr/1676:
  Fix indentation in doc
2018-02-12 08:12:55 +01:00
Fabrizio Cucci 13f942fab7 Fix indentation in doc
Closes gh-1676
2018-02-12 08:11:34 +01:00
Kazuki Shimizu 8c623c8a42 Supports ConversionService on SingleColumnRowMapper
Issue: SPR-16483
2018-02-11 22:36:50 +01:00
igor-suhorukov 711b0f50f2 Polish: replace the synchronized class "Stack" by an unsynchronized one such as "Deque". 2018-02-11 21:15:46 +01:00
Juergen Hoeller 3cbb2b7616 Upgrade to Hibernate ORM 5.1.12 (for integration tests) 2018-02-10 21:57:59 +01:00
Juergen Hoeller d00e1c5e4f Polishing 2018-02-10 21:35:46 +01:00
Juergen Hoeller b5bd977d9a Revised assertion refactoring in AbstractExpressionTests 2018-02-10 18:17:40 +01:00
Juergen Hoeller 91965500cb Upgrade to TestNG 6.14.2 and Selenium 3.9.1 2018-02-10 17:48:58 +01:00
Juergen Hoeller 55ee250659 Object/FieldError stores source object as transient (not serialized)
Issue: SPR-16372
2018-02-10 17:41:30 +01:00
igor-suhorukov 0ee505b73e Polish: assertion arguments should be passed in the correct order,
use assertNull instead of assertEquals(null, value),
declare delta as double value in assertEquals
2018-02-10 17:17:28 +01:00
Juergen Hoeller 39201adca4 Consistent handling of InterruptedException
Issue: SPR-16479
2018-02-10 13:03:33 +01:00
igor-suhorukov 6ea0af3540 Polish: Lambdas should be replaced with method references 2018-02-10 12:09:46 +01:00
igor-suhorukov d3a1d44864 Polish: Maps with keys that are enum values should be replaced with EnumMap 2018-02-10 12:09:33 +01:00
igor-suhorukov 9a6fbf59c5 Polish: follow name convention - make immutable fields final 2018-02-10 12:09:19 +01:00
Juergen Hoeller 9bb7fcd997 Object/FieldError provides access to source object (exception/violation)
Issue: SPR-16372
2018-02-09 18:42:56 +01:00
Juergen Hoeller e873b18f43 ResolvableType.forClassWithGenerics retains original TypeVariables
Issue: SPR-16456
2018-02-09 15:29:00 +01:00
Juergen Hoeller a639535f33 Upgrade to Netty 4.1.21 2018-02-09 13:33:16 +01:00
Juergen Hoeller c8b860c4b8 Streamlined BeanFactory access within DefaultLifecycleProcessor 2018-02-09 13:31:31 +01:00
Juergen Hoeller fc93f99f53 Relaxed procedure existence check on Oracle (for non-exposed synonyms)
Issue: SPR-16478
2018-02-09 13:30:31 +01:00
Stephane Nicoll 8222698eb2 Merge pull request #1569 from lonre:patch-1
* pr/1569:
  Fix typo
2018-02-09 10:18:33 +01:00
Lonre Wang b8c6734580 Fix typo
Closes gh-1569
2018-02-09 10:18:16 +01:00
Stephane Nicoll 991eb4858e Update copyright header 2018-02-09 10:16:58 +01:00
Stephane Nicoll 0d757bf3f7 Merge pull request #1671 from igor-suhorukov:master
* pr/1671:
  Change this "try" to a try-with-resources
2018-02-09 10:13:22 +01:00
igor-suhorukov c0b4b5787f Change this "try" to a try-with-resources
Closes gh-1671
2018-02-09 10:12:55 +01:00
Stephane Nicoll 909cacec42 Merge pull request #1670 from igor-suhorukov
* pr/1670:
  Collection.isEmpty() should be used to test for emptiness
2018-02-09 10:12:06 +01:00
igor-suhorukov e381514b07 Collection.isEmpty() should be used to test for emptiness
Closes gh-1670
2018-02-09 10:11:44 +01:00
Stephane Nicoll 7da40abba5 Merge pull request #1669 from igor-suhorukov
* pr/1669:
  Polish
2018-02-09 10:11:16 +01:00
igor-suhorukov 4c888d0f32 Polish
Closes gh-1669
2018-02-09 10:10:05 +01:00
Arjen Poutsma fb61af1882 Allow "release on close" for DataBuffer.asInputStream
This commit introduces DataBuffer.asInputStream(boolean), that can
release the underlying buffer when the stream is closed.

Furthermore, this commit adds additional javadoc.

Issue: SPR-16444
2018-02-08 10:11:53 +01:00
Juergen Hoeller 4318710b9b Upgrade to Hibernate 5.2.13 2018-02-07 14:14:22 +01:00
Juergen Hoeller 285b01fc79 Test with all-negated profile condition
Issue: SPR-16465
2018-02-07 14:14:11 +01:00
Juergen Hoeller ac7a699356 NamedParameterUtils.isParameterSeparator checks for non-ASCII characters
Issue: SPR-16472
2018-02-07 14:10:39 +01:00
Johnny Lim 5c0ddf3c69 Polishing 2018-02-07 10:59:10 +01:00
Rossen Stoyanchev 1b98d09855 Fix copy+paste error 2018-02-06 15:43:05 -05:00
Rossen Stoyanchev 9551b3a9bb Eliminate sub-sections in Spring MVC test chapter
The very short, summary mini-sections confuse the client-side code that
highlights the TOC item. This commit removes the sub-sections.
2018-02-06 12:16:31 -05:00
Rossen Stoyanchev efdfe9ad8d Minor Javadoc update 2018-02-06 11:23:53 -05:00
Rossen Stoyanchev 1653a32a04 Stabilize Flux.interval emissions in integration tests
After this commit the use of interval in tests is combined with
take(n).onBackpressureBuffer(n) to ensure emissions don't fail if the
fixed rate is exceeded (e.g. on slow CI server).

Tests that verify N number of items followed by verifyOnComplete()
should set the number of emissions to N.

Tests that verify N number of items followed by thenCancel() should
set the number of buffered to an arbitrary number greater than N.
2018-02-06 11:01:19 -05:00
Juergen Hoeller 41a4bdea55 Upgrade to Kotlin 1.2.21 2018-02-05 22:51:59 +01:00
Juergen Hoeller 5c813a366b Consistent use of @throws instead of @exception 2018-02-05 22:51:51 +01:00
Juergen Hoeller 0ac117ff27 Explicit notes on isolation level handling in participating transactions
Issue: SPR-16463
2018-02-05 22:51:43 +01:00
Juergen Hoeller 817a836960 Consistent object type exposure for JSON rendering (workaround for Gson)
Issue: SPR-16461
2018-02-05 22:51:33 +01:00
sdeleuze 31b25b5808 Make WebFlux Jackson refdoc section relevant for Smile
Issue: SPR-16151
2018-02-05 18:00:41 +01:00
sdeleuze 196f3f8cc1 Improve WebFlux exception logging
This commit updates HttpWebHandlerAdapter and
ResponseStatusExceptionHandler in order to specify the method/uri in the
logged message.

It also logs a WARN message for bad request (400) HTTP responses in
order to get some logs when an exception is thrown due to client error
(unable to deserialize request body for example).

Issue: SPR-16447
2018-02-05 16:08:22 +01:00
Stephane Nicoll fdde9de005 Merge pull request #1606 from kamilszymanski:arraycopy
* pr/1606:
  Replace manual array copy with native method call
2018-02-04 11:41:10 +01:00
Kamil Szymanski 61117245a6 Replace manual array copy with native method call
Closes gh-1606
2018-02-04 11:39:43 +01:00
Rossen Stoyanchev f20eacdb9b Polish 2018-02-02 15:06:59 -05:00
Rob Winch 0cd427bdd3 MockHttpServletRequestBuilder decodes pathInfo
Previously MockHttpServletRequestBuilder calculated the pathInfo from the
provided URL without decoding the value. This meant that the pathInfo
incorrectly included URL encoded values.

Now MockHttpServletRequestBuilder properly decodes the pathInfo.

Fixes: SPR-16453
2018-02-02 15:00:47 -05:00
Arjen Poutsma 609f173ebc StringDecoder shouldn't chop off strings randomly
Issue: SPR-16337
2018-02-02 15:59:21 +01:00
Juergen Hoeller cfe7ff1c81 MimeType.compareTo uses case-insensitive Charset (analogous to equals)
Issue: SPR-16458
2018-02-02 13:44:07 +01:00
Juergen Hoeller 4dc964544f AcceptHeaderLocaleResolver falls back to language-only match among its supported locales
Issue: SPR-16457
2018-02-02 12:41:59 +01:00
Juergen Hoeller c5a33d62dd TypeVariablesVariableResolver compares variables by full equality again
Issue: SPR-16456
2018-02-02 12:41:43 +01:00
Juergen Hoeller 30f6e447d5 TypeVariablesVariableResolver compares variables by name
Issue: SPR-16456
2018-02-02 11:34:36 +01:00
Juergen Hoeller b3e21ec737 MockHttpServletRequest leniently handles invalid Accept-Language header
Issue: SPR-16454
2018-02-02 11:34:22 +01:00
Juergen Hoeller 7f96827ade Polishing 2018-02-02 11:34:03 +01:00
Juergen Hoeller 4a1cc9ced7 Constructor-provided field values get recorded for failed binding result
Also, TypeMismatchExceptions get registered via BindingErrorProcessor.

Issue: SPR-16449
2018-02-02 11:33:56 +01:00
Juergen Hoeller 9c069f6cb1 Avoid String concatenation for not-null assertion in BeanProperty/DirectFieldBindingResult
Issue: SPR-16455
2018-02-02 11:33:39 +01:00
Juergen Hoeller b6ecfcf9ec CachingConnectionFactory makes its Session caching inactive during reset
Issue: SPR-16450
2018-02-02 11:33:10 +01:00
Stephane Nicoll 10caaefd0b Merge pull request #1657 from izeye:polish-20180201
* pr/1657:
  Polish SqlParameter.sqlTypesToAnonymousParameterList()
2018-02-01 09:15:37 +01:00
Johnny Lim df3241e072 Polish SqlParameter.sqlTypesToAnonymousParameterList()
Closes gh-1657
2018-02-01 09:14:56 +01:00
Stephane Nicoll f0dd31a639 Merge pull request #1656 from adamlehenbauer:master
* pr/1656:
  Fix typos
2018-02-01 08:44:57 +01:00
adamlehenbauer 8de80ffe9e Fix typos
Closes gh-1656
2018-02-01 08:43:49 +01:00
Rossen Stoyanchev 0ded239453 [doc] Update Spring MVC exception handling content
Issue: SPR-16394
2018-01-31 23:03:10 -05:00
Rossen Stoyanchev d9a93f44ae [doc] Update links to composed annotations 2018-01-31 20:39:34 -05:00
sdeleuze b6c78452b2 Update and improve script templating documentation
Issue: SPR-16447
2018-01-31 17:57:41 +01:00
Rossen Stoyanchev b77032c36e [doc] Explain custom/composed @RequestMapping annotations
Issue: SPR-16442
2018-01-31 11:03:37 -05:00
sdeleuze b2681e1f4a Add ViewResolverRegistry#scriptTemplate in WebFlux
Issue: SPR-16431
2018-01-31 10:38:08 +01:00
Juergen Hoeller c7f60d1799 SchedulerFactoryBean always ignores local factory settings in case of an external SchedulerFactory instance (expecting it to be fully initialized)
This commit includes various javadoc fixes and related refinements.

Issue: SPR-16439
2018-01-30 22:35:42 +01:00
Rossen Stoyanchev 6d909b013e Do not commit response on access to content
MockHttpServletResponse no longer calls flushBuffer on calls to
getContentAsByteArray and getContentAsString. The flushing doesn't
actually do anything useful but does commit the response leading to
unexpected side effects.

Issue: SPR-16430
2018-01-30 16:19:08 -05:00
Juergen Hoeller cd57335e46 SchedulerFactoryBean ignores local factory settings in case of external SchedulerFactory instance (unless it extends from StdSchedulerFactory)
Issue: SPR-16439
2018-01-30 21:31:04 +01:00
sdeleuze d02e4fb545 Add Vary:Access-Control-Request-Method/Headers CORS headers
This commit adds these 2 Vary headers in addition to the existing
Origin one to avoid caching of Access-Control-Request-Method and
Access-Control-Request-Headers headers which can be an issue
when allowed methods or headers are unbounded and only the
requested method or headers are returned in the response.

Issue: SPR-16413
2018-01-30 17:00:32 +01:00
Juergen Hoeller 857a5b03b7 SchedulerFactoryBean accepts external Quartz SchedulerFactory instance
Issue: SPR-16439
2018-01-30 16:55:09 +01:00
Rossen Stoyanchev f4de8615aa Fix encoding issue in ServerHttpRequest.mutate()
Issue: SPR-16434
2018-01-30 10:23:02 -05:00
Juergen Hoeller 637e09f995 Polishing 2018-01-30 16:00:30 +01:00
Juergen Hoeller ef2e16912d Formatting support for java.time.Year and java.time.Month
Issue: SPR-16437
2018-01-30 15:54:47 +01:00
Juergen Hoeller 89d2bd954a Properly analyze Java 9 class cast messages for lambda event listeners
Issue: SPR-16435
2018-01-30 15:53:58 +01:00
Rossen Stoyanchev 4f28c28287 Update Javadoc on uriTemplateHandler property
Issue: SPR-16419
2018-01-29 21:53:22 -05:00
Rossen Stoyanchev 5ff724968d [docs] View Technologies section in WebFlux
Issue: SPR-16393
2018-01-29 21:28:48 -05:00
Rossen Stoyanchev 49eec6248d [docs] Reorder View Technologies
From:
  Thymeleaf
  Groovy Markup
  FreeMarker
  JSP & JSTL
  Script Views
  XML
  Tiles
  XSLT
  PDF, Excel
  RSS, Atom
  Jackson

To:
  Thymeleaf
  FreeMarker
  Groovy Markup
  Script views
  JSP & JSTL
  Tiles
  RSS, Atom
  PDF, Excel
  Jackson
  XML
  XSLT

Also move View Technologies after MVC Config to align order with
WebFlux config.

Issue: SPR-16393
2018-01-29 16:43:51 -05:00
Rossen Stoyanchev e76973c5f0 [docs] Update view-related content
1. The View Technologies chapter in Spring MVC
2. The View Resolution and View Resolver config in WebFlux

Issue: SPR-16393
2018-01-29 16:43:51 -05:00
Juergen Hoeller 8d42888476 Upgrade to RxJava 1.3.5 and WebJars Locator 0.35
Includes Rhino 1.7.8 and JRuby 9.1.15 as well.
2018-01-29 21:31:27 +01:00
Juergen Hoeller 7772b914c6 Deep BeanCurrentlyInCreationException check in getTypeForFactoryBean
Issue: SPR-16427
2018-01-29 21:13:59 +01:00
sdeleuze 32f6ccece8 Add WebFlux support for Smile streaming
The commit brings following changes:
 - Move getDecodableMimeTypes() to AbstractJackson2Decoder
 - Move getEncodableMimeTypes() to AbstractJackson2Encoder
 - Add support for application/stream+x-jackson-smile
 - Avoid streaming line separator when Smile encoder is used
 - Use double null token in Jackson2Tokenizer to identify documents

Issue: SPR-16151
2018-01-29 18:56:25 +01:00
Juergen Hoeller e1fa65a37c Notes about HibernateJpaVendorAdapter settings vs native Hibernate rules
Issue: SPR-16428
2018-01-29 18:40:18 +01:00
Juergen Hoeller 4e194c3fbe Deprecate outdated HibernateTemplate operations in favor of lambdas
Issue: SPR-16426
2018-01-29 18:40:08 +01:00
Rossen Stoyanchev c718ddf7b0 Update CONTRIBUTING.md 2018-01-29 09:26:23 -05:00
Rossen Stoyanchev 0762131d88 Update CONTRIBUTING.md 2018-01-29 09:25:46 -05:00
Rossen Stoyanchev 00b95b10a8 Docs: result handling and view resolution
Issue: SPR-16393
2018-01-26 22:14:14 -05:00
Rossen Stoyanchev fbde97f302 Default order 0 for ServerResponseResultHandler
Issue: SPR-16420
2018-01-26 17:06:01 -05:00
Sam Brannen b612f53e27 Rename doesExist() to exists() for header assertions 2018-01-26 17:24:54 +01:00
Juergen Hoeller 0e734d83d5 @EnableAspectJAutoProxy: per application context, requires aspectjweaver
Issue: SPR-14753
Issue: SPR-15801
2018-01-26 10:38:43 +01:00
Juergen Hoeller 37ab8a700b Doc: no "useCodeAsDefaultMessage" for setValidationMessageSource
Issue: SPR-15986
2018-01-26 10:35:37 +01:00
Juergen Hoeller e49198d49f Polishing 2018-01-25 22:12:29 +01:00
Juergen Hoeller 13c735442c @Scheduled supports java.time.Duration format for its delay attributes
Issue: SPR-15455
2018-01-25 19:11:18 +01:00
Juergen Hoeller ef3f93e84a Language tag parsing support in StringUtils and StringToLocaleConverter
Issue: SPR-16188
2018-01-25 19:10:31 +01:00
Juergen Hoeller c6b0d85a7c Consistent available() support in DelegatingServletInputStream
Issue: SPR-16416
2018-01-25 19:06:20 +01:00
Ketan Padegaonkar a0c9fdba12 Fix DelegatingServletInputStream#available
Ensure that the method returns the correct number of bytes that can be
read without blocking

Issue: #SPR-16416
2018-01-25 18:02:59 +01:00
Sam Brannen 165ca12e6d Add doesExist() to HeaderAssertions for WebTestClient 2018-01-25 15:50:19 +01:00
Sam Brannen 431494096a Polishing 2018-01-25 15:49:06 +01:00
Juergen Hoeller cf100d4d03 AbstractClientSockJsSession.close propagates IOException from disconnect
Issue: SPR-16415
2018-01-25 12:24:46 +01:00
Juergen Hoeller 8e2be91353 Fine-tuned logging of WebSocket close exceptions
Issue: SPR-16409
2018-01-25 12:24:40 +01:00
Juergen Hoeller 9ef0465c34 Upgrade to Jackson 2.9.4 and RxJava 2.1.9 2018-01-25 12:24:17 +01:00
Rossen Stoyanchev b948e7cf75 Polish 2018-01-24 19:58:14 -05:00
Rossen Stoyanchev 84cc7ffdf6 Fix test failure 2018-01-24 19:55:46 -05:00
Rossen Stoyanchev 5d25ca29a6 Merge pull request #1649 from neonailol/header-does-exist-matcher 2018-01-24 17:39:15 -05:00
Rossen Stoyanchev 49f1aa78eb Polish 2018-01-24 17:37:49 -05:00
Neonailol 81ca1f7c2b Add doesExist assertion method to HeaderResultMatchers 2018-01-24 17:28:46 -05:00
Rossen Stoyanchev cf812ba831 Reference docs: improve async request content 2018-01-24 17:28:20 -05:00
Juergen Hoeller 0e6f8df0a8 ServletServerHttpRequest.getURI() ignores malformed query string
The resolved URI instance is also being cached now. This should not make a difference in a real Servlet environment but does affect tests which assumed they could modify an HttpServletRequest path behind a pre-created ServletServerHttpRequest instance. Our WebSocket test base class has been revised accordingly, re-creating the ServletServerHttpRequest in such a case.

Issue: SPR-16414
2018-01-24 22:13:40 +01:00
Stephane Nicoll 6db1b692b8 Merge pull request #1650 from izeye:polish-20180124
* pr/1650:
  Polish "Remove an unnecessary intermediate variable"
  Remove an unnecessary intermediate variable
2018-01-24 09:19:15 +01:00
Stephane Nicoll 42a2081e8c Polish "Remove an unnecessary intermediate variable"
Closes gh-1650
2018-01-24 09:18:46 +01:00
Johnny Lim 826db88509 Remove an unnecessary intermediate variable
See gh-1650
2018-01-24 09:18:24 +01:00
sdeleuze 1af052433c Document @Bean nullable parameters optional bean injection
Issue: SPR-16053
2018-01-23 18:05:05 +01:00
Rossen Stoyanchev 97894a1c22 Improve logging dependencies for tests 2018-01-23 10:42:41 -05:00
Spring Buildmaster 14fa2b18ce Next Development Version 2018-01-23 09:42:34 +00:00
Rossen Stoyanchev 4b861aeae6 Reference docs: update async request content
Issue: SPR-16203
2018-01-22 22:42:59 -05:00
Rossen Stoyanchev aee8a9c97b Upgrade to Bismuth-SR5
Issue: SPR-16385
2018-01-22 19:57:38 -05:00
Juergen Hoeller 91e6274b7d Upgrade to Apache HttpClient 4.5.5 and Tomcat 8.5.27 2018-01-22 22:11:00 +01:00
Juergen Hoeller 61579ffe7b Polishing 2018-01-22 21:34:44 +01:00
Arjen Poutsma b47491695e Support array of scalar values in Jackson2Tokenizer
Issue: SPR-16407
2018-01-22 17:08:08 +01:00
Juergen Hoeller 9d0e62ef68 Javadoc format and related polishing 2018-01-22 11:43:21 +01:00
Juergen Hoeller 3dd6c19c6d Upgrade to Netty 4.1.20 2018-01-22 11:43:06 +01:00
Arjen Poutsma 0befc60c8f Renamed DataBufferUtils/DataBufferFactory.compose to join
Issue: SPR-16365
2018-01-22 10:51:07 +01:00
sdeleuze 3f3141cdda Add additional test for SPR-16210
Issue: SPR-16210
2018-01-22 10:29:21 +01:00
Arjen Poutsma 646fcc5c2f Support Custom Headers for Multipart Async Data
This commit makes sure there is no custom Content-Disposition header
before setting one automatically.

This commit also adds a headers(Consumer<HttpHeaders>) method, so that
one can user the nicer methods of HttpHeaders, as opposed to basic
strings.

Issue: SPR-16376
2018-01-20 15:18:20 +01:00
Juergen Hoeller b2ce98e881 Upgrade to CGLIB 3.2.6
Issue: SPR-16267
2018-01-20 14:29:56 +01:00
Juergen Hoeller 395c9bd723 Consistently call HttpURLConnection.setFixedLengthStreamingMode(long)
Issue: SPR-16404
2018-01-20 14:29:40 +01:00
andrm 142f1ab42f Removed unnecessary cast to int
Since Java7 HttpURLConnection offers setFixedLengthStreamingMode method with long parameter which should be prefered over version with int argument, therefore casting ContentLength to int is no longer needed. Moreover it makes impossible to stream payload larger than Integer.MAX_VALUE
2018-01-20 14:11:15 +01:00
Stephane Nicoll 0ca4cd1cf8 Merge pull request #1647 from izeye:polish-20180120
* pr/1647:
  Polish InterceptorRegistration
2018-01-20 10:15:53 +01:00
Johnny Lim 36d42bcda4 Polish InterceptorRegistration
Closes gh-1647
2018-01-20 10:15:12 +01:00
Rossen Stoyanchev 283811b16b Ensure filename is written
Now that SPR-16307 makes it possible to write a part with a Publisher
we need to ensure we get the filename correctly when writing with
Publisher<Resource>.

Issue: SPR-16376
2018-01-19 22:12:53 -05:00
Rossen Stoyanchev aea6bb6357 Update STOMP docs on using dot as separator
Issue: SPR-16275
2018-01-19 21:51:31 -05:00
Rossen Stoyanchev 0fb31c5e36 Refine "." separator support for STOMP messaging
After this commit DefaultUserDestinationResolves no longer looks at
whether AntPathMatcher is configured with "." as separator and rather
expects to be explicitly told whether to keep the leading slash in
translated destinations which actually depends on what the message
broker supports (e.g. RabbitMQ "/", Artemis ".") or how it is
configured (simple broker could be either way).

There is also a minor improvement in SimpMessagingTemplate to ensure
user destinations are correctly formed based on what the
DefaultUserDestinationResolver expects. When using "." as separtor it
allows sending messages to "queue.q1" rather than "/queue.q1".

Issue: SPR-16275
2018-01-19 21:02:43 -05:00
Rossen Stoyanchev 17f9b61249 Polish MessageBrokerConfigurationTests 2018-01-19 21:02:43 -05:00
Rossen Stoyanchev afd248da8a MultipartHttpMessageWriter consumes source once only
The previous fix #09f1f7 did not actually address the issue but only
moved it further down, so instead of the subscribe(), it was consuming
it inside the MultipartHttpMessageWriter#write method which returned
this.body.then(), and then again for the actual request body writing.

In this commit MultipartHttpMessageWriter#write returns Mono.empty()
since we don't actually want to write the part content from there, but
only want to access it as soon as it is availabele, for writing to
the request body.

Issue: SPR-16402
2018-01-19 20:55:22 -05:00
Juergen Hoeller 572c668726 Polishing 2018-01-19 21:30:37 +01:00
Arjen Poutsma 5520e730f1 DataBufferUtils.read should not take input stream/channel as parameter
Fixed by creating `Callable`-based variants, as explained in the JIRA
issue.

Issue: SPR-16403
2018-01-19 17:38:14 +01:00
Rossen Stoyanchev 09f1f727a7 Remove explicit subscribe in MultipartHttpMessageWriter
Issue: SPR-16402
2018-01-19 10:41:08 -05:00
Juergen Hoeller 40127bd9ad Polishing 2018-01-19 12:30:10 +01:00
Juergen Hoeller 4c7414833b ResolvableType returns clone for cached state with original local source
Issue: SPR-16210
2018-01-19 12:30:03 +01:00
Rossen Stoyanchev 357fb48d13 Update docs on stomp.js library
Issue: SPR-15624
2018-01-18 13:09:40 -05:00
Rossen Stoyanchev 513461d4f1 Update STOMP overview
Issue: SPR-15624
2018-01-18 13:04:43 -05:00
Arjen Poutsma c53c8bfc5a Set 304 status on ServerResponse when ETag/LastModified match
This commit checks the Etag/LastModified headers on the incoming
request, and sets a 304 Not Modified status with no body when they
match, by delegating to ServerWebExchange.checkNotModified.

Issue: SPR-16348
2018-01-18 11:34:38 +01:00
Arjen Poutsma c211e3998b Polishing 2018-01-18 11:34:38 +01:00
Arjen Poutsma 61d330f805 Javadoc 2018-01-18 11:34:38 +01:00
Juergen Hoeller ea5f8f5a7c Consistently handle NoClassDefFoundError in BeanUtils and related places
Issue: SPR-16369
2018-01-17 20:24:57 +01:00
Rossen Stoyanchev 0c289283ff Separate from expectations from response creation
This commit separates the creation of a response so that it is executed
after the synchronized block inside which requests need to be matched
and validated (for order and count).

This allows a ResponseCreator to be slow or block if it has to.

Issue: SPR-16319
2018-01-17 13:01:40 -05:00
Rossen Stoyanchev 7ab4d0ca08 Polish MockRestServiceServer code 2018-01-17 13:01:40 -05:00
Juergen Hoeller 214576673a Proper NoClassDefFoundError check against BeanUtils.instantiateClass
Issue: SPR-16369
2018-01-17 18:29:05 +01:00
Juergen Hoeller 32b4279929 Upgrade to Kotlin 1.2.20 (and Undertow 1.4.22) 2018-01-17 18:28:26 +01:00
Stephane Nicoll 817254f2eb Merge pull request #1646 from JanStureNielsen:patch-2
* pr/1646:
  Fix doc typo
2018-01-17 18:07:04 +01:00
Jan Nielsen fed81c6f83 Fix doc typo
Closes gh-1646
2018-01-17 18:06:17 +01:00
Stephane Nicoll dfe4e01f51 Merge pull request #1645 from JanStureNielsen:patch-1
* pr/1645:
  Fix doc typo
2018-01-17 18:06:04 +01:00
Jan Nielsen df9761cb3f Fix doc typo
Closes gh-1645
2018-01-17 18:05:39 +01:00
Rossen Stoyanchev 12baafd4f0 WebFlux docs: security + consistent order for WebFlux config 2018-01-16 23:23:26 -05:00
Rossen Stoyanchev 1148b61dfa WebMVC Docs: remove old code-by-convention content
We cover this more succinctly from other places, e.g. in Model Methods
by referring to the Javadoc of Contentions, or pointing to the
RequestToViewNameTranslator.
2018-01-16 23:23:09 -05:00
Rossen Stoyanchev bb7152d6e7 WebFlux docs: matrix variables
Issue: SPR-16040
2018-01-16 22:53:40 -05:00
Rossen Stoyanchev 61fc321554 WebFlux docs: Request|ResponseBody + Http|ResponseEntity
Issue: SPR-16040
2018-01-16 22:10:04 -05:00
Rossen Stoyanchev 4f2e54fc2d Document multipart data support for WebFlux
Issue: SPR-16040
2018-01-16 16:53:19 -05:00
Rossen Stoyanchev b97fa4a5ee Update docs on multipart requests + table of parameters
Issue: SPR-16040
2018-01-16 11:33:27 -05:00
Juergen Hoeller 65a167f7fd JmsListenerAnnotationBeanPostProcessor properly deals with nested proxies
Issue: SPR-16196
2018-01-16 14:39:31 +01:00
Juergen Hoeller 0270808b3c Upgrade to EclipseLink 2.7.1 2018-01-16 14:39:14 +01:00
Timo Meinen 823a16ce17 Log SQL parameters in EclipseLink when using showSql
As of EclipseLink 2.4.0 - Juno this is not sufficient to log
SQL parameter binding. Additionally,
eclipselink.logging.parameters must be enabled.

Issue: SPR-16383
2018-01-16 14:20:49 +01:00
Sam Brannen 7b4ec72378 Upgrade to JUnit Jupiter 5.0.3
Issue: SPR-16384
2018-01-16 13:17:32 +01:00
Rossen Stoyanchev 437c33ba42 WebFlux @ModelAttribute coverage in reference
Issue: SPR-16040
2018-01-15 17:47:27 -05:00
sdeleuze 43d3abdfd5 Fix SockJs CorsConfiguration for forbidden origins
After this commit, AbstractSockJsService uses the configured allowed
origins when generating the CorsConfiguration instead of "*".

As a consequence, forbidden origin requests still result in a 403
response but now with no CORS headers in order to improve consistency
between the status code and the headers.

Issue: SPR-16304
2018-01-15 18:07:24 +01:00
Stephane Nicoll 3ae776b1fa Fix BOM link
Issue: SPR-16317
2018-01-15 17:12:19 +01:00
Rossen Stoyanchev 61352fe85b Fix compile error 2018-01-15 10:28:12 -05:00
Rossen Stoyanchev 6375cc55a3 Merge pull request #1642 from EnvOut/master 2018-01-15 10:01:54 -05:00
Rossen Stoyanchev dd09c08cdf Replace use of AbstractWebSocketMessageBrokerConfigurer 2018-01-15 10:01:14 -05:00
Sergey d6591a6329 Default methods in WebSocketMessageBrokerConfigurer
+ deprecate AbstractWebSocketMessageBrokerConfigurer
2018-01-15 09:54:55 -05:00
Stephane Nicoll 42dfa40151 Make sure endpoint settings override default factory settings
Issue: SPR-16338
2018-01-15 15:42:50 +01:00
Stephane Nicoll 89b81b0080 Merge pull request #1636 from izeye:exception-message
* pr/1636:
  Fix an exception message in ScheduledAnnotationBeanPostProcessor
2018-01-15 15:19:16 +01:00
Johnny Lim d31767eab8 Fix an exception message in ScheduledAnnotationBeanPostProcessor
Closes gh-1636
2018-01-15 15:19:02 +01:00
Juergen Hoeller b160f93495 CacheProxyFactoryBean exposes all relevant CacheInterceptor callbacks
Issue: SPR-16295
2018-01-14 23:48:21 +01:00
Juergen Hoeller 44fd2d96cc Restore original separator set (but keep new isParameterSeparator impl)
Issue: SPR-16340
2018-01-14 17:57:32 +01:00
Juergen Hoeller 9623cdec48 Functional response builders allow for non-standard HTTP status codes
Issue: SPR-16366
2018-01-14 17:45:58 +01:00
Philippe Marschall 91e39d558f Use ArrayList instead of LinkedList for known size
Spring JDBC unlike other modules uses LinkedList instead of ArrayList
in several places. There is a large body of evidence suggesting that on
contemporary hardware ArrayList is both faster and has less overhead
than even in degenerate cases of empty lists [3] or unknown size.

There are two places in Spring JDBC where the size of the list is known
in advance and an ArrayList of the correct final size can be created

 [1] https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8011200
 [2] http://cliffc.org/blog/2017/11/05/modern-hardware-performance-cache-lines/
 [3] https://bugs.openjdk.java.net/browse/JDK-8011200

Issue: SPR-16378
2018-01-14 17:45:32 +01:00
Sam Brannen c88f11f958 Avoid deprecation warnings on JDK 9 in spring-test 2018-01-13 16:45:04 +01:00
Rossen Stoyanchev 1dbcd66091 More sections in WebFlux docs @Controller argument
Issue: SPR-16040
2018-01-12 16:48:06 -05:00
Juergen Hoeller 4c9ed0d87e Polishing 2018-01-12 18:24:00 +01:00
Juergen Hoeller 06e6386dc9 CollectionUtils.lastElement for common Set/List extraction
Issue: SPR-16374
2018-01-12 18:23:52 +01:00
Juergen Hoeller 13a8f90e08 ScheduledAnnotationBeanPostProcessor properly deals with nested proxies
Issue: SPR-16196
2018-01-12 16:48:17 +01:00
Juergen Hoeller a15975d94d Log non-loadable TestExecutionListener classes at debug level only
Issue: SPR-16369
2018-01-12 16:47:46 +01:00
Juergen Hoeller 93f645800b Test for non-equality after URI normalization
Issue: SPR-16364
2018-01-12 16:46:06 +01:00
Juergen Hoeller 347c2daa2c Test for multiple interfaces at BridgeMethodResolver level
Issue: SPR-16288
2018-01-12 16:45:38 +01:00
Arjen Poutsma e39bf87b07 Add reference docs for DataBufferUtils.compose
Issue: SPR-16365
2018-01-12 11:38:50 +01:00
Arjen Poutsma 67e7c784e8 Use DataBufferUtils.compose and remove writeAggregator
Use DataBufferUtils.compose instead of writeAggregator to combine
multiple data buffers into one, as the write aggregator would not work
when the initial data buffer did not have enough capacity to contain
all subsequent buffers.

Removed writeAggregator, as it is no longer needed.

Issue: SPR-16365
2018-01-12 10:36:09 +01:00
Arjen Poutsma 384a399fd2 Add DataBufferUtils.compose
Added a utility method that composes data buffers into a single buffer.
Depending on the `DataBuffer` implementation, the returned buffer may be
a single buffer containing all data of the provided buffers, or it may
be a true composite that contains references to the buffers.

Issue: SPR-16365
2018-01-12 10:36:09 +01:00
Rossen Stoyanchev c60313de3f Refine UriTemplate match pattern
The match/matches methods of UriTemplate use a regex with (.*) in place
of URI variables, which work fine except in the end where such a
pattern can match greedily more than one segment.

This commit updates the regex to use ([^/]*) instead since URI
variables are only meant to be used within a single path segment.

Issue: SPR-16169
2018-01-11 16:36:35 -05:00
Rossen Stoyanchev 84b8ceca0f Update Javadoc for AbstractHandlerMapping properties
Clarify what PathPatternParser is used for which is CORS checks in the
very least. Some sub-classes will also use it for request mapping but
not all (e.g. RouterFunctionMapping). Hence the need to be more
explicit.
2018-01-11 12:41:04 -05:00
Rossen Stoyanchev 72e3c43375 Refine @EnableWebFlux docs for functional endpoints
@EnableWebFlux bootstraps both annotated controllers and functional
endpoints, so we need to be more explicit about which parts of the
configuration apply to which.

Issue: SPR-16360
2018-01-11 12:25:42 -05:00
Juergen Hoeller 8f6d3feaa0 Tests for non-required MultipartFile parameters
Issue: SPR-16329
2018-01-11 10:22:59 +01:00
Juergen Hoeller 121f9e3734 BridgeMethodResolver properly resolves all declared interfaces
Issue: SPR-16288
2018-01-11 10:18:27 +01:00
Rossen Stoyanchev ea73ec5c41 ResourceUrlProvider handles sanitizes double slashes
Issue: SPR-16296
2018-01-10 17:48:43 -05:00
Rossen Stoyanchev cdf2ab9737 Expand docs on WebFlux.fn + @EnableWebFlux
Issue: SPR-16360
2018-01-10 16:28:34 -05:00
sdeleuze 19a1477228 Fix Kotlin bean w/ default + secondary ctors handling
This commit polishes SPR-16022 fix in order to handle correctly
the case when primary and default constructors are the same when
a secondary constructor is defined.

Issue: SPR-16289
2018-01-10 18:29:33 +01:00
Arjen Poutsma 5adaa1030c Javadoc 2018-01-10 17:54:51 +01:00
Arjen Poutsma f7bf6460aa Reverted signature change on fromMultipartData
Reverted back from `MultiValueMap<String, Object>` to
`MultiValueMap<String, ?>`
2018-01-10 17:54:51 +01:00
Rossen Stoyanchev b36af8a11f Uncomment test after Reactor Netty fix
Issue: SPR-16246
2018-01-10 10:47:36 -05:00
Arjen Poutsma 8a129ef3da Use write aggregator from DataBufferUtils
This commit uses the newly introduced write aggregator from
DataBufferUtils throughout WebFlux.

Issue: SPR-16351
2018-01-10 11:15:47 +01:00
Arjen Poutsma 69ccba30e9 Introduce write aggregator to DataBufferUtils
As a consequence of dropping CompositeByteBuf (see prior commit),
DataBuffers fluxes that are aggregated with Flux.reduce(BiFunction) are
now required to be released, as the composite no longer holds a
reference to subsequent data buffers.

For this purpose, DataBufferUtils now has a writeAggregator that can be
used with Flux.reduce, and that released the subsequent buffers
properly.

Issue: SPR-16351
2018-01-10 11:14:02 +01:00
Arjen Poutsma e6893da971 Remove use of CompositeByteBuf in NettyDataBuffer
Prior to this commit, NettyDataBuffer had a optimization in
write(ByteBuf...), where it used a CompositeByteBuf to hold the original
and the parameter buffer.
Unfortunately, this procedure has nasty consequences when splicing
buffers (see https://stackoverflow.com/a/48111196/839733).

As of this commit, NettyDataBuffer stopped using CompositeByteBuf, and
 simply does ByteBuf.write().

Issue: SPR-16351
2018-01-10 11:05:41 +01:00
Rossen Stoyanchev 5ed0cf9027 Fix init issues in AbstractReactiveWebInitializer
Issue: SPR-16290
2018-01-09 17:32:40 -05:00
Rossen Stoyanchev 537f79f680 Merge pull request #1609 from jeff/SPR-16245 2018-01-09 16:40:46 -05:00
Rossen Stoyanchev 018469286d Polish 2018-01-09 16:39:40 -05:00
Jeff Nelson 30e40210a8 Extract protected method in AbstractRequestLoggingFilter
Issue: SPR-16245
2018-01-09 16:38:21 -05:00
Juergen Hoeller c8bdb3c602 Polishing 2018-01-09 22:20:22 +01:00
Juergen Hoeller e43439c6c3 SqlParameterSource interface exposes parameter names
Includes default implementations of getSqlType and getTypeName.

Issue: SPR-16361
2018-01-09 22:19:46 +01:00
Juergen Hoeller b2322e58d9 Support for PostgreSQL array syntax
Includes efficient separator determination.

Issue: SPR-16340
2018-01-09 22:19:05 +01:00
Masahiro Ide d9af4d6599 ResourceBundleMessageSource uses ConcurrentHashMaps instead of synchronization
Issue: https://jira.spring.io/browse/SPR-16235
2018-01-09 22:12:03 +01:00
Stephane Nicoll f72318a0ae Merge pull request #1640 from making:patch-2
* pr/1640:
  Fix source code in doc
2018-01-09 19:17:24 +01:00
Toshiaki Maki 50b46c9e35 Fix source code in doc
Closes gh-1640
2018-01-09 19:17:09 +01:00
sdeleuze 9c7de232b8 Polishing
Optimize same origin check when the request is an instance of
ServletServerHttpRequest and when there is no forwarded headers.

This commit also optimizes the getPort methods and ForwardedHeaderFilter
forwarded headers checks.

Issue: SPR-16262
2018-01-09 14:33:54 +01:00
sdeleuze c326e44488 Refine forwarded protocol support
This commit refines forwarded protocol support in order to support
proxies that only set "X-Forwarded-Proto" header and not
"X-Forwarded-Port" by performing a reset of the port in such case.

"Forwarded" header support has been updated accordingly since it
also supports similar use case, as described in SPR-15504.

Issue: SPR-16262
2018-01-09 14:33:54 +01:00
Rossen Stoyanchev 30c0616384 Improve error message
Issue: SPR-16214
2018-01-08 21:30:41 -05:00
Rossen Stoyanchev 74b5c371ba Merge pull request #1634 from lin/patch-1 2018-01-08 17:36:24 -05:00
Rossen Stoyanchev 846636f2b9 Polish 2018-01-08 17:35:30 -05:00
Aleksey Voronenkov cb8ad46564 Overloaded methods in InterceptorRegistration
Issue: SPR-16324
2018-01-08 17:31:06 -05:00
Juergen Hoeller 45828cb934 Check BeanInfoFactory for interface introspection as well
Issue: SPR-16322
2018-01-08 18:05:02 +01:00
Rossen Stoyanchev 446e7ed25c Links from @RequestMapping to reference docs
Issue: SPR-16266
2018-01-08 09:29:52 -05:00
Juergen Hoeller 73cad470e5 Upgrade to HtmlUnit 2.29 and Selenium 3.8.1 2018-01-08 13:41:36 +01:00
Juergen Hoeller 4adc820714 Warning instead of error for non-present type filter class
Issue: SPR-16356
2018-01-08 13:41:23 +01:00
Stephane Nicoll 0d151b0212 Fix SpEL syntax
Issue: SPR-16315
2018-01-08 08:46:20 +01:00
Juergen Hoeller 72590dbb21 CachingConnectionFactory does not cache producer for temporary queue/topic
Issue: SPR-16353
2018-01-08 00:26:29 +01:00
Juergen Hoeller 7a55d932f9 Build against OpenPDF 1.0.5 instead of outdated iText 2.1.7
Issue: SPR-16352
2018-01-08 00:26:10 +01:00
Skelotron b9e03cb06b SPR-16316 — fix transaction timeout value overflow 2018-01-07 23:48:24 +01:00
Juergen Hoeller 4a57e26d76 Polishing 2018-01-07 23:33:35 +01:00
Juergen Hoeller b6191f6057 Direct reference to JPA 2.1 SynchronizationType enum
Issue: SPR-13481
2018-01-07 23:30:05 +01:00
Juergen Hoeller d187cbce73 LoadTimeWeaver detection differentiates between WebSphere and Liberty
Issue SPR-16248
2018-01-07 23:29:16 +01:00
Juergen Hoeller 6a1fe0b1d0 FunctionReference's method field is volatile
Issue: SPR-16255
2018-01-07 23:23:45 +01:00
Juergen Hoeller 0a06bce3a6 Relaxed BeanFactory assertion in resolveInterceptorNames
Issue: SPR-16347
2018-01-07 23:23:25 +01:00
Juergen Hoeller 977550f956 Properly handle null bean instance in getLifecycleBeans
Issue: SPR-16343
2018-01-07 23:23:08 +01:00
Juergen Hoeller 18d90ec140 Properly handle null FactoryBean instance
Issue: SPR-16250
2018-01-07 23:22:56 +01:00
Juergen Hoeller d3e0f4dd91 Consider enum subclasses as simple value types as well
Issue: SPR-16278
2018-01-07 23:20:09 +01:00
Juergen Hoeller 9beb97880f Support for static field access on non-public enums
Issue: SPR-16284
2018-01-07 23:19:47 +01:00
Juergen Hoeller 7ad69bfc20 Avoid extra existence check in SimpleMetadataReaderFactory
Issue: SPR-16281
2018-01-07 23:18:52 +01:00
Juergen Hoeller 1a154c3e4c Consistently throw FileNotFoundException even for NIO access
Issue: SPR-16334
2018-01-07 23:18:28 +01:00
Rossen Stoyanchev 37f0e8c6e5 Access to ApplicationContext via ServerWebExchange
Issue: SPR-16298
2018-01-05 15:46:45 -05:00
Rossen Stoyanchev 93a522f336 Fix regression in BodyInserters with multipart data
The issue was introduced very recently with commit #7035ee but never
released.

Issue: SPR-16350
2018-01-05 13:59:14 -05:00
Rossen Stoyanchev 542de82c5f Document Jackson encoder/decoder behavior
Issue: SPR-16260
2018-01-04 22:02:27 -05:00
Rossen Stoyanchev 7bf9b767fd Improve HTTP message reading/writing docs
Cross-reference sections on HttpMessageReader/Writer and
HttpMessageConverter and improve the content.

Issue: SPR-16260
2018-01-04 21:15:04 -05:00
Rossen Stoyanchev 0f1f95e090 Add hasJsonPath/doesNotHaveJsonPath assertion options
Issue: SPR-16339
2018-01-03 20:27:09 -05:00
Juergen Hoeller a49123a72b Upgrade to RxJava 2.1.8 (and Protobuf 3.5.1) 2017-12-31 18:51:22 +01:00
Juergen Hoeller dd4f915234 Upgrade to JCache 1.1 (and Caffeine 2.6.1)
Issue: SPR-13574
2017-12-28 14:08:21 +01:00
sdeleuze d2616b7996 Fix RestOperations extensions parameters nullability
Issue: SPR-16328
2017-12-27 17:54:38 +01:00
sdeleuze deac8e556e Improve Kotlin extensions doc about type erasure
Since type erasure can be fixed only when using
ParameterizedTypeReference based Java methods, RestOperations and
WebFlux API documentation should be updated to specify which extensions
are subject to type erasure, and which are not.

Issue: SPR-16273
2017-12-27 17:49:18 +01:00
Stephane Nicoll 8fc16fc937 Merge pull request #1627 from nkjackzhang:patch-1
* pr/1627:
  Polish Javadoc
2017-12-23 14:20:28 +01:00
nkjackzhang ec6eed6c63 Polish Javadoc
Closes gh-1627
2017-12-23 14:19:56 +01:00
Rossen Stoyanchev 3aee3182ac Restore milestone repo for AspectJ 2017-12-22 15:13:48 -05:00
Rossen Stoyanchev f389f66270 Upgrade to Reactor Bismuth snapshots
This allows us to confirm 0.7.3 fixes and run tests against the latest
ahead of an upgrade to Reactor Netty 0.8 snapshots.

The fix for #231 and #240 are confirmed but unfortunately test case for
2017-12-22 12:50:18 -05:00
Arjen Poutsma 6c3a64578c Move ResolvableType from HttpEntity to PublisherEntity
This commit moves the ResolvableType field from HttpEntity to
PublisherEntity, a new entity type defined in MultipartBodyBuilder.
With this change, the scope of the ResolvableType is limited to
multipart-related code, instead of becoming part of the complete
HttpEntity hierarchy.

Issue: SPR-16307
2017-12-22 13:44:01 +01:00
Brian Clozel 6e587d5c57 Add new WebTestClient header assertions
This commit adds new header assertions for `WebTestClient`.

`doesNotExist` tests that a given header is not present:

    .expectHeader().doesNotExist("Cache-Control");

`contentTypeCompatibleWith` tests for MediaType compatibility:

    .expectHeader().contentTypeCompatibleWith("text/*");

Issue: SPR-16285
2017-12-21 20:34:24 +01:00
Arjen Poutsma 7035ee7ebb Support Publishers for multipart data in BodyInserters
This commit uses the changes in the previous commit to support
Publishers as parts for multipart data.

Issue: SPR-16307
2017-12-21 17:41:01 +01:00
Arjen Poutsma f23612c3a3 Add ResolvableType to HttpEntity for multipart Publishers
This commit adds a ResolvableType field to HttpEntity, in order to
support Publishers as multipart data. Without the type, the
MultipartHttpMessageWriter does not know which delegate writer to use to
write the part.

Issue: SPR-16307
2017-12-21 17:40:27 +01:00
Juergen Hoeller 9d27e86951 Upgrade to Hibernate Validator 6.0.7 2017-12-21 17:00:06 +01:00
Juergen Hoeller 4577a19190 Upgrade to Commons Pool 2.5 (and Jackson Kotlin Module 2.9.3) 2017-12-21 13:52:00 +01:00
sdeleuze 0075f13126 Improve CORS list properties combination logic
This commit allows CorsConfiguration#combine()
to differentiate permit default values set by
CorsConfiguration#applyPermitDefaultValues()
from values configured explicitly by the user.

Those permit default values will be overridden
by any user-provided ones while user-provided values
will be combined in an additive way, including
when "*" is specified.

Documentation has been improved accordingly.

Issue: SPR-15772
2017-12-20 22:38:01 +01:00
Juergen Hoeller 425a999d5e Upgrade to Gradle 4.4.1 (and Netty 4.1.19)
Issue: SPR-16237
2017-12-20 18:10:15 +01:00
Rossen Stoyanchev a8cf275aed MockServerHttpRequest builder supports query params
Issue: SPR-16280
2017-12-19 15:38:12 -05:00
Rossen Stoyanchev 6df1a7874a MockHttpServletResponse uses correct language header
Issue: SPR-16311
2017-12-19 13:56:16 -05:00
sdeleuze 99cbfd32c3 Set default view content-type with WebFlux fn
With this commit, the default content-type defined by the
view (usually "text/html;charset=UTF-8" defined in AbstractView)
is used if any, when none is defined in the response headers.

Issue: SPR-16247
2017-12-19 11:11:40 +01:00
sdeleuze e3e4f37222 Upgrade to Kotlin 1.2.10 2017-12-19 11:03:50 +01:00
Juergen Hoeller 3a51b5a9d2 Upgrade to Hibernate Validator 6.0.6 2017-12-15 15:58:12 +01:00
Arjen Poutsma b8201f48fd Typo in example code in spring reactive reference document
Issue: SPR-16300
2017-12-15 12:03:14 +01:00
Rossen Stoyanchev f4d8c7cc2b Improve decodeToMono support
This commit ensures uniform support for decodeToMono across the various
byte and String related decoders.

Issue: SPR-16253
2017-12-14 16:59:34 -05:00
Arjen Poutsma 8e253a316d Support top-level scalar values in Jackson2Tokenizer
Issue: SPR-16166
2017-12-14 16:44:40 +01:00
sdeleuze 51aa16f85f Remove -Xskip-runtime-version-check Kotlin compiler arg
This compiler argument is not needed anymore since KT-16780
has been fixed.
2017-12-14 15:08:00 +01:00
sdeleuze 8c2e5dcb4a Update Kotlin reference documentation
This commit removes the mention that Spring Boot 2.0 includes
Jackson Kotlin module since it is not the case as of M7, and
add a note about using bean validation annotations with Kotlin.
2017-12-14 14:22:59 +01:00
Juergen Hoeller 05988193b7 Upgrade to Jackson 2.9.3 and Netty 4.1.18 2017-12-13 17:55:50 +01:00
sdeleuze 6a7b197af7 Improve Jackson codecs documentation 2017-12-13 12:07:43 +01:00
sdeleuze 73a81f98d4 Allow interceptors to add existing header values
Additional commit to provide support of requests
that have a body.

Issue: SPR-15066
2017-12-13 10:08:24 +01:00
Rossen Stoyanchev 583201b02c MappingJackson2MessageConverter uses generic type
Issue: SPR-16252
2017-12-12 22:32:33 -05:00
Rossen Stoyanchev f05175586e Refine behavior on error after response committed
If the response is set and we can't change the status through
ServerHttpResponse any more, allow the error signal to propagate and
let the individual server adapters handle it. Ultimately that should
result in closing the connection.

On Servlet containers, we check one last time if the response is
committed (we may not have filled the buffer). If not then save
the exception as a request attribute, dispatch, and re-throw it on the
container thread.

On Undertow access the connection and close it.

On Netty just let the error through to Reactor Netty.

Issue: SPR-16051
2017-12-12 14:51:24 -05:00
Juergen Hoeller 9d421841d5 Merge pull request #1622 from dreis2211/SPR-16293
Improve performance of some string operations

Issue: SPR-16293
2017-12-12 18:36:07 +01:00
Christoph Dreis 260ebeca3a Improve performance of some string operations
Issue: SPR-16293
2017-12-12 17:14:24 +01:00
Rossen Stoyanchev f736b665bd Fix compile issue from previous commit 2017-12-11 16:37:11 -05:00
Rémi Alvergnat 76dcde9e31 Fix Stomp Broker Relay ignoring destination prefixes in some cases
Issue: SPR-16265
2017-12-11 13:25:29 -08:00
sdeleuze 554662ebab Allow interceptors to add existing header values
Provide a fully mutable HttpHeaders to ClientHttpRequestInterceptors
of a RestTemplate when headers are set using HttpEntity. This avoids
UnsupportedOperationException if both HttpEntity and
ClientHttpRequestInterceptor add values for the same HTTP header.

Issue: SPR-15066
2017-12-11 15:01:20 +01:00
sdeleuze ac00d8a215 Use JCenter first to resolve plugins
This is a workaround for Kotlin/dokka#146.
2017-12-11 12:07:17 +01:00
sdeleuze 769ea1b106 Fix Kdoc regression to show only Kotlin API
As of Gradle Kotlin plugin 1.1.60,
project.sourceSets.main.kotlin.srcDirs contains
Java source directories in addition to Kotlin
ones. This commit filter out Java sources to
retain only Kotlin ones.

Issue: SPR-16268
2017-12-11 11:28:39 +01:00
Stephane Nicoll 206a5e02dd Merge pull request #1615 from gro-gg:patch-1
* pr/1615:
  Fix exception message
2017-12-09 15:46:55 -08:00
Philipp Grogg 591429e538 Fix exception message
initialDelayString is parsed into long, not integer.

Closes gh-1615
2017-12-09 15:46:28 -08:00
Juergen Hoeller d198626618 Upgrade to Gradle 4.4 (and Apache HttpClient 4.5.4)
Issue: SPR-16237
2017-12-07 07:28:07 +01:00
Sam Brannen 767ea9db83 Fix minor logic error in SocketUtils 2017-12-06 17:00:29 -08:00
Tony Mitchell 9f36d170be Support identical minPort and maxPort in SocketUtils (#1612)
This commit fixes a bug where an IllegalStateException was
thrown if the minPort and maxPort values supplied to
SocketUtils.findAvailableTcpPort(int, int) were identical.
2017-12-06 16:38:46 -08:00
Sam Brannen f9689dfe48 Polishing 2017-12-06 15:54:02 -08:00
Juergen Hoeller bf8831157d Merge pull request #1614 from dreis2211/SPR-16264
Reduce access on user in SimpleBrokerMessageHandler.handleMessageInternal
2017-12-06 00:40:38 +01:00
Christoph Dreis f4e9fb52a8 Reduce access on user in SimpleBrokerMessageHandler.handleMessageInternal
Issue: SPR-16264
2017-12-05 11:18:02 +01:00
ugultopu 04ab93ceb4 Add missing verb on the note about relays 2017-12-04 11:20:39 -05:00
Juergen Hoeller 0ef117ff11 Upgrade to Tomcat 8.5.24 and Jetty 9.4.8 2017-12-03 16:03:02 +01:00
Rossen Stoyanchev fda08852ba Take content-type from ResponseEntity unconditionally
From #9a894a we began using the content-type from the ResponseEntity
but cross-checking it still against the requested content type.

Arguably there isn't any purpose in cross-checking. The only possible
outcomes are: a) it's compatible or b) it's not, which would result in
406 (NOT_ACCEPTABLE). As we've been given explicitly the media type to
use, it makes little sense to send 406, ignoring the wish to use that
content type.

Issue: SPR-16251
2017-12-02 00:43:43 -05:00
Rossen Stoyanchev 203370a810 Handle absolute URI in Reactor request.uri()
The request URI returned from HttpServerRequest.uri() typically
contains contains an absolute path but could also contain an
absolute URI. This commit adds handling for the latter, effectively
taking only the absolute path portion.

Issue: SPR-16243
2017-12-01 23:34:35 -05:00
Rossen Stoyanchev b9a1168580 Consistently return null if certificates not available
Issue: SPR-16244
2017-12-01 21:38:40 -05:00
Rossen Stoyanchev e99b0038a0 Polish 2017-12-01 21:18:13 -05:00
Rossen Stoyanchev 91d3e4402f Add test case for SPR-16246 2017-12-01 15:40:35 -05:00
Rossen Stoyanchev 44c95a4736 Adjust logging to catch sporadic PERF build failure 2017-12-01 10:11:51 -05:00
sdeleuze 7368f58518 Upgrade to Kotlin 1.2
apiVersion and languageVersion options are set to 1.1
on production code in order to avoid incompatibilities
with Kotlin 1.1 based projects or libraries.

Issue: SPR-16239
2017-11-30 14:50:16 +01:00
Rossen Stoyanchev 63c2c08e01 Update advice on file extensions in URLs
Issue: SPR-16240
2017-11-29 15:09:13 -05:00
Rossen Stoyanchev dd0d270ba2 Improve error handling when response is committed
ResponseStatusExceptionHandler lets the error through if it can't
change the status while HttpWebHandlerAdapter logs a more helpful
message (including status code) but without a full stack trace.

Issue: SPR-16231
2017-11-29 12:39:06 -05:00
Juergen Hoeller 873cb4e58b Remove unnecessary deprecation suppression 2017-11-29 15:44:08 +01:00
Juergen Hoeller b55a2631ba NamedParameterJdbcTemplate provides accessor for classic JdbcTemplate
Issue: SPR-16241
2017-11-29 15:38:21 +01:00
Rossen Stoyanchev 6f73b8b200 Add WebTestClient to Web Servlet section 2017-11-29 08:45:07 -05:00
Sam Brannen 2b68212c20 Fix grammar 2017-11-29 14:44:21 +01:00
Rossen Stoyanchev 3650ecc3bb Polish 2017-11-28 22:16:07 -05:00
Rossen Stoyanchev bec63fbb33 Update CORS chapters
- Add "Processing" section (also replaces Advanced Customizations)
- Add information on out-of-the-box behavior
- Add more deails on @CrossOririn default configuratio
- Add cross-references between Spring MVC and WebFlux
- Polish
2017-11-28 16:29:30 -05:00
Rossen Stoyanchev 375a63a041 Update README.md 2017-11-28 09:28:34 -05:00
Sam Brannen 773cd3241b Polishing 2017-11-28 14:11:21 +01:00
Juergen Hoeller f2e8171bfb Latest dependency updates (RxJava 2.1.7, TestNG 6.13.1, Selenium HtmlUnit Driver 2.28.2) 2017-11-28 12:10:26 +01:00
Rossen Stoyanchev dc3d834026 Refinements related to a committed response
1. setComplete checks the isCommitted flag to avoid an unnecessary
debug message. This method is meant to be safe to call many times.

2. setStatusCode lowers log message to TRACE, since the return value
communicates the outcome it's arguably much less critical.

3. Add comment and test case for ResponseStatusExceptionHandler.
A ResponseStatusException is clearly meant to be handled by this
handler so don't let it pass through even if the respones is
committed.

Issue: SPR-16231
2017-11-27 16:31:49 -05:00
Spring Buildmaster e30f1fbe89 Next Development Version 2017-11-27 10:52:28 +00:00
Juergen Hoeller b1c657fa4b Consistent nullability in DataAccessUtils through nullableSingleResult
Issue: SPR-16225
2017-11-26 17:16:39 +01:00
Juergen Hoeller a8323f6a27 Latest dependency updates (OkHttp 3.9.1, JRuby 9.1.14, Rome 1.9) 2017-11-26 16:03:48 +01:00
Juergen Hoeller 81052cd27a Upgrade to Kotlin 1.1.61
Issue: SPR-16194
2017-11-24 23:23:38 +01:00
Juergen Hoeller 35dd8db892 Correct number of web-specific scopes
Issue: SPR-16230
2017-11-24 14:13:23 +01:00
Juergen Hoeller edf22a3e25 Upgrade to Log4J 2.10 (and Groovy 2.4.13) 2017-11-24 12:04:08 +01:00
sdeleuze 3b96690e69 Add missing RestOperations extensions
Issue: SPR-16229
2017-11-23 22:12:03 +01:00
Rossen Stoyanchev 01a82b5291 Improve semantics writing currentData
Before this commit, the return value from write was interpreted as the
data being fully written and ready to be released via releaseData().

This is not true for WebSocketSession implementations where a true
return value simply means the message was sent with the full payload
but releas is not appropriate until a send confirmation.

Technically not an issue since WebSocketSession's extending this do
not use pooled buffers. Nevertheless this commit refines the semantics
of write, removes the releaseData() method, and makes sub-classes
responsible for releasing the buffer when fully written (and they
know best when that is). As a bonus currentData is now private.

Issue: SPR-16207
2017-11-23 10:55:03 -05:00
Rossen Stoyanchev 102a0ad792 Polish 2017-11-23 10:22:35 -05:00
Rossen Stoyanchev c1b191edb0 Polish and improve logging 2017-11-22 23:25:36 -05:00
Rossen Stoyanchev f44366877c Switch to suspended mode before demand
After this commit, Tomcat and Undertow WebSocketSession imlpementations
start out in suspended mode and wait for demand.

The JettyWebSocketSession is capable of suspending but it doesn't seem
to work if invoked before any messages are received. That may become an
issue if there is a case where no demand appears long enough for more
messages to accumulate than we can hold.

UnderowServerHttpRequest would ideally also start in suspended mode but
that also doesn't work. It is not an issue in this case since we can
ignore the read notifications.

Servlet API requires a proactive check before it calls you back so
there is no need to suspend.

Issue: SPR-16207
2017-11-22 17:55:20 -05:00
Rossen Stoyanchev afdca285e5 Avoid resume-suspend race condition
This commit turns suspendReading() into a readingPaused() notification
that is invoked after a succession of reads stops because there is no
more demand. Sub-classes can use this notification to suspend, if that
applies to them.

Most importantly the notification is guaranteed not to overlap with
checkOnDataAvailable() which means that suspend does not need to be
atomic and guarded against resume. The two can and do compete all the
time when reading ends with no demand, and a request for demand arrives
concurrently.

Issue: SPR-16207
2017-11-22 17:48:03 -05:00
sdeleuze 4a87d3da7b Set Vary: Origin on CORS unauthorized response
Issue: SPR-16224
2017-11-22 22:46:53 +01:00
sdeleuze 652e5c5584 Disable CORS credentials by default
Access-Control-Allow-Credentials CORS header, used to
allow cookies with CORS requests, is not set to true
anymore by default when enabling CORS with
@CrossOrigin or global CORS configuration in order to
provide a more secured default CORS configuration.

The related allowCredentials property now requires to
be set to true explicitly in order to support cookies
with CORS requests.

Issue: SPR-16130
2017-11-22 22:46:44 +01:00
Juergen Hoeller 93f17dae47 Log4jLog explicitly passes String argument (avoiding argument expansion)
Issue: SPR-16226
2017-11-22 21:13:39 +01:00
Rossen Stoyanchev b7c924cac1 Polish 2017-11-21 23:20:13 -05:00
Violeta Georgieva d8099adc9a AbstractListenerWebSocketSession: suspend the channel when there is no demand
Issues: SPR-16207
2017-11-21 22:59:33 -05:00
Rossen Stoyanchev 06b2ab3908 Use volatile for subscriber in base publishers
Issue: SPR-16207
2017-11-21 22:57:15 -05:00
Rossen Stoyanchev b89a48a703 Improve FlushingIntegrationTests 2017-11-21 22:12:33 -05:00
Rossen Stoyanchev 3c2d1862f1 Light refactoring/polish in reactive read/write bridge
Issue: SPR-16207
2017-11-21 21:46:30 -05:00
Violeta Georgieva 2a481c5411 Fix race conditions in AbstractListenerReadPublisher
Transition from DEMAND->NO_DEMAND:
Two concurrent threads enter DEMAND.request and DEMAND.onDataAvailable.
And DEMAND.onDataAvailable finishes before DEMAND.request to be able to
update the demand field then a request for reading will be lost.

Transition from READING->NO_DEMAND:
readAndPublish() returns false because there is no demand but before
switching the states READING.request is invoked again a request for
reading will be lost.

Changing READING->DEMAND/NO_DEMAND is made conditional so that the
operations will be executed only if changing states succeeds.

When in READING state detect completion before each next item in order
to exit sooner, if completed.

Issue: SPR-16207
2017-11-21 14:44:46 -05:00
Violeta Georgieva b814875211 Fix race condition in transition from UNSUBSCRIBED->COMPLETED
- Ensure completion signal (normal/exception) will be delivered to
the subscriber when transition from UNSUBSCRIBED->COMPLETED

- According to the specification "Publisher.subscribe MUST call onSubscribe
on the provided Subscriber prior to any other signals to that Subscriber" so
ensure onComplete/onError signals will be called AFTER onSubscribe signal.

Issue: SPR-16207
2017-11-21 14:44:01 -05:00
Violeta Georgieva 41b13a4e8a Ensure onComplete/onError events will be delivered
Issue: SPR-16207
2017-11-21 14:42:05 -05:00
Juergen Hoeller 604017894e Upgrade to Tiles 3.0.8 (and Selenium HtmlUnit Driver 2.28.1) 2017-11-21 17:56:42 +01:00
Juergen Hoeller 0cc644f61f Polishing 2017-11-21 16:34:08 +01:00
sdeleuze 9f1d8517ba Polish Kotlin source code style 2017-11-21 15:59:23 +01:00
Juergen Hoeller 5843173567 Polishing 2017-11-21 13:42:57 +01:00
Juergen Hoeller 08c95fbcb3 Unit tests for configuration superclass inclusion
Issue: SPR-16217
2017-11-21 13:42:01 +01:00
Stephane Nicoll bdb04b1d28 Merge pull request #1601 from hongxingwz:master
* pr/1601:
  Fix copy/paste in Javadoc
2017-11-21 06:58:45 +01:00
jianglei 4b614dc1de Fix copy/paste in Javadoc
Closes gh-1601
2017-11-21 06:58:14 +01:00
Rossen Stoyanchev bc8e525e60 Add shared instance of ReactiveAdapterRegistry
Issue: SPR-16218
2017-11-20 17:02:22 -05:00
Juergen Hoeller 6f24c0de17 Consistent use of tabs for sample code in the reference documentation 2017-11-20 22:28:00 +01:00
Juergen Hoeller 08c78554b9 Deprecate Castor support
Issue: SPR-16219
2017-11-20 22:27:47 +01:00
Juergen Hoeller 40dacd3c1c Polishing 2017-11-20 22:27:07 +01:00
Juergen Hoeller 73b9aaa7ff Upgrade to RxJava 1.3.4 2017-11-20 22:26:39 +01:00
Juergen Hoeller 27bbb73583 Expose all HttpResource header values (even if commonly not multi-value)
Issue: SPR-14264
2017-11-20 15:31:34 +01:00
Juergen Hoeller 84699c8b9b Document common use cases for @Order vs @Priority vs @DependsOn
Issue: SPR-16213
2017-11-20 12:53:37 +01:00
Juergen Hoeller 040aae5309 Upgrade to Protobuf 3.5 and Apache Johnzon 1.1.5 2017-11-20 12:49:25 +01:00
Juergen Hoeller daee6eeaad ParameterMetaData.getParameterType performance on Oracle 12c
Issue: SPR-16139
2017-11-19 21:17:32 +01:00
Juergen Hoeller a8b48848b9 SqlParameterSourceUtils.createBatch with Collection support
Issue: SPR-16215
2017-11-19 21:17:24 +01:00
Juergen Hoeller 20fcefc647 ResourceHttpRequestHandler uses EmbeddedValueResolverAware 2017-11-19 21:16:29 +01:00
Juergen Hoeller 14a7da8183 Upgrade to Hibernate Validator 6.0.5 2017-11-19 21:16:10 +01:00
Andy Clement 508aea8a47 Rework implementation of PathPattern.extractPathWithinPattern
This commit changes the implementation of the PathPattern
extractPathWithinPattern method that used an old AntPathMatcher
derivative to a new version that integrates more closely with
PathContainer.

It also introduces consistency in a couple of areas. The javadoc
is updated to specify this but basically:
- the response from the extra method will have all leading
  and trailing separators removed.
- the response will have multiple adjacent separators within the
  reponse reduced to just one.  (For example response would be
  aaa/bb/cc and not aaa///bbb//cc)
If your response would start or finish with multiple separators, they
are all removed.

Issue: SPR-16120
2017-11-17 12:03:17 -08:00
Rossen Stoyanchev b1b5353b7f Revise charset by location support for static resources 2017-11-17 12:33:58 -05:00
Rossen Stoyanchev ce895d7a84 Add mention of shortcut methods in BodyInserters 2017-11-17 10:43:53 -05:00
Violeta Georgieva 0fbfa64385 UndertowServerHttpRequest: suspend reading when no demand
- When there is no demand for reading, the implementation
should suspend reading otherwise useless events will be
send by Undertow to the registered read listener.
- There is not need to wait for an event for reading/writing after calling
resumeReads/resumeWrites
2017-11-16 16:15:55 +01:00
sdeleuze 3e8e0c1d6a Upgrade to Reactor Bismuth-SR4
Issue: SPR-16206
2017-11-16 15:36:42 +01:00
sdeleuze c530745015 Fix JsonView + HttpEntity Reactive handling
This commit adds
AbstractMessageReaderArgumentResolver#readBody and
AbstractMessageWriterResultHandler#writeBody variants
which allow to pass the actual MethodParameter in order
to perform proper annotation-based hint resolution with
nested generics, for example with HttpEntity.

Issue: SPR-16098
2017-11-16 15:12:58 +01:00
Arjen Poutsma e4d405271a Document DataBuffer/PooledDataBuffer and codecs
Issue: SPR-16156
2017-11-16 11:36:26 +01:00
Juergen Hoeller cc7c90cca5 Polishing 2017-11-16 10:52:56 +01:00
Juergen Hoeller 7af9910244 Restored support for placeholders in mvc namespace resource locations
With the recent charset mechanism in place, we cannot rely on implicit placeholder parsing during String-to-Resource conversion anymore.
2017-11-16 09:36:23 +01:00
Rossen Stoyanchev 8e21023f28 Update docs on ClientResponse
Issue: SPR-16200
2017-11-15 17:08:57 -08:00
Rossen Stoyanchev 19a9bc4747 Remove unnecessary assertion
Issue: SPR-16201
2017-11-15 16:04:32 -08:00
Rossen Stoyanchev 6e05a5881e Update WebClient Javadoc
Issue: SPR-16197
2017-11-15 15:09:01 -08:00
Juergen Hoeller 7bcbdbbc62 Upgrade to AspectJ 1.8.13 (and 1.9 RC2)
Issue: SPR-16161
2017-11-15 23:55:55 +01:00
sdeleuze 9dd29f76ae Polish CORS documentation 2017-11-15 16:16:13 +01:00
sdeleuze 38040bf3f2 Add WebFlux CORS reference documentation
Issue: SPR-16199
2017-11-15 16:16:01 +01:00
Juergen Hoeller 7697b398d5 Polishing 2017-11-14 17:11:16 +01:00
Juergen Hoeller 85baba33bf Accessors for PeriodicTrigger properties
Issue: SPR-15982
2017-11-14 17:09:19 +01:00
Rossen Stoyanchev fb7b7d089b Revert erroneously committed change 2017-11-14 08:42:04 -05:00
sdeleuze 90e5945014 Upgrade to Kotlin 1.1.60
Issue: SPR-16194
2017-11-14 10:09:00 +01:00
sdeleuze edf8232555 Avoid implicit autowiring with Kotlin secondary ctors
Autowiring implicitely Kotlin primary constructors
when there are secondary constructors has side effects
on ConstructorResolver. It seems reasonable to
require explicit @Autowired annotation in such case.

With this commit, implicit autowiring of Kotlin
primary constructors is only performed when there
is a primary constructor defined alone or with
a default constructor (define explicitly or
generated via the kotlin-noarg compiler plugin
or via optional constructor parameters with default
values).

Issue: SPR-16022
2017-11-14 09:25:46 +01:00
Rossen Stoyanchev 536e72c8df Add WebSocket chapter to WebFlux section
Issue: SPR-15700
2017-11-13 23:20:01 -05:00
Rossen Stoyanchev 0dd31b834e Refactor WebSocket intro and create separate doc
Issue: SPR-15700
2017-11-13 23:20:01 -05:00
Rossen Stoyanchev 5e86049438 Expose WebSocket options for Tomcat/Jetty 2017-11-13 23:20:01 -05:00
Rossen Stoyanchev e818b904ad Polish WebSocket-related 2017-11-13 23:20:01 -05:00
Juergen Hoeller c30145d6f9 MethodReference treats proxy-targeting expressions as non-compilable
Issue: SPR-16191
2017-11-13 23:00:53 +01:00
Juergen Hoeller 7406f5993a Polishing 2017-11-13 22:39:39 +01:00
Juergen Hoeller 3e5209bea5 Test dependency updates (Mockito 2.12, HtmlUnit 2.28, Selenium 3.7.1, XMLUnit 2.5.1) 2017-11-13 21:51:23 +01:00
Juergen Hoeller b5cedd43eb Consistent and efficient access to BeanDefinition argument values
Issue: SPR-16192
2017-11-13 21:51:11 +01:00
Juergen Hoeller e2bb06edbd Unit tests for unresolvable generics with partial mismatch
Issue: SPR-16179
2017-11-13 21:51:02 +01:00
Juergen Hoeller 3091feee23 SpringValidatorAdapter skips value retrieval for Set field without index
Issue: SPR-16177
2017-11-13 21:50:55 +01:00
diesieben07 0e49e32188 Handle parameters of Kotlin extension methods correctly
The EXTENSION_RECEIVER parameter of Kotlin's extension
methods appear as normal method parameters to Java and
thus require a name. The synthetic name "$receiver" is
used here, as it is not a valid Kotlin identifier,
but valid in Java.

Issue: SPR-16119
2017-11-13 15:42:32 +01:00
Sam Brannen 2be2aa7b96 Add missing word to JavaDoc 2017-11-13 00:46:20 +01:00
Sam Brannen 532eb1d776 Upgrade to JUnit Jupiter 5.0.2 2017-11-12 23:43:02 +01:00
Juergen Hoeller e2018e6b72 HibernateJpaVendorAdapter sets connection release mode ON_CLOSE in non-PersistenceUnitInfo bootstrap scenario
Issue: SPR-16162
2017-11-11 18:43:43 +01:00
Juergen Hoeller 72f20e8d4f Polishing 2017-11-11 00:37:50 +01:00
Rossen Stoyanchev 87375fe6f8 ServerHttpRequest exposes SSL certificates
Issue: SPR-15964
2017-11-10 16:43:12 -05:00
Rossen Stoyanchev 9a894ab61e Use ResponseEntity Content-Type as producible media type
Issue: SPR-16172
2017-11-10 15:05:03 -05:00
Juergen Hoeller 780993ce75 Polishing 2017-11-10 20:21:26 +01:00
Juergen Hoeller a80fd9994a HibernateJpaVendorAdapter preserves connection release mode for JTA
Issue: SPR-16162
2017-11-10 20:21:03 +01:00
Juergen Hoeller de782026c4 Explicitly document UriTemplate as thread-safe
Issue: SPR-16173
2017-11-10 20:20:23 +01:00
Juergen Hoeller a5da05c3dc Comprehensive documentation on injection point matching
Issue: SPR-16142
2017-11-10 20:20:13 +01:00
Juergen Hoeller 423af674cd Upgrade to Gradle 4.3.1 (and Netty 4.1.17)
Issue: SPR-16080
2017-11-10 20:20:02 +01:00
Rossen Stoyanchev f565f635e3 Polish 2017-11-10 11:29:58 -05:00
Rossen Stoyanchev ff97eafa4f Fix NPE in ErrorsArgumentResolver
Issue: SPR-16187
2017-11-10 10:57:26 -05:00
Rossen Stoyanchev a5103307c6 Polish ErrorArgumentResolver 2017-11-10 10:15:46 -05:00
Arjen Poutsma 8223809455 Use existing CompositeByteBuf if possible
This commit uses the existing CompositeByteBuf if present, as opposed
to creating a new composite for every call to
NettyDataBuffer.write(ByteBuf...)

Issue: SPR-16180
2017-11-10 15:09:14 +01:00
Rossen Stoyanchev 8cfa3c632b Allow Undertow client in websocket integration tests
It seems to work.
2017-11-09 17:49:11 -05:00
Rossen Stoyanchev 988c5f2b56 Merge pull request #1590 from yneth/master 2017-11-09 17:17:04 -05:00
Rossen Stoyanchev cb34b0b963 Polish 2017-11-09 17:16:31 -05:00
anton_bondarenko b487db294b Fix NullPointer when setting cookies in RequestUriSpec 2017-11-09 16:59:44 -05:00
Rossen Stoyanchev 807297f173 Remove RxNetty (from test sources)
Practically no changes to RxNetty for a year and efforts underway to
rebuild 0.6.x based on a current Reactor Netty base.

Aside from the extra time to run integration tests having two
Netty-based servers can also cause false alarms such as ByteBuf leaks
related to RxNetty.
2017-11-09 15:56:56 -05:00
Rossen Stoyanchev 369d33c3d0 Support charset config by (static) resource location
This commit adds support for configuring static resource locations
with a charset to be applied to relative paths.
2017-11-09 13:15:06 -05:00
Arjen Poutsma db00669197 Allow to set cookies in ServerResponse
Issue: SPR-16121
2017-11-09 11:04:02 +01:00
Rossen Stoyanchev 840ef46a9f Polish
Also remove ErrorDeferredResultProcessingInterceptor which was meant
to be package private to begin with as its peer
ErrorCallableProcessingInterceptor (also removed).
2017-11-08 23:15:31 -05:00
Juergen Hoeller 457c70cf33 Merge pull request #1588 from benbenw/SPR-16170
Improve memory allocations when substituting named parameters

Issue: SPR-16170
2017-11-08 23:54:38 +01:00
benoit 667e0341fa Improve memory allocations when substituting named parameters.
Create the buffer with at least the original sql length to avoid
multiple re-allocations
Add a fast path if the original sql doesn't contain any parameters
2017-11-08 23:45:53 +01:00
Rossen Stoyanchev 263da1535b WebTestClient can be configured with connector
Issue: SPR-16168
2017-11-07 13:01:12 -05:00
sdeleuze 1a246c0a67 Fix ListableBeanFactory Kotlin extensions return types 2017-11-07 13:51:53 +01:00
Rossen Stoyanchev 9786750b5a Improve @RequestAttribute WebFlux resolver
The resolver now takes into account the possibility the attribute
itself may be a reactive type.

Issue: SPR-16158
2017-11-06 21:44:45 -05:00
Rossen Stoyanchev 14f02d7192 Update reference with examples of multipart requests
Issue: SPR-16118
2017-11-06 16:33:58 -05:00
Juergen Hoeller 4ec60f08ad PrintingResultHandler defensively accesses session.getAttributeNames()
Issue: SPR-16164
2017-11-06 21:19:44 +01:00
Juergen Hoeller 899994e7c1 Merge pull request #1587 from dreis2211/SPR-16165
Reduce access on headers for STOMP messaging

Issue: SPR-16165
2017-11-06 20:41:10 +01:00
Christoph Dreis 9fab208fdd Reduce access on headers for STOMP messaging
Issue: SPR-16165
2017-11-06 20:19:00 +01:00
Juergen Hoeller ffd6eff369 Scheduled task introspection through ScheduledTaskHolder interface
Issue: SPR-15982
2017-11-06 18:36:39 +01:00
Juergen Hoeller 9511d29adb Updated bean count expectations in ClassPathBeanDefinitionScannerTests
Issue: SPR-16152
2017-11-06 18:36:29 +01:00
Arjen Poutsma af2e296ff3 Javadoc 2017-11-06 16:00:18 +01:00
Stephane Nicoll 1838ddb95d Support Ant-style package name with component index
This commit improves the component index so that it supports ant-style
package name (i.e. com.example.**.foo).

Issue: SPR-16152
2017-11-06 15:19:30 +01:00
Juergen Hoeller 9649b0cb25 Properly resolve null beans as getBeansOfType result entries
Issue: SPR-16163
2017-11-06 13:27:51 +01:00
Arjen Poutsma 2d1f87501c Add MultipartBodyBuilder
This commit introduces the MultipartBodyBuilder, a builder for multipart
form bodies.

Issue: SPR-16134
2017-11-06 10:42:11 +01:00
Juergen Hoeller 9b7af8b5aa Polishing 2017-11-05 21:07:26 +01:00
Juergen Hoeller 07b479e264 FileUrlResource creates same class from createRelative
Issue: SPR-16140
2017-11-05 21:01:29 +01:00
Juergen Hoeller a75dd2dd3e Consistent getDateHeader checks in spring-webmvc unit tests
Issue: SPR-16160
2017-11-05 17:00:18 +01:00
Juergen Hoeller e5c1deea63 Polishing 2017-11-05 16:23:30 +01:00
Juergen Hoeller 80a0cf71f4 MockHttpServletResponse.getDateHeader returns -1 for non-existent header
Includes consistent getDateHeader results in both MockHttpServletResponse variants (spring-test and spring-web)

Issue: SPR-16160
2017-11-05 16:12:21 +01:00
Juergen Hoeller 0edf4d6509 MockHttpServletRequest.getRequestURL aligns with getServerName/Port
Issue: SPR-16138
2017-11-05 16:11:21 +01:00
Juergen Hoeller db050ac38c Polishing 2017-11-04 01:07:09 +01:00
Juergen Hoeller 996d747aed Upgrade to Mockito 2.11
Includes fixes for invalid exception declarations in Mockito-based unit tests. Also includes FreeMarker 2.3.27, Commons Pool 2.4.3, JSON-P 1.1.2.

Issue: SPR-16157
2017-11-04 01:06:59 +01:00
Juergen Hoeller a37fce854f Merge pull request #1586 from jmax01/master
Correctly handle NVARCHAR, LONGNVARCHAR and NCLOBs

Issue: SPR-16154
2017-11-03 23:48:44 +01:00
jmaxwell e4c5b77de7 SPR-16154 - Correctly handle NVARCHAR, LONGNVARCHAR and NCLOBs 2017-11-03 14:49:32 -05:00
Rossen Stoyanchev 845110aa66 Update docs on HTTP/2 2017-11-03 10:35:42 -04:00
Stephane Nicoll fb76aa0150 Detected candidate inner classes
This commit improves the indexer to also consider static inner classes
on top of regular top level classes.

Issue: SPR-16112
2017-11-03 13:25:23 +01:00
Rossen Stoyanchev ef39092b3b UriUtils#encodUriVariables methods are now public 2017-11-03 08:21:55 -04:00
Jay Bryant 7964360f79 Fix a broken link 2017-11-02 21:21:24 -04:00
Rossen Stoyanchev 4534c5fbfc AbstractReactiveWebInitializer supports Servlet mapping
Issue: SPR-16155, SPR-16144
2017-11-02 21:03:09 -04:00
Rossen Stoyanchev 8c33ed02b3 ServletHttpHandlerAdapter supports Serlvet path mapping
Issue: SPR-16155
2017-11-02 20:53:26 -04:00
Rossen Stoyanchev aa653b23bc Add AbstractReactiveWebInitializer
This commit introduces a new AbstractReactiveWebInitializer in
spring-web that relies on WebHttpHandlerBuilder to detect request
processing infrastructure beans from an ApplicationContext.

This eliminates the need to create a DispatcherHandler, since it is
expected to be a Spring bean, and as a result the initializers in
spring-webflux have been deprecated.

Issue: SPR-16144
2017-11-02 14:57:06 -04:00
Juergen Hoeller 1611ce7180 AbstractApplicationContext silently ignores non-initialized ApplicationEventMulticaster/LifecycleProcessor on destruction
Issue: SPR-16149
2017-11-02 16:07:12 +01:00
Juergen Hoeller d00e4f17ec ClassPathResource uses specific constructors in createRelative
Issue: SPR-16146
2017-11-02 16:05:57 +01:00
Juergen Hoeller b921d564d2 DefaultResourceLoader resolves writable FileUrlResource for "file:" URL
Issue: SPR-16140
2017-11-02 16:05:40 +01:00
Juergen Hoeller da9f138a65 Upgrade to Caffeine 2.6 and Undertow 1.4.21 2017-11-02 16:05:27 +01:00
Norman Soetbeer 4dee333a75 Allow empty usernames for BasicAuth
The RFCs around basic authentication don't explicitly disallow empty
usernames. On the other hand usernames containing colons are, as colons
are used to separate the username from the password.
2017-11-02 09:59:14 -05:00
Rossen Stoyanchev abe4420006 Improve ReactorNettyTcpClient shutdown logic
This commit takes care of the TODOs in ReactorNettyTcpClient by taking
advantage of improvements in Reactor Netty.

Issue: SPR-16145
2017-11-01 16:34:32 -04:00
Rossen Stoyanchev b35b50bef1 Polish 2017-11-01 09:21:36 -04:00
Rossen Stoyanchev 64bc9b4311 Do match message type
SimpMessageTypeMessageCondition was lenient in matching the message
type, essentially matching on any non-null message type with an exact
match given a preference only in comparing mulitple matches.

This commit modifies matching logic to look for an exact match.

Issue: SPR-16109
2017-11-01 09:21:36 -04:00
Arjen Poutsma a58002a5de Chained API for form and multipart data in BodyInserters
Issue: SPR-16133
2017-11-01 13:17:52 +01:00
Rossen Stoyanchev 579328bd7a MockClientHttpRequest|Response support cookie headers
Issue: SPR-16124
2017-10-31 12:08:18 -04:00
Juergen Hoeller d06129debd InterceptingHttpAccessor uses internal ArrayList for sorting
Also caches InterceptingClientHttpRequestFactory (if applicable)

Issue: SPR-16137
2017-10-31 16:33:38 +01:00
Rossen Stoyanchev 48c2cc18b9 Update form + multipart data Javadoc on BodyInserters
Issue: SPR-16118
2017-10-31 09:21:09 -04:00
Rossen Stoyanchev 8083eaae54 syncBody better differentiates plain vs multipart forms
FromHttpMessageWriter and MultipartHttpMessageWriter both support
MultiValueMap except the former supports String values only. This
presents an issue since either full generic type information must be
provided, which is cumbersome on the client side, or if left out there
is no good way to order the writers to make a proper decision.

This commit:

- refines the canWrite behavior of   to not a
accept MultiValueMap without proper generic information unless the
MediaType is explicitly set providing a strong hint.

- modifies MultipartHttpMessageWriter to be configured with a
FormHttpMessageWriter so it can write both plan and multipart data with
the ability to properly differentiate based on actual map values.

Issue: SPR-16131
2017-10-31 09:12:05 -04:00
Juergen Hoeller e5c8dc0d65 MessageSource.getMessage returns null default message as-is (again)
Issue: SPR-16127
2017-10-31 11:06:42 +01:00
Juergen Hoeller 295e3b6a99 MockRestServiceServer test for follow-up request after failure
Issue: SPR-16132
2017-10-30 16:40:20 +01:00
Juergen Hoeller 3c07afc5be Merge pull request #1580 from epabst/SPR-16132
Move requests.add(request) into finally block.
2017-10-30 16:19:30 +01:00
Eric Pabst 43d88e4a25 Move requests.add(request) into finally block.
This avoids "IllegalStateException: Expectations already declared" when
a MockRestServiceServer is used after one request throws an exception.

Issues: SPR-16132
2017-10-30 08:53:13 -06:00
Arjen Poutsma 49787493a6 Proper Undertow PooledByteBuffer release
This commit changes the way Undertow's PooledByteBuffers are dealt with.
Previously, these buffers where closed as soon as all data was read. As
of this commit, the UndertowServerHttpRequest returns PooledDataBuffers
from getBody(), so that the buffers are released when release() is
called.
2017-10-30 10:39:18 +01:00
Juergen Hoeller 70ed45020b Add StatusAssertions.isForbidden
Includes aligned quoting for header assertion messages.
Also aligns HeaderAssertionTests class name.

Issue: SPR-16129
2017-10-29 09:51:25 +01:00
Rossen Stoyanchev d9ede5bcca Remove link to build and release FAQ
The "Build from Source" wiki page now consolidates build-related information
and is independent from "Release" information. The former is broadly of interest
to any contributor. The later is of interest to committers.
2017-10-27 16:42:29 -04:00
Rossen Stoyanchev f549d583cb Update links 2017-10-27 16:02:54 -04:00
Rossen Stoyanchev b3407a6ce7 Update link. 2017-10-27 15:55:21 -04:00
Juergen Hoeller 80fc85067e Upgrade to RxJava 2.1.6 2017-10-27 15:29:17 +02:00
Juergen Hoeller 78284a62e2 Polishing 2017-10-27 15:28:51 +02:00
Sebastien Deleuze 0e1be82cfb Add SPR-15942 to the refdoc list of pending Kotlin issues 2017-10-27 13:56:24 +02:00
Sebastien Deleuze b9a0e6bbf2 Update documentation about WebTestClient Kotlin issue
Issue: SPR-16057
2017-10-27 13:52:51 +02:00
Juergen Hoeller 419b4440a7 Introspect interface-declared methods in case of proxy (for varargs)
Issue: SPR-16122
2017-10-27 10:52:44 +02:00
Rossen Stoyanchev 2611aa000d Polish 2017-10-26 21:20:45 -04:00
Rossen Stoyanchev 9d00552aac Add logo to README 2017-10-26 21:10:09 -04:00
Rossen Stoyanchev 4437a185f4 Replace logo 2017-10-26 21:02:38 -04:00
Rossen Stoyanchev e0177c9af6 Add logo 2017-10-26 20:44:03 -04:00
Rossen Stoyanchev a7c30570c4 Update README.md 2017-10-26 17:49:54 -04:00
Juergen Hoeller fd6f2bd6a4 Test for null value against boolean property
Issue: SPR-16123
2017-10-26 22:49:34 +02:00
Juergen Hoeller ee7b928300 Upgrade to Derby 10.14.1.0 2017-10-26 21:26:31 +02:00
Juergen Hoeller a2f5e1254e Drive letter case alignment in addClassPathManifestEntries
Issue: SPR-16117
2017-10-26 15:28:27 +02:00
Rossen Stoyanchev a982123ed5 Decouple ExchangeResult from WiretapRequest/Response
This commit decouples ExchangeResult from knowledge about
WiretapClientHttpRequest/Response both of which are now private to
WiretapConnector.

ExchangeResult takes ClientHttpRequest/Response instead along with
promises for the serialized request and response content in the form
of MonoProcessor<byte[]>.

This sets up the possibility for an ExchangeResult to be created
outside and independent of WebTestClient, should we decide to make its
constructor public.

Issue: SPR-16101
2017-10-25 17:41:46 -04:00
Juergen Hoeller 7e8c8f0b76 Polishing 2017-10-25 19:23:48 +02:00
Juergen Hoeller f965123513 Correct SpEL example (matching its comment)
Issue: SPR-16111
2017-10-25 19:19:32 +02:00
Juergen Hoeller 9bab7a2708 Upgrade to Java Activation Framework 1.2 for test runtime
Includes upgrade to Hibernate Validator 6.0.4 (where applicable)

Issue: SPR-16115
2017-10-25 19:18:10 +02:00
Rossen Stoyanchev 01e7cae3ed Fix links 2017-10-25 11:19:30 -04:00
Rossen Stoyanchev 065c9cc101 Typo 2017-10-25 11:17:03 -04:00
Rossen Stoyanchev 376e5b6b53 README + CONTRIBUTING refer to Build from Source wiki 2017-10-25 11:14:42 -04:00
Rossen Stoyanchev 3c1518f53a Update CONTRIBUTING.md 2017-10-25 10:13:11 -04:00
Rossen Stoyanchev 5ac377499c CONTRIBUTING is markdwon again + polish README
The main way CONTRIBUTING will be viewed is on Github and the output
is just not good enough to justify using asciidoctor vs md/txt as
the recommended on the Github help page for contributing guidelines.

For example it was attractive to use a TOC and that works on Github
but doesn't look good. In the end it's a very short TOC and
maintaining manually is easy enough and it's easier to control the
look.
2017-10-25 10:05:41 -04:00
Rossen Stoyanchev bf4c97cb1c Polish README 2017-10-24 23:48:12 -04:00
Rossen Stoyanchev 4e384a636f Polish README 2017-10-24 23:42:54 -04:00
Rossen Stoyanchev b1068fe71e Replace TOC with manual listing
Essentially optimize for viewing on Github since the Asciidoctor
TOC works but doesn't look good with no styling.
2017-10-24 23:30:15 -04:00
Rossen Stoyanchev a455feab59 Optimize TOC for viewing on Github 2017-10-24 23:21:29 -04:00
Rossen Stoyanchev 375d26ed50 Update link to CONTRIBUTING 2017-10-24 23:19:45 -04:00
Rossen Stoyanchev e30d1d92ec Overhaul contributing guidelines
The guidelines were originally created several years ago. This commit
does not fundamentally change anything but rather make the guidance
more compact.

The commit consolidates into into CONTRIBUTING.adoc information from
CONTRIBUTING-DOCUMENTATION.adoc and also the wiki page "The Lifecycle
of an Issue".
2017-10-24 22:54:26 -04:00
Rossen Stoyanchev ce4d88d474 Convert CONTRIBUTING from md to adoc 2017-10-24 15:57:47 -04:00
Spring Buildmaster 6dcc8539f7 Next Development Version 2017-10-24 15:15:29 +00:00
Juergen Hoeller d963597ec0 Test with hasError for unknown status code
Issue: SPR-16108
2017-10-24 15:51:29 +02:00
Juergen Hoeller 9cfa9291cc Polishing 2017-10-24 14:56:38 +02:00
Juergen Hoeller 2d0ab4740c Consistent hasText checks for CharSequence vs String
Directly inlined hasLength implementations for proper nullability detection in IntelliJ, assuming a hasText checked value is never null afterwards. Since the JVM is going to do this at runtime anyway, this is effectively equivalent but more indicative for source code introspection algorithms.

Issue: SPR-15540
2017-10-24 13:16:47 +02:00
Juergen Hoeller 9efdadcdca Compatibility with OpenPDF as alternative to iText 2.1.7
Issue: SPR-16107
2017-10-24 13:14:53 +02:00
Juergen Hoeller efe943df72 WebSphereUowTransactionManager logs overridden application exceptions
Issue: SPR-16102
2017-10-24 13:14:22 +02:00
Brian Clozel bf6025303b Start documenting HTTP/2 support
A new HTTP/2 support section has been added in the Spring MVC
documentation. Also, a dedicated wiki page is created for specific
container support information.

Issue: SPR-15821
2017-10-24 11:41:51 +02:00
Arjen Poutsma 6457a1556e Javadoc 2017-10-24 10:59:47 +02:00
Juergen Hoeller a4f8ce7553 Upgrade to AspectJ 1.9 RC1
Issue: SPR-16077
2017-10-24 02:02:59 +02:00
Juergen Hoeller 182da15908 BridgeMethodResolver properly resolves interface hierarchies
Issue: SPR-16103
2017-10-24 01:01:49 +02:00
Juergen Hoeller 55b0c2f243 Polishing 2017-10-24 01:01:42 +02:00
Sebastien Deleuze 1c256a112b Parse correctly ContentDisposition header with semicolons
Issue: SPR-16091
2017-10-23 23:09:14 +02:00
Rossen Stoyanchev a3e62284ea Create Languages section
Issue: SPR-16044
2017-10-23 16:57:56 -04:00
Rossen Stoyanchev c80aa83383 Upgrade to Reactor Bismuth SR3 2017-10-23 15:01:51 -04:00
Juergen Hoeller ecea82d3a5 Polishing 2017-10-23 17:14:09 +02:00
Juergen Hoeller f31069ac05 Upgrade to Selenium 3.6 and XMLUnit 2.5 2017-10-23 17:13:55 +02:00
Arjen Poutsma 40a6fba443 Allow to change URL/method in ClientRequest.Builder
This commit exposes the ClientRequest's URL and HttpMethod fields via a
setter, so that they can be changed more easily in a request that was
created via ClientRequest.from(ClientRequest).

Issue: SPR-16093
2017-10-23 16:39:33 +02:00
Sebastien Deleuze 585ad5961a Upgrade to Reactor Bismuth-SR2
Issue: SPR-16085
2017-10-23 11:35:46 +02:00
Stephane Nicoll 62c6a0054d Merge pull request #1575 from ocadaruma:fix-example
* pr/1575:
  Fix wrong javadoc example
2017-10-23 09:20:46 +02:00
Haruki Okada 159da04eed Fix wrong javadoc example
Closes gh-1575
2017-10-23 09:20:19 +02:00
Juergen Hoeller c7100f771c Explicit notes on advice mode proxy vs aspectj
Issue: SPR-16092
2017-10-22 20:34:34 +02:00
Juergen Hoeller 75ec973bae Refined tests for StringUtils.starts/endsWithIgnoreCase
Issue: SPR-16095
2017-10-22 20:29:46 +02:00
Juergen Hoeller 5d41e0f012 Avoid temporary String creation in StringUtils.starts/endsWithIgnoreCase
Issue: SPR-16095
2017-10-22 14:31:17 +02:00
Juergen Hoeller 9a88ebdeba Consistent hasText checks for CharSequence vs String
Issue: SPR-15540
2017-10-22 12:12:32 +02:00
Juergen Hoeller 9288990603 Varargs and consistent nullability in MailMessage implementations
Issue: SPR-15756
2017-10-21 23:18:54 +02:00
Juergen Hoeller 5809f5b8eb SubProtocolWebSocketHandler provides protected decorateSession method
Issue: SPR-16089
2017-10-21 23:02:54 +02:00
Juergen Hoeller d418ba1b5d Remove snapshot repository (after Reactor Bismuth-SR1 upgrade)
Issue: SPR-16085
2017-10-21 22:55:51 +02:00
Stephane Nicoll 9404041719 Upgrade to Reactor Bismuth-SR1 2017-10-21 08:10:56 +02:00
Rossen Stoyanchev 1cc5afe24b Fix lines over 120 characters
https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Code-Style#line-wrapping
2017-10-20 16:42:26 -04:00
Stephane Nicoll 8ad212dae2 Merge pull request #1570 from wilkinsona:patch-3
* pr/1570:
  Add missing "be" in Part's javadoc
2017-10-20 16:44:08 +02:00
Andy Wilkinson 07eee05d1d Add missing "be" in Part's javadoc
Closes gh-1570
2017-10-20 16:43:48 +02:00
Juergen Hoeller e17ad551f3 Latest dependency updates (RxJava 1.3.3, Hibernate ORM 5.2.12, Hibernate Validator 5.4.2 & 6.0.3) 2017-10-20 16:16:06 +02:00
Juergen Hoeller d1fac36e3e SchedulingConfigurer and JmsListenerConfigurer respect @Order
Issue: SPR-16090
2017-10-20 16:10:12 +02:00
Juergen Hoeller a4537b1b6d Accessors for configured send-time and buffer-size limit
Issue: SPR-16089
2017-10-20 16:02:26 +02:00
Rossen Stoyanchev 48eb416ecc Fix failing tests 2017-10-19 21:42:31 -04:00
Rossen Stoyanchev ab92754a2e @MatrixVariable resolvers for WebFlux
The information was already parsed and available in a request attribute
but until now there were no argument resolvers to expose it.

Issue: SPR-16005
2017-10-19 21:01:38 -04:00
Arjen Poutsma c7a15260d6 Various DataBuffer improvements
This commit introduces various improvements in DataBuffer:

- DataBuffer now exposes its read and write position, as well as its
capacity and writable byte count.
- Added DataBuffer.asByteBuffer(int, int)
- DataBufferUtils.read now reads directly into a DataBuffer, rather than
copying a ByteBuffer into a DataBuffer
- TomcatHttpHandler now reads directly into a DataBuffer

Issues: SPR-16068 SPR-16070
2017-10-19 10:38:52 +02:00
Rossen Stoyanchev d8a7b96b46 WebFlux support for "request handled" in controller
Issue: SPR-16087
2017-10-18 21:07:27 -04:00
Juergen Hoeller a3eeda99e0 Consistent separation between chapters and after chapter titles 2017-10-18 20:24:17 +02:00
Juergen Hoeller 9df6f3e6b8 Polishing 2017-10-18 20:21:49 +02:00
Juergen Hoeller c3378fda33 AbstractMessageSource properly interacts with non-AbstractMessageSource parent
Issue: SPR-16047
2017-10-18 20:21:12 +02:00
Rossen Stoyanchev 950edf888a Support for Map method argument in WebFlux
Issue: SPR-16086
2017-10-18 11:41:46 -04:00
Juergen Hoeller bec1fc1852 ModelAttributeMethodProcessor detects re-enabled binding declaration
Issue: SPR-16083
2017-10-18 12:31:22 +02:00
Juergen Hoeller ea00c7c6c8 Explicit notes on ExceptionHandler root vs cause resolution
Issue: SPR-16074
2017-10-18 12:18:30 +02:00
Juergen Hoeller ba74e42808 Upgrade to Gradle 4.2.1
Issue: SPR-15985
2017-10-18 12:17:24 +02:00
Juergen Hoeller 5f270bc432 Upgrade to SnakeYAML 1.19 2017-10-18 12:17:13 +02:00
Sebastien Deleuze e5a55327f4 Upgrade to Reactor Bismuth-BUILD-SNAPSHOT
This is done in order to prepare for Reactor Bismuth-SR1
which will be used by Spring Framework 5.0.1.RELEASE.

Issue: SPR-16085
2017-10-18 11:38:07 +02:00
Rossen Stoyanchev 32d78e60b6 Update information on WebApplicationContext hierarchy
Issue: SPR-16041
2017-10-17 21:49:57 -04:00
Rossen Stoyanchev cd634633d8 MockMvc re-uses response instance on async dispatch
MockMvc now properly detects the presence of an AsyncContext and
re-uses the response instance used to start it.

This commit also includes a minor fix in
ResponseBodyEmitterReturnValueHandler to ensure it does not disable
ETag related content buffering for reactive return values that do not
result in streaming (e.g. single value or collections).

Issue: SPR-16067
2017-10-17 16:57:35 -04:00
Rossen Stoyanchev 94c4a7f941 Shortcut factory method in MockServerWebExchange
MockServerWebExchange now has a second factory method that accepts a
MockServerHttpRequest.BaseBuilder.

Issue: SPR-16079
2017-10-17 12:23:12 -04:00
Juergen Hoeller 3d1023be8c Polishing 2017-10-17 11:56:30 +02:00
Juergen Hoeller ef6aef9107 Allow PropertyEditor conversion as fallback for enums
Issue: SPR-16082
2017-10-17 11:49:54 +02:00
Stephane Nicoll 3cb38cef2e Merge pull request #1566 from drumonii:double-backtick-with-apostrophes
* pr/1566:
  Missing some double backticks with apostrophes
2017-10-17 08:34:54 +02:00
Drummond Dawson ff2bea9b6b Missing some double backticks with apostrophes
Closes gh-1566
2017-10-17 08:33:46 +02:00
Rossen Stoyanchev b4c95bf278 ReactiveAdapterRegistry uses Reactor's JdkFlowAdapter
Issue: SPR-16052
2017-10-16 20:49:22 -04:00
Juergen Hoeller 16a08cb465 Upgrade to Jackson 2.9.2 2017-10-16 23:53:23 +02:00
Juergen Hoeller be9c096746 Extended coverage of full vs lite mode for configuration classes
Issue: SPR-16076
(cherry picked from commit 17fb4fed09)
2017-10-16 23:53:09 +02:00
Juergen Hoeller d1b5b5d2f7 Clarify destroy method suppression for DisposableBean vs (Auto)Closeable
Issue: SPR-16078

(cherry picked from commit dff2c84)
2017-10-16 23:53:02 +02:00
Rossen Stoyanchev 2d05e538fb Set path in CookieWebSessionIdResolver
Issue: SPR-16030
2017-10-16 09:55:58 -04:00
Rossen Stoyanchev 4831d38db2 Lower log level for ResponseStatusException
Issue: SPR-16049
2017-10-16 09:55:58 -04:00
Rossen Stoyanchev e9187daa5c Improvements to DispatcherHandler chapter 2017-10-16 09:55:58 -04:00
Rossen Stoyanchev 314f3fc547 Summary of client-side REST options in MVC section 2017-10-16 09:55:58 -04:00
Juergen Hoeller c3cf0840b7 Polishing 2017-10-16 15:34:39 +02:00
Juergen Hoeller c29b6f5b55 Consistent handling of null array for arguments
Issue: SPR-16075
2017-10-16 15:34:18 +02:00
Juergen Hoeller 3890d4c9eb AbstractServerHttpResponse stores HTTP status code as integer value
Issue: SPR-16073
2017-10-16 15:34:09 +02:00
Sam Brannen 8a94077da0 Clean up warnings in spring-core 2017-10-15 18:28:08 +02:00
Sam Brannen 8f4fb207d7 Reinstate CastorUnmarshallerTests.clearCollectionsFalse() 2017-10-15 16:16:48 +02:00
Sam Brannen e9367a11f6 Delete unused import 2017-10-15 16:15:44 +02:00
Juergen Hoeller 43b5e21947 Consistent alias declarations for value attribute on stereotypes
Issue: SPR-16066
2017-10-13 18:18:12 +02:00
Arjen Poutsma 24ca8ccf5a WebTestClient.mutate() should not impact future .mutate() invocations
Issue: SPR-16059
2017-10-13 16:54:30 +02:00
Sebastien Deleuze 6e71664a60 Add spring-kotlin-fullstack example to Kotlin refdoc 2017-10-13 14:38:46 +02:00
Juergen Hoeller 625737f90a Controller/Repository/Service declare value attribute as alias for Component
Issue: SPR-16066
2017-10-13 14:24:12 +02:00
Juergen Hoeller 682186a20d Refactored CodecConfigurer creation for clearer subpackage interdependencies
Includes redeclaration of CodecConfigurer.DefaultCodecs without concrete Jackson decoder/encoder references in order to avoid hard Jackson dependency.

Issue: SPR-16064
2017-10-13 14:23:22 +02:00
Arjen Poutsma faa74988c4 WebClient.mutate() should not impact future .mutate() invocations
Before this commit, when adding filters to a builder obtained via
`WebClient.mutate()`, the filters were added both to the original client
as well as the mutated builder. This commit fixes that.

Issue: SPR-16059
2017-10-13 11:23:10 +02:00
Sebastien Deleuze 2962f085e5 Relax type check in FormHttpMessage(Reader|Writer)
Issue: SPR-16055
2017-10-12 17:48:42 +02:00
Sam Brannen ef0e4dc56a Delete unused import 2017-10-12 17:31:10 +02:00
Juergen Hoeller 91a8993895 Skip init/destroy method check for null beans
Issue: SPR-16063
2017-10-12 15:31:57 +02:00
Juergen Hoeller d611486978 HandlerMappingIntrospector.getHandlerMappings() never returns null 2017-10-12 15:31:11 +02:00
Rossen Stoyanchev 2e0a2845ab Top-level main.css for all asciidoctor styles
Properly separate tocbot from asciidoctor styles and use main.css to
include both.
2017-10-11 07:40:25 -04:00
Brian Clozel 3febec3df6 ResourceWebHandler signals error for missing resources
Prior to this commit, the `ResourceWebHandler` would itself handle the
response with an HTTP 404 in many cases, including a missing static
resource.

This does not give a chance to `WebExceptionHandler` instances to handle
that error and, for example, display an error page.

See spring-projects/spring-boot#8625

Issue: SPR-16023
2017-10-10 23:28:03 +02:00
Brian Clozel 1356bd4359 Share HandlerInterceptors in ResourceHandlerMapping
Prior to this commit, the Resource `HandlerMapping` configured by
`@EnableSpringMvc` would be set up with only one custom
`HandlerInterceptor` (the one exposing the `ResourceUrlProvider` for
resolving URLs of static resources).

This behavior is not consistent with the rest of the default
configuration which leverages the interceptors configured against the
interceptor registry (with possible user-provided ones).

This change allows to register interceptors against resource handling;
this can be useful for metrics purposes, as in
spring-projects/spring-boot#10335.

Issue: SPR-16034
2017-10-10 22:57:52 +02:00
Juergen Hoeller 699fde91db Polishing 2017-10-10 22:18:09 +02:00
Rossen Stoyanchev 6833d4cdff Spring MVC content refactoring
Easier to find (at the top level) and better summary of testing support.
Improve structure headings names.
Remove or update outdated content.
2017-10-10 16:16:29 -04:00
Juergen Hoeller 0d3fa4eb70 Upgrade to Apache Johnzon 1.1.4 2017-10-10 20:35:47 +02:00
Juergen Hoeller 6ef7dd4d5e Notes on classpath scanning and exports vs opens with Jigsaw
Issue: SPR-14579
2017-10-10 20:33:52 +02:00
Juergen Hoeller dc3299152c Polishing 2017-10-09 16:06:03 +02:00
Juergen Hoeller 28e2dd0487 Upgrade to RxJava 2.1.5 2017-10-09 14:00:11 +02:00
Juergen Hoeller cc6e6490d2 Polishing 2017-10-09 13:59:29 +02:00
Juergen Hoeller ad4c8e7c0d Consistently sort BeanDefinitionRegistryPostProcessors
Issue: SPR-16043
2017-10-09 13:59:09 +02:00
Juergen Hoeller 53091c76bf Convenient forType methods for ParameterizedTypeReference
Issue: SPR-16054
2017-10-09 13:59:01 +02:00
Rossen Stoyanchev d4677be5c0 Improve Web Servlet section structure 2017-10-06 21:29:36 -04:00
Rossen Stoyanchev 9998c63ee4 Compact headings in Web Servlet section
Optimized for viewing in left TOC.
2017-10-06 13:11:15 -04:00
Stephane Nicoll b47905f050 Merge pull request #1549 from WilderPereira:patch-1
* pr/1549:
  Fix doc format
2017-10-06 07:46:18 +02:00
Wilder Pereira fba2633e6e Fix doc format
Closes gh-1549
2017-10-06 07:45:31 +02:00
Rossen Stoyanchev 3533db78d2 Fix broken link to overview 2017-10-05 23:33:21 -04:00
Rossen Stoyanchev b11caeb3ea Fix headings in WebFlux section 2017-10-05 22:43:26 -04:00
Rossen Stoyanchev ee3913c6d0 Use Tocbot for Table of Contents 2017-10-05 22:23:38 -04:00
Rossen Stoyanchev 8aaa7e9cc7 Polish index.html 2017-10-05 15:31:27 -04:00
Rossen Stoyanchev eea8ee2165 Migrate JSP tag library appendix reference to Javadoc.
The Javadoc on tag classes now has all the information including a
list of all tags at the package level, HTML tables listing tag
attributes in each tag class, and class level description that is
as good or in many cases better than what was in the reference.

Issue: SPR-16045
2017-10-05 14:25:23 -04:00
Rossen Stoyanchev e5a5677fcd Appendix refactoring
1. Move schemas to local appendix within each top-level section.
2. Link to Javadoc for JSP tags
3. Purge Class Spring usage information

Issue: SPR-16045
2017-10-05 14:25:18 -04:00
Rossen Stoyanchev d04d4bfb4d Better "no content" support and polish in WebTestClient
The WebTestClient now takes advantage of the support for decoding
response to Void.class in WebClient so that applications can use
expectBody(Void.class) to the same effect as using
response.bodyToMono(Void.class) as documneted on WebClient#exchange.

The top-level, no-arg returnResult method (added very recently) has been
retracted, since the use of returnResult at that level, i.e. without
consuming the response content, should be used mainly for streaming.
It shouldn't be used for "no content" scenarios.

Documentation and Javadoc have been udpated accordingly.
2017-10-04 15:05:25 -04:00
Rossen Stoyanchev decb6329db DefaultWebTestClient internal refactoring
Use the ClientResponse methods bodyToMono and bodyToFlux rather than
passing in a BodyExtractor so that WebTestclient now also benefits from
the recently improved handling of Void.class.
2017-10-04 15:05:25 -04:00
Juergen Hoeller 66a6fdacca Deprecate HibernateJpaSessionFactoryBean (against Hibernate 5.2)
Issue: SPR-16016
2017-10-04 12:29:16 +02:00
Juergen Hoeller 03b68286a2 Tokenizer uses single process step and length-based exhaustion check
Issue: SPR-16032
2017-10-04 12:23:16 +02:00
Rossen Stoyanchev b2017bb1ec 3rd party web frameworks is back in the web section 2017-10-03 18:06:13 -04:00
Rossen Stoyanchev 45c207aece What's new and migrating are prominently featured
Before this commit those were burried in the Appendix where few would
guess to look. Previously that information was at the top, so it makes
sense to point to the Github wiki from the index HTML page.

Also a general update of the index page. Since we have recently revised
the overview, we can simply point to it and keep it shorter.

The section listing now includes more details per section.
2017-10-03 17:59:07 -04:00
Rossen Stoyanchev 6597551858 WebClient content included in WebFlux section only
Before this commit WebClient documentation was also included from the
Integration section where the RestTemplate is documented. That is
convenient but results in duplicate content under different URLs.

This commit removes the include from the Integration section and leaves
2017-10-03 17:59:07 -04:00
Juergen Hoeller 3eebdb389b Upgrade to JUnit 5.0.1 and Tomcat 8.5.23 2017-10-03 20:20:35 +02:00
Rossen Stoyanchev fbf2e1e355 Documentation for WebTestClient
Issue: SPR-16009
2017-10-03 10:00:48 -04:00
Sebastien Deleuze 2ecd5a4f02 Update Kotlin issues list in the refdoc 2017-10-03 15:49:37 +02:00
Stephane Nicoll 34a7991e18 Merge pull request #1547 from tomfitzhenry:patch-1
* pr/1547:
  Fix typo in exception message: quite -> quiet
2017-10-03 08:25:01 +02:00
Tom Fitzhenry 1fe3e0cd06 Fix typo in exception message: quite -> quiet
Closes gh-1547
2017-10-03 08:24:34 +02:00
Juergen Hoeller c9d3c2690d Properly resolve null candidates for collection injection
Issue: SPR-16033
2017-10-02 12:27:11 +02:00
Stephane Nicoll 30d1b53aa5 Merge pull request #1545 from MottoX:fix-typo
* pr/1545:
  Fix typo
2017-10-01 09:23:23 +02:00
Robin Wang d9c0151d41 Fix typo
Closes gh-1545
2017-10-01 09:23:07 +02:00
Sebastien Deleuze cf86f9b3dd Polish Kotlin reference documentation 2017-09-30 19:59:34 +02:00
Sam Brannen 657dc961f4 Polishing 2017-09-30 15:25:51 +02:00
Rossen Stoyanchev 7a8c8c062e Add reactive mocks to testing section 2017-09-29 20:21:01 -04:00
Rossen Stoyanchev 48c41049b1 Correct package for MockServerWebExchange
Discovered late, but not too late. MockServerWebExchange is now in the
proper package matching to the location of ServerWebExchange.
2017-09-29 17:03:23 -04:00
Rossen Stoyanchev 223e27d53d Package private request and response implementations
Concrete server and client, reactive request and response
implementations should not have to be accessed outside their package.
They could be seen as private to their HttpHandler adapters and
ClientHttpConnector's respectively.

The one exception, WebSocket upgrades in spring-webflux, is an internal
framework use case, accommodated via downcast + accessors in the
abstract base classes.
2017-09-29 13:04:03 -04:00
Juergen Hoeller 95fdfac128 Upgrade to Gradle 4.2 (and Netty 4.1.16)
Issue: SPR-15985
2017-09-29 17:57:11 +02:00
Stephane Nicoll cee9d1c08f Fix formatting
Closes gh-1483
2017-09-29 14:41:57 +02:00
Stephane Nicoll 1f0f292bab Merge pull request #1535 from nkjackzhang:patch-3
* pr/1535:
  Fix typos in spring-mvc.xsd
2017-09-29 14:36:59 +02:00
nkjackzhang b11d1f5f9b Fix typos in spring-mvc.xsd
Closes gh-1535
2017-09-29 14:36:26 +02:00
Stephane Nicoll f2d040c41c Fix link to "Message Converters" section
Issue: SPR-16024
2017-09-29 14:31:50 +02:00
Sebastien Deleuze 12e1ad9163 Upgrade to Kotlin 1.1.51 2017-09-29 12:30:20 +02:00
Arjen Poutsma 69945f4185 WebClient throws ClassCastException for bodyToMono(ParameterizedTypeReference)
Prior to this commit, the `WebClient` always throws a `ClassCastException`
when an error occurs in `bodyToMono(ParameterizedTypeReference)``, and
not the expected exception, as set up by `onStatus`

Issue: SPR-16025
2017-09-29 10:15:40 +02:00
Rossen Stoyanchev d332e06f6c Update reference after removal of ClientResponse.close() 2017-09-28 16:11:48 -04:00
David Harrigan b7708d989b Improve Kotlin documentation readability 2017-09-28 22:02:25 +02:00
Rossen Stoyanchev 2c2bbb45b9 Fix typo 2017-09-28 14:53:43 -04:00
Nikola Kolosnjaji 7c5dd03c9d Correct ResourceTransformer name 2017-09-28 19:55:07 +02:00
Sam Brannen 2408e2515a Escape hashtag in Testing chapter to disable Asciidoc highlighting 2017-09-28 16:44:08 +02:00
Jussi Hallila 1440026fb4 Change bean registration to use initialize
This commit changes the reference documentation to conform
with the updated API defined in
https://github.com/spring-projects/spring-framework/commit/8b8a6766de01467c8b45b1b9664f0ab2d58f7c69
2017-09-28 15:02:25 +02:00
Spring Buildmaster 5c7bd0a9ea Next Development Version 2017-09-28 11:28:33 +00:00
Juergen Hoeller c078e2eb1d Overview with explicit JDK 9 (Jigsaw) and Java EE 8 references 2017-09-28 11:47:50 +02:00
Juergen Hoeller 255ccf58e0 Remove snapshot repository from build setup 2017-09-28 11:45:33 +02:00
Rossen Stoyanchev 5733065ba4 Rename webflux-client.adoc to webflux-webclient.adoc 2017-09-28 01:16:51 -04:00
Rossen Stoyanchev 67910ee48c WebFlux and Integration share webflux-client.adoc
Extract WebClient content into a separate file that is now included
both in the WebFlux and in the Integration sections.

This allows having RestTemplate and WebClient documented in one place
under Integration while also keeping the same included in the WebFlux
section too.
2017-09-27 23:34:45 -04:00
Rossen Stoyanchev 71ccf3c9e3 Polish 2017-09-27 22:48:26 -04:00
Rossen Stoyanchev 13c959296a Polish 2017-09-27 22:04:07 -04:00
Rossen Stoyanchev 869b818e96 WebFlux support for LocaleContext related arguments
Issue: SPR-15998
2017-09-27 22:03:42 -04:00
Rossen Stoyanchev 0f1bd49f6d HandlerMappingIntrospector is a bean 2017-09-27 21:28:49 -04:00
Brian Clozel 126ac849e5 Fix behavior of ClientResponse#bodyTo** with Void
Prior to this commit, asking for a `Void` type using any of the
`ClientResponse#bodyTo*` methods would immediately return an empty
`Publisher` without consuming the response body.

Not doing so can lead to HTTP connection pool inconsistencies and/or
memory leaks, since:

* a connection that still has a response body being written to it cannot
be properly recycled in the connection pool
* incoming `DataBuffer` might not be released

This commit detects when `Void` types are asked as body types and in
those cases does the following:

1. Subscribe to the response body `Publisher` to allow the connection to
be returned to the connection pool
2. `cancel()` the body `Publisher` if the response body is not empty; in
that case, we choose to close the connection vs. consume the whole
response body

Those changes imply that `ClientHttpResponse` and other related
contracts don't need a `close()` method anymore.

Issue: SPR-16018
2017-09-28 00:58:38 +02:00
Juergen Hoeller ec345bf162 Revised handling of missing data class arguments
Includes unified detection of Kotlin's optional parameters in MethodParameter.isOptional(), reduces BeanUtils.findPrimaryConstructor to Kotlin semantics (for reuse in AutowiredAnnotationBeanPostProcessor), and finally introduces a common KotlinDetector delegate with an isKotlinType(Class) check.

Issue: SPR-15877
Issue: SPR-16020
2017-09-28 00:31:12 +02:00
Sam Brannen d3129a8bd7 Convert selected examples to JUnit Jupiter in reference manual
Issue: SPR-14524
2017-09-27 23:27:44 +02:00
Sam Brannen 8c9d42f793 Document SpringExtension for JUnit Jupiter in reference manual
Issue: SPR-14524
2017-09-27 23:01:59 +02:00
Sebastien Deleuze 492c469d79 Polish Kotlin reference documentation 2017-09-27 22:54:18 +02:00
Sebastien Deleuze 142c16611d Upgrade to Gradle asciidoctor plugin 1.5.6 2017-09-27 21:31:34 +02:00
Rossen Stoyanchev 6ee1af27c6 WebFlux supports HTTP HEAD
Issue: SPR-15994
2017-09-27 15:25:29 -04:00
Sam Brannen d8d74faab8 Polishing 2017-09-27 21:04:58 +02:00
Sam Brannen e995854f11 Cross reference SpEL and Environment from JUnit Jupiter documentation
Issue: SPR-14524
2017-09-27 20:05:50 +02:00
Juergen Hoeller a1a7c62127 Consistent configurer access in WebMvcConfigurationSupport
Issue: SPR-16017

(cherry picked from commit 40ba95f)
2017-09-27 19:52:48 +02:00
Sebastien Deleuze 00c0d7847f Add spring-petclinic-kotlin to Kotlin refdoc 2017-09-27 16:37:10 +02:00
Sam Brannen 550bed2905 Document JUnit Jupiter annotation support in the reference manual
Issue: SPR-14524
2017-09-27 16:25:30 +02:00
Sam Brannen 1a8122f97a Update Testing chapter regarding Servlet 4.0 API for mocks 2017-09-27 16:25:30 +02:00
Sam Brannen 2b91d668df Polish Javadoc for @DisabledIf 2017-09-27 16:25:30 +02:00
Juergen Hoeller 75bd516251 Refined TemporaryLobCreator null handling (from 4.3.x)
Issue: SPR-15656
2017-09-27 15:40:13 +02:00
Brian Clozel 10139d42fc Revisit meaning of response.close() in HTTP client
Prior to this issue, SPR-15920 added this new `close()` method which was
supposed to be called to clean resources after response processing.

This commit changes the meaning of that method: calling `close()` will
close the underlying HTTP connection. This has to be called if the
response body is not consumed by the application, since at that point
the underlying connection might be in an inconsistent state if shared in
a connection pool.

Issue: SPR-15993
2017-09-27 14:03:55 +02:00
Sebastien Deleuze fb09a75c82 Improve support of Kotlin beans w/ primary and default ctors
This commit add the default constructor if available as
fallback after to the primary constructor.

Issue: SPR-16012
2017-09-27 11:27:00 +02:00
Rossen Stoyanchev ec5969c578 InMemoryWebSession cleans up expired sessions
Issue: SPR-15963
2017-09-27 01:43:11 -04:00
Rossen Stoyanchev 15cc44e6e8 Add WebSession.invalidate()
Issue: SPR-15960
2017-09-27 00:10:38 -04:00
Rossen Stoyanchev 6da3518a66 WebSessionStore updates lastAccessTime on retrieve
Now that WebSessionStore is in charge of expiration checks on retrieve
it makes sense to also update the lastAccessTime on retrieve at the
same time, saving the need to call it after a retrieve.

Issue: SPR-15963
2017-09-26 23:12:58 -04:00
Rossen Stoyanchev cb2deccb2d WebSessionStore performs expiration check on retrieve
Issue: SPR-15963
2017-09-26 23:12:12 -04:00
Sebastien Deleuze fbb428f032 Polishing
Issue: SPR-16014
2017-09-27 01:35:25 +02:00
Juergen Hoeller efce7902c4 Polishing 2017-09-27 01:34:11 +02:00
Juergen Hoeller a4b2ae583e Expose AspectJ 1.8.11 in POMs (and use it for all tests)
Issue: SPR-15974
2017-09-27 01:34:02 +02:00
Sebastien Deleuze 23497a7ece Support autowiring by constructor in Kotlin bean DSL
Issue: SPR-16014
2017-09-27 01:25:22 +02:00
Rossen Stoyanchev 0e7e95cded Polish
Issue: SPR-16009
2017-09-26 17:24:39 -04:00
Rossen Stoyanchev 9d5a25e737 Proper WebFlux reference and MVC reference updates
Pending -- WebSocket, WebTestClient, more details around annotation
processing, exception handling, and view resolution.

Issue: SPR-15149, SPR-16009
2017-09-26 15:35:17 -04:00
Rossen Stoyanchev 41b53de644 DispatcherHandler.getHandlerMappings() is also final
Issue: SPR-15934
2017-09-26 15:35:17 -04:00
Rossen Stoyanchev eb6bd2d7b8 Remove args and return value lists from @RequestMapping
It is no longer adequate to list supported arguments and return values
-- between Web MVC and WebFlux, directly on the annotation.

Instead we have tables in the respective chapters in the reference with
cross references to each other.

Issue: SPR-15149
2017-09-26 15:29:58 -04:00
Sebastien Deleuze 14cba15296 Open router and bean Kotlin DSL to allow building custom ones 2017-09-26 16:31:16 +02:00
Sam Brannen 96bbd18e98 Delete unused import 2017-09-26 16:19:49 +02:00
Sebastien Deleuze 12ef367f89 Polish reference documentation 2017-09-26 14:49:39 +02:00
Eddú Meléndez 6f2d58fac6 Remove jackson-datatype-jdk7 auto registration
`jackson-datatype-jdk7` is not provided anymore. It's handlers are
incorporated in core databind.
2017-09-26 14:48:34 +02:00
Arjen Poutsma f9e1913e0d Added docs on customizing WebClient
Issue: SPR-15778
2017-09-26 14:06:53 +02:00
Juergen Hoeller 9d8e3d4185 Explicit check for duplicates in addClassPathManifestEntries
Issue: SPR-15989
2017-09-26 11:49:49 +02:00
Brian Clozel 95b83fe1ba Add zero copy support in reactor-based WebClient
This commit makes Reactor Netty `WebClient` instances
support zero-copy requests by implementing `ZeroCopyHttpOutputMessage`.

The implementation leverages the optimized `sendFile` mechanism if
available.
2017-09-26 11:05:48 +02:00
Brian Clozel 80979e7592 Polish 2017-09-26 11:00:34 +02:00
Brian Clozel 3d37c889fa Un-ignore RequestMapping test for handling "" paths
Issue: SPR-15653
2017-09-26 10:59:21 +02:00
Andy Clement 07b961caa6 Empty path should match the "/" PathPattern
This commit makes both slash "/" and empty "" request paths match the
"/" `PathPattern`.

Issue: SPR-15653
2017-09-26 10:59:13 +02:00
Sebastien Deleuze b85764c7db Add a section about immutable classes persistence in Kotlin refdoc 2017-09-26 00:04:12 +02:00
Sebastien Deleuze 74120ef00f Add custom deserializers support to AbstractJackson2Decoder
Issue: SPR-15975
2017-09-25 23:21:50 +02:00
Juergen Hoeller e927cae476 ObjectProvider offers ifAvailable/ifUnique variants with Consumer
Issue: SPR-16001
2017-09-25 22:45:15 +02:00
Juergen Hoeller 9ff4c0bff8 DispatcherServlet.getHandlerMappings() accessor declared as final
Issue: SPR-15934
2017-09-25 22:45:04 +02:00
Rossen Stoyanchev bdde0f1ea0 WebFlux supports UriBuilder, UriComponentsBuilder args
Issue: SPR-15997
2017-09-25 16:41:30 -04:00
Rossen Stoyanchev 2da2c17fbb WebFlux supporst HttpHeaders return values
Issue: SPR-16006
2017-09-25 16:09:28 -04:00
Sebastien Deleuze 3133f87c14 Upgrade to Reactor Bismuth-RELEASE !!!
This upgrade includes:
 - reactor-core 3.1.0.RELEASE
 - reactor-test 3.1.0.RELEASE
 - reactor-netty 0.7.0.RELEASE

Issue: SPR-16007
2017-09-25 21:48:14 +02:00
Sebastien Deleuze 2d6364eb83 Remove "chin" in admonition blocks of reference documentation
Originally contributed by @olivergierke via
spring-projects/spring-framework#1520. This commit is based on
the spring.css generated from the SASS original source, see
bclozel/asciidoctor-stylesheet-factory#1.
2017-09-25 15:17:22 +02:00
Juergen Hoeller ac45aa2022 Upgrade to AspectJ 1.9 beta 7 (with 1.8.10 exposed in POMs)
Issue: SPR-15974
2017-09-25 13:50:50 +02:00
Arjen Poutsma 1a3cc3df94 Moved fromServerRequest to ServerRequest itself
This commit moves WebFluxUriComponentsBuilder.fromServerRequest to the
ServerRequest interface itself.

Consequently, the WebFluxUriComponentsBuilder is removes itself, as it
contained no other methods.

Issue: SPR-15953
2017-09-25 11:29:07 +02:00
Sebastien Deleuze 0d8031d9b4 Remove remaining Kotlin compilation warning 2017-09-24 23:11:36 +02:00
Sebastien Deleuze 997748ee29 Upgrade to Kotlin 1.1.50
Potential regression detected for null-safety on user project side
https://youtrack.jetbrains.com/issue/KT-20411
2017-09-24 23:11:36 +02:00
Sebastien Deleuze 3996f33399 Support non-standard classes in Kotlin reflection discovery methods
Issue: SPR-15999
2017-09-24 23:10:40 +02:00
Juergen Hoeller 65f556c0e2 Downgrade xjc to 2.2.11 (while keeping JAXB at 2.3.0 general)
Issue: SPR-15996
2017-09-24 18:05:59 +02:00
Juergen Hoeller e2882fe1db Build against EE 8 API level wherever possible
Upgrade to JAXB 2.3, JAX-WS 2.3, Annotations 1.3.1, Interceptor 1.2.1.
Also includes Log4J 2.9.1 and Asciidoctor 1.5.6.
2017-09-24 17:18:21 +02:00
Sebastien Deleuze 1e87b6dd7d Update null-safety refdoc with jsr305 JAR guidelines 2017-09-24 13:31:32 +02:00
Juergen Hoeller 9190b76ab9 Latest dependency updates (POI 3.17, Rome 1.8, EhCache 3.4, Caffeine 2.5.6, RxJava 2.1.4, Tomcat 8.5.21, JRuby 9.1.13, Rhino 1.7.7.2) 2017-09-23 11:28:19 +02:00
Rossen Stoyanchev d742fc198a Add consumeWith to FluxExchangeResult
Issue: SPR-15959
2017-09-22 21:04:02 -04:00
Rossen Stoyanchev 132022861e Remove ResourceServlet deprecated in 4.3.x
Issue: SPR-15984
2017-09-22 20:14:06 -04:00
Stephane Maldini 9c216c2144 update to Bismuth-RC1 2017-09-22 15:58:22 -07:00
Stephane Maldini 21203921f0 sync with reactor-core snapshot 2017-09-22 13:56:39 -07:00
Stephane Maldini 90f4b13767 update to Bismuth-BUILD-SNAPSHOT 2017-09-22 13:50:44 -07:00
Rossen Stoyanchev ed10cab9d3 Remove DispatcherHandler static factory methods
The typical way to load DispatcherHandler is to use
WebHttpHandlerBuilder#applicationContext which also detecs filters,
exception handlers, as well as other beans that are injected into every
ServerWebExchange -- custom session manager, localecontext resolver,
codecs for form data, multipart data, etc

WebHttpHandlerBuilder is the preferred and way so removing the ones on
DispatcherHandler. They could always be added back later.
2017-09-22 16:24:39 -04:00
Rossen Stoyanchev c28a6357c5 DispatcherHandler alignment with DispatcherServlet
Issue: SPR-15934
2017-09-22 15:44:12 -04:00
Rossen Stoyanchev 816a58fcf9 RouterFunctionMapping provides getter for RouterFunction
Issue: SPR-15991
2017-09-22 15:15:41 -04:00
Rossen Stoyanchev 31619b3ffb DispatcherHandler orders HandlerMappings correctly again
Issue: SPR-15991
2017-09-22 15:06:23 -04:00
Juergen Hoeller 7ae59d0c2a Nullability refinements on private and static methods
Based on IntelliJ IDEA 2017.3 introspection results.

Issue: SPR-15756
2017-09-22 18:22:14 +02:00
Brian Clozel 60f47f4489 Fix memory leak in reactive multipart parser 2017-09-22 17:03:38 +02:00
Arjen Poutsma 4fbf86e5ce Javadoc 2017-09-22 14:17:51 +02:00
Arjen Poutsma 2841ef5d05 Introduce RouterFunction visitor
This commit introduces a visitor for router functions
(RouterFunctions.Visitor), allowing to iterate over all the components
that make up a router function.

This commit also introduces a ToStringVisitor, which creates a nicely
formatted string for use with toString().

Issue: SPR-15711, SPR-15711
2017-09-22 14:03:09 +02:00
Sebastien Deleuze 7b6f1d1b58 Use compileOnly and testCompileOnly for JSR 305 JAR
This change avoids error messages in logs during test classes
compilation which are using @NonNull and @Nullable.
2017-09-22 13:44:42 +02:00
Sebastien Deleuze d8e52c0413 Refine BeanUtils#findPrimaryConstructor behavior
Issue: SPR-15673
2017-09-22 13:40:37 +02:00
Jason Yu 78434c8e20 Release DataBuffers in FreeMarkerView
When template processing throws an exception, we must ensure that
`DataBuffers` are properly released to avoid memory leaks.

Issue: SPR-15966
2017-09-22 10:08:18 +02:00
Sebastien Deleuze 7c18e4b115 Polish null-safety documentation
Issue: SPR-15756
2017-09-22 09:45:58 +02:00
Sebastien Deleuze 6c4a103f70 Remove support for generics nullability for now
See https://github.com/Kotlin/KEEP/issues/79
2017-09-21 18:44:27 +02:00
Rossen Stoyanchev 819ca0dbd4 Expose getters for the configured HandlerMapping's
Issue: SPR-15934
2017-09-21 09:46:26 -04:00
Juergen Hoeller c9afdce54b Merge pull request #1532 from aahlenst/spr-15988
ProtobufHttpMessageConverter: Ensure that JSON is written to response body
2017-09-21 12:45:49 +02:00
Andreas Ahlenstorf b30f6fd991 Ensure that JSON is written to response body
Issue: SPR-15988
2017-09-21 12:19:35 +02:00
Juergen Hoeller 15c82afc1c Consistent conversion of Optional array/list arrangements
Issue: SPR-15918
Issue: SPR-15919
Issue: SPR-15676
2017-09-20 18:28:49 +02:00
Juergen Hoeller ea01c4113a Revisit MockPart constructors
Issue: SPR-15854
2017-09-20 10:55:06 +02:00
Juergen Hoeller 4cbef27f90 Consistent tolerance of unknown HTTP status codes behind RestTemplate
Issue: SPR-15978
2017-09-20 10:54:58 +02:00
Juergen Hoeller 215e5f5682 Defensively call getParameterType (which might fail for certain statements)
Issue: SPR-15977
2017-09-20 10:54:49 +02:00
Juergen Hoeller ffe80ff002 Clarify @Bean return type recommendation in case of multiple interfaces
Issue: SPR-15973
2017-09-20 10:54:23 +02:00
Stephane Nicoll 7b48e60c81 Merge pull request #1531 from xavier630:patch-1
* pr/1531:
  Fix Javadoc typo
2017-09-20 09:31:11 +02:00
Xavier Downs dba1ef0b26 Fix Javadoc typo
Closes gh-1531
2017-09-20 09:30:37 +02:00
Juergen Hoeller 80134d2e0c Automatic-Module-Name manifest entries for Jigsaw
Includes upgrade to Jetty 9.4.7 GA.

Issue: SPR-13716
2017-09-19 15:35:10 +02:00
Juergen Hoeller 185c2bf5b6 Upgrade to ASM 6.0
Issue: SPR-14514
2017-09-19 13:49:32 +02:00
Juergen Hoeller ac9cfefaff TaskExecutorRegistration does not apply its default settings to a user-provided executor
Also, ChannelRegistration.setInterceptors is deprecated now: in favor of a fluently named interceptors(...) method which is documented to add the given interceptors to the channel's current list.

Issue: SPR-15962
Issue: SPR-15976
2017-09-19 13:47:43 +02:00
Juergen Hoeller 5bdcb895c0 HttpEntityMethodProcessor lets entity headers override existing headers (again)
Issue: SPR-15952
2017-09-19 13:47:30 +02:00
Sebastien Deleuze 8caeb33974 Polish Kotlin reference documentation 2017-09-19 13:34:21 +02:00
Juergen Hoeller 3bd2154046 Polishing 2017-09-19 00:02:40 +02:00
Juergen Hoeller 0f42f38336 Drop Animal Sniffer setup (and upgrade to RxJava 1.3.2) 2017-09-19 00:02:19 +02:00
Juergen Hoeller 346d2edce1 Revised org.springframework.lang javadoc
Issue: SPR-15756
2017-09-18 23:59:11 +02:00
Juergen Hoeller 1f3967cb3c spring-jcl provides NoOpLog and SimpleLog as well
Issue: SPR-15957
2017-09-18 23:57:44 +02:00
Sebastien Deleuze 825449a3d2 Introduce a link to go back to refdoc index 2017-09-18 15:23:26 +02:00
Stephane Nicoll cad51d1251 Merge pull request #1530 from qwazer:rename_fix
* pr/1530:
  Fix class name in javadoc
2017-09-18 14:28:58 +02:00
areshetnikov 0f0b8dc745 Fix class name in javadoc
Closes gh-1530
2017-09-18 14:28:37 +02:00
Stephane Nicoll b275a06d16 Reuse JmsTemplate's MessageConverter in JmsMessagingTemplate
This commit makes sure that any custom MessageConverter set in a
JmsTemplate used by a JmsMessagingTemplate is reused as the payload
converter of the message.

Issue: SPR-15965
2017-09-18 14:27:47 +02:00
Stephane Nicoll 7aa956a920 Polish 2017-09-18 14:06:31 +02:00
Sebastien Deleuze c5ba55ffc2 Polish null-safety documentation
Issue: SPR-15756
2017-09-15 18:06:58 +02:00
Arjen Poutsma a7617a2641 Introduce WebFluxUriComponentsBuilder
This commit introduces the WebFluxUriComponentsBuilder, with a single
method that creates a UriComponentsBuilder for a ServerRequest. More
methods to be added by @rstoyanchev.

Issue: SPR-15953
2017-09-15 14:14:39 +02:00
Arjen Poutsma 2fb3eeba6f Introduce ServerRequest.methodName()
This commit introduces a methodName() method to the ServerRequest,
returning the String name of the method. This method is useful for
non-standard HTTP methods.
2017-09-15 14:14:39 +02:00
Sebastien Deleuze 1bc93e3d0f Revisit nullability annotations
This commit introduces the following changes.

1) It adds a new Spring @NonNull annotation which allows to apply
@NonNullApi semantic on a specific element, like @Nullable does.
Combined with @Nullable, it allows partial null-safety support when
package granularity is too broad.

2) @Nullable and @NonNull can apply to ElementType.TYPE_USE in order
to be used on generic type arguments (SPR-15942).

3) Annotations does not apply to ElementType.TYPE_PARAMETER anymore
since it is not supported yet (applicability for such use case is
controversial and need to be discussed).

4) @NonNullApi does not apply to ElementType.FIELD anymore since in a
lot of use cases (private, protected) it is not part for the public API
+ its usage should remain opt-in. A dedicated @NonNullFields annotation
has been added in order to set fields default to non-nullable.

5) Updated Javadoc and reference documentation.

Issue: SPR-15756
2017-09-15 13:26:41 +02:00
Violeta Georgieva ec2218c967 AbstractListenerWriteFlushProcessor: Ensure the last flush will be performed
When writing Publisher<Publisher<T>>, a flush operation is performed onComplete
for every Publisher. If the flush operation is not able to be performed immediately
it will be retried before starting to process data provided by the next Publisher.
For the last Publisher the implementation needs to ensure that the flush will
be performed only then whole operation will complete.

Issue: SPR-15949
2017-09-15 08:53:00 +02:00
Arjen Poutsma 2510db0683 Javadoc 2017-09-14 17:23:25 +02:00
Arjen Poutsma e70210a1da Introduce ForwardedHeaderFilter for WebFlux
This commit introduces a ForwardedHeaderFilter for WebFlux, similar to
the existing Servlet version. As part of this the
DefaultServerHttpRequestBuilder had to be changed to no longer use
delegation, but instead use a deep copy at the point of mutate().
Otherwise, headers could not be removed.

Issue: SPR-15954
2017-09-14 16:27:12 +02:00
Juergen Hoeller 69af698ceb Latest dependency updates (EclipseLink 2.7 final, Hibernate ORM 5.2.11, Selenium 3.5.3) 2017-09-14 15:16:53 +02:00
Brian Clozel 81125de697 Fix error responses handling in WebClient
This commit fixes a typo in the `DefaultWebClient` implementation.
Instead of forwarding resolved `WebClientException` instances as error
signals, the `bodyToMono(ParameterizedTypeReference)` variant would just
forward those exceptions as `onNext` signals.

Issue: SPR-15946
2017-09-14 14:15:05 +02:00
Brian Clozel 98b6491f0c Send error signal also for empty server responses
Prior to that commit, the `ResponseSpec` `WebClient` would process error
responses (4xx, 5xx HTTP status) and transform those into error signals
with a `WebClientResponseException`. But this would only work if the
HTTP response would have a non-empty response body.

An empty error response would not send an error signal and only
translate in an `onComplete` signal.

This commit fixes this behavior and makes sure that this error signal is
sent in all cases.

Issue: SPR-15946
2017-09-13 10:56:57 +02:00
Brian Clozel aa19912e00 Polish 2017-09-13 10:51:13 +02:00
Grant Hutchins f4ef5cd451 Fix broken RequestMappingHandlerAdapter setter
RequestMappingHandlerAdapter.setReactiveRegistry() doesn't actually set the value appropriately.

FYI: I found this using lgtm.com

https://lgtm.com/projects/g/spring-projects/spring-framework/alerts/?mode=list
2017-09-12 15:04:33 -04:00
Rossen Stoyanchev ac5694b150 Web documentation update
Issue: SPR-15149
2017-09-12 15:02:00 -04:00
David Harrigan 1871c9626d Kotlin documentation readability improvements
Issue: SPR-15659
2017-09-12 16:36:06 +02:00
Arjen Poutsma 4a0784bea8 Test HTTPS in ReactorServerHttpRequest URI
This commit adds a test for ReactorServerHttpRequest.getUri() to check
whether it returns a HTTPS scheme when configured with SSL.

Issue: SPR-15931
2017-09-12 15:14:54 +02:00
Rossen Stoyanchev e214d69350 Remove jetbrains annotations inserted by IDE 2017-09-11 09:31:43 -04:00
Juergen Hoeller 4371350b5d Polishing 2017-09-10 21:56:31 +02:00
Juergen Hoeller 30d67f7c42 Tests for @Lazy Validator setup
Issue: SPR-15807
2017-09-10 21:56:23 +02:00
Juergen Hoeller 6dcf2e3c5b Upgrade to RxJava 1.3.1
Issue: SPR-15497
2017-09-10 21:55:42 +02:00
Sam Brannen 0867045fc1 Upgrade to JUnit 5.0 GA!
Issue: SPR-15737
2017-09-10 21:20:38 +02:00
Rossen Stoyanchev 5c0ca98372 Update index.adoc 2017-09-09 18:21:57 -04:00
Rossen Stoyanchev f76ac5bb32 WebFlux support for @SessionAttributes
Issue: SPR-15887
2017-09-09 17:40:59 -04:00
Rossen Stoyanchev bc470fca30 Polish 2017-09-09 17:40:59 -04:00
Stephane Maldini 8f78c772b5 update to Bismuth-M4 2017-09-08 16:56:23 -07:00
Juergen Hoeller 04765b6202 Upgrade to OkHttp 3.9 and removal of superfluous spring-jcl reference 2017-09-08 16:56:40 +02:00
Juergen Hoeller fd0132c7e6 Polishing 2017-09-08 16:56:22 +02:00
Juergen Hoeller aa4ae7a750 Heart-beat log message potentially without session id
Issue: SPR-15937
2017-09-08 16:55:27 +02:00
Juergen Hoeller 496223a927 WebFlux supports field default/marker parameters for data classes as well
Issue: SPR-15871
2017-09-08 16:55:12 +02:00
Yi EungJun cf106ec99e Fix typo 2017-09-08 10:48:27 +02:00
Brian Clozel 1a883b863d Remove temporary workaround for reactor-netty client
Now that https://github.com/reactor/reactor-netty/issues/138 is solved,
this commit removes the temporary workaround introduced in SPR-15784
but leaves the general mechanism for detecting empty responses.
2017-09-08 10:27:35 +02:00
Brian Clozel 69edd4ac50 Remove spring-build-src module from BOM
Issue: SPR-15932
2017-09-08 08:50:34 +02:00
Brian Clozel c64083da8d Upgrade to Jackson 2.9.1 2017-09-08 08:49:10 +02:00
Andy Clement 3956423afe Polish
The high level matchStarting API was removed a few commits ago.
This change tidies up by removing the supporting infrastructure
for that from the PathElements.
2017-09-07 14:03:46 -07:00
Sebastien Deleuze a8693bf947 Improve Kotlin ref doc
This commit add a section about annotations and provides
various update and enhancements to the Kotlin reference
documentation.

Issue: SPR-15659
2017-09-07 17:30:52 +02:00
Arjen Poutsma ec6475a24c Expose scheme in ReactorServerHttpRequest URI
This commit determines fixes ReactorServerHttpRequest.getUri() so that
it includes a URL scheme.

Issue: SPR-15931
2017-09-07 12:29:28 +02:00
Sam Brannen 15ab0ad6e2 Clean up warnings in Gradle build output 2017-09-07 12:25:10 +02:00
Sam Brannen 8acb8aef1f Exclude commons-logging from spring-test dependencies
Prior to this commit, various dependencies in the spring-test module
pulled in commons-logging as a transitive dependency. Consequently,
the presence of commons-logging in the generated Eclipse classpath
overrode the intended use of the spring-jcl module causing JUL to be
used instead of log4j for tests executed within Eclipse, thereby
ignoring the configuration in src/test/resources/log4j2-test.xml.

This commit addresses this issue by excluding commons-logging in
spring-test.gradle for all Selenium dependencies.

Issue: SPR-15930
2017-09-07 12:16:53 +02:00
Rossen Stoyanchev dff0e7923c Merge pull request #1507 from rwinch/websessionmanager 2017-09-06 11:48:17 -04:00
Rossen Stoyanchev 2fc2dab230 Fold DefaultWebSession within InMemoryWebSessionStore
InMemoryWebSessionStore is very closely associated to DefaultWebSession
passing it to it several fields and functions. Now that the store also
creates the session, it makes sense to bring the latter in as an inner,
nested class.

Issue: SPR-15875, 15876
2017-09-06 11:47:43 -04:00
Rossen Stoyanchev c7d54c8b52 Polish 2017-09-06 11:47:43 -04:00
Rob Winch 8ad14ae95c DefaultWebSessionManager decoupled from DefaultWebSession
DefaultWebSessionManager no longer requires the WebSessionStore
to use DefaultWebSession.

Removed explicit start() in save(). This seemed unnecessary since at
that point isStarted is guaranteed to return true. The status can
be updated through the copy constructor.

DefaultWebSessionTests added.

Issue: SPR-15875
2017-09-06 11:47:43 -04:00
Rob Winch 86912475af Refactor WebSessionStore
- Add WebSessionStore.createWebSession.

- Remove remove WebSessionStore.changeSessionId

- Add WebSessionStore updateLastAccessTime which allows updating the
WebSession lastAccessTime without exposing a method on WebSession in
an implementation independent way.

- Remove WebSessionStore.storeSession. This method is not necessary
since the WebSession that is returned allows saving the WebSession.
Additionally, it is error prone since the wrong type might be passed
into it.

Issue: SPR-15875, 15876
2017-09-06 11:47:43 -04:00
Rob Winch b7280472d6 Improve WebSession related tests
Add missing DefaultWebSessionManagerTests .block(). Previously
session.save() was invoked, but we did not ensure it was completed.
This commit makes it block on session.save()

Fix existingSessionIsExpired. This test is actually broken and is
testing a new session is created because the session id returned
by the idResolver does not match the existing WebSession.
This commit ensures that the id of the WebSession found by idResolver
matches the existing WebSession.

DefaultWebSessionManagerTests use Mockito. To ensure we test with
independence from InMemoryWebSessionStore we use Mockito for the
DefaultWebessionManager collaborators.

Add test for response.setComplete(). We want to ensure that when the
response is completed, it saves the WebSession and writes it to the
response using idResolver
2017-09-06 11:47:43 -04:00
Rob Winch 167ddc7cfc Polish HeaderWebSessionIdResolver
Use constant for default header name and make getHeaderName private.

Also switch HeaderWebSessionIdResolverTests to unit tests rather than
testing with DefaultWebSessionManager.

Issue: SPR-15917
2017-09-06 11:47:43 -04:00
Sam Brannen dcdb0b416f Rename SPRING_CLASS_RULE fields to springClassRule 2017-09-06 17:38:22 +02:00
Brian Clozel 16f3f8d28f Add close() method on HTTP client response
Before this commit, there was no way to signal the HTTP client that we
were done consuming the response. Without that, the underlying client
library cannot know when it is safe to release the associated resources
(e.g. the HTTP connection).

This commit adds new `close()` methods on both `ClientHttpResponse`
and `ClientResponse`. This methods is non-blocking and its behavior
depends on the library, its configuration, HTTP version, etc.

At the `WebClient` level, `close()` is called automatically if we
consume the response body through the `ResponseSpec` or the
`ClientResponse` itself.

Note that it is *required* to call `close()` manually otherwise; not
doing so might create resource leaks or connection issues.

Issue: SPR-15920
2017-09-06 17:29:18 +02:00
Sam Brannen ba6b617bd5 Demo: @Autowired rules not supported with Spring's JUnit rules
This commit introduces a test that demonstrates that custom JUnit 4
rules can be @Autowired into a test instance but that they will not be
applied by JUnit since JUnit only ever sees such fields as null and
therefore ignores them.

Issue: SPR-15927
2017-09-06 17:29:04 +02:00
Sebastien Deleuze 699dfc55a8 Improve Kotlin ref doc structure
Issue: SPR-15659
2017-09-06 17:13:17 +02:00
Sebastien Deleuze 5ae35f606c Leverage kotlin-reflect to determine parameter names
This is especially useful to determine interface parameter names
without requiring Java 8 -parameters compiler flag.

Issue: SPR-15541
2017-09-06 15:56:45 +02:00
Arjen Poutsma 02a2c400c7 Move URL transform methods from ServerHttpResponse to ServerWebExchange
This commit moves `encodeUrl` and `registerUrlEncoder` from
ServerHttpResponse to ServerWebExchange.

It also renames `encodeUrl` to `transformUrl` and `registerUrlEncoder`
to `addUrlTransformer` to make it clearer that these methods do not
perform actual URL encodings (i.e. they do not replaceinvalid
characters).
The `add` prefix (instead of `register`) makes it clearer that each
function is added in addition to the previous one.

Issue: SPR-15924
2017-09-06 14:39:09 +02:00
Sebastien Deleuze 5d4ee09d53 Fix AbstractJackson2Encoder#canEncode
This commit ensures that the Jackson encoder is selected only
with supported mime types.

Issue: SPR-15910
2017-09-06 08:26:15 +02:00
Rossen Stoyanchev 320bfdf413 Polish 2017-09-05 17:47:02 -04:00
Greg Turnquist c98e01ad1f Create session-based WebSessionIdResolver
Introduces HeaderSessionIdResolver, which reads session ids from a session header and generates a session response header when new session are created.

Related issue: SPR-15917
2017-09-05 17:37:50 -04:00
Rossen Stoyanchev 03eb6f76db Improve check for actual return value type
Issue: SPR-15910
2017-09-05 16:11:35 -04:00
Rossen Stoyanchev 39cefb5bd7 One more instance of modified method name in Mono 2017-09-05 13:59:45 -04:00
Rossen Stoyanchev fc0841c60f Adapt to method name change in Mono 2017-09-05 13:57:20 -04:00
Sam Brannen 0702898836 Clean up warnings in Gradle build output 2017-09-04 16:26:51 +02:00
Sebastien Deleuze 60f763a0dd Polish Kotlin reference documentation
Issue: SPR-15659
2017-09-04 10:54:48 +02:00
Sebastien Deleuze 8b8a6766de Change BeanDefinitionDsl to implement ApplicationContextInitializer 2017-09-04 10:46:20 +02:00
Sebastien Deleuze 2969af82d2 Fix Reactive Web link in the ref doc 2017-09-04 07:40:18 +02:00
Stephane Nicoll 71182ab54b Provide hierarchy traversal support for getBeanNamesForAnnotation
Issue: SPR-15923
2017-09-03 08:19:34 +02:00
Juergen Hoeller f0198f3756 Upgrade to Apache Johnzon 1.1.3
Issue: SPR-15590
2017-09-02 00:28:41 +02:00
Brian Clozel bff54788e8 Enable HTTP compression Reactor ClientHttpConnector
`ReactorClientHttpConnector` provides an adapter layer to `WebClient`
for using Reactor-Netty's `HttpClient`.
This commit enables HTTP compression support by default for this client
Connector.

Another constructor is still available for providing a custom
`HttpOptions` configuration.

Issue: SPR-15908
2017-09-01 23:14:58 +02:00
Rossen Stoyanchev edb70b4f55 Merge pull request #1504 from bbohl/stringindexoutofbounds_resttemplate_fix 2017-09-01 16:58:09 -04:00
Rossen Stoyanchev 3d61f7ba60 Polish 2017-09-01 16:57:35 -04:00
Brian Bohl 81dfadcb16 Fix StringIndexOutOfBoundsException in RestTemplate.doExecute IOException handler when query string is an empty string 2017-09-01 16:48:53 -04:00
Juergen Hoeller 26284cac4f Hibernate Validator 5 compatible support for element constraints
Issue: SPR-15916
Issue: SPR-15839
2017-09-01 16:40:24 +02:00
Juergen Hoeller b6cae219d8 Upgrade to Log4J 2.9 (and Undertow 1.4.20) 2017-09-01 14:08:19 +02:00
Juergen Hoeller 97ded1dcc7 Polishing 2017-09-01 14:05:35 +02:00
Juergen Hoeller 30bd5827b0 ConfigurationClassEnhancer leniently allows for null bean references
Issue: SPR-15829
2017-09-01 14:05:14 +02:00
Juergen Hoeller 204ddebd68 SimpleAsyncTaskExecutor properly respects NO_CONCURRENCY
Issue: SPR-15895
2017-09-01 13:44:49 +02:00
Stephane Nicoll 678a786076 Merge pull request #1512 from Buzzardo:CONTRIBUTING-DOCUMENTATION-edit
* pr/1512:
  CONTRIBUTING-DOCUMENTATION.adoc edit
2017-09-01 09:28:28 +02:00
Jay Bryant 3736b049d0 CONTRIBUTING-DOCUMENTATION.adoc edit
I made it be more formal and be easier to read.

Closes gh-1512
2017-09-01 09:28:09 +02:00
Stephane Nicoll 3a006439ee Merge pull request #1511 from arend-von-reinersdorff:patch-1
* pr/1511:
  Minor fix in example code: No quotes for boolean
2017-09-01 09:27:05 +02:00
Arend v. Reinersdorff ba50581961 Minor fix in example code: No quotes for boolean
Closes gh-1511
2017-09-01 09:26:47 +02:00
Arjen Poutsma 14af5d941a Javadoc
Issue: SPR-15912
2017-08-31 13:55:19 +02:00
Sebastien Deleuze 2f812112c2 Update Kotlin Slack URL
Issue: SPR-15659
2017-08-31 10:23:25 +02:00
Sebastien Deleuze 466699ba63 Polishing
Issue: SPR-15659
2017-08-31 09:57:11 +02:00
Stephane Nicoll a8f10280ff Merge pull request #1509 from Buzzardo:master
* pr/1509:
  Polish contribution
  Polish
2017-08-30 18:14:08 +02:00
Stephane Nicoll 8bd45cdec4 Polish contribution
Closes gh-1509
2017-08-30 18:13:10 +02:00
Jay Bryant ea0e22218f Polish
See gh-1509
2017-08-30 18:12:50 +02:00
Sebastien Deleuze 44e8cdcd89 Polishing
Issue: SPR-15659
2017-08-30 17:28:36 +02:00
Sebastien Deleuze 884fc40c3c Add "Injecting configuration properties" to Kotlin ref doc
Issue: SPR-15659
2017-08-30 16:36:55 +02:00
Sebastien Deleuze 75114bd835 Upgrade to Kotlin 1.1.4-3 2017-08-30 15:27:21 +02:00
Sebastien Deleuze 3c9bb645d5 Improve Kotlin reference documentation
Issue: SPR-15659
2017-08-30 11:56:20 +02:00
Sam Brannen 71bd10f150 Update notes in Eclipse import script 2017-08-29 17:22:05 +02:00
Sam Brannen 9dd3a1cae7 Polishing 2017-08-29 16:57:27 +02:00
Martin Macko 721af4f780 Fix wrong instructions for building documentation (#1508)
Issue: SPR-15906
2017-08-29 16:51:11 +02:00
Juergen Hoeller 2b44e6e21c Strong references to mapped exception handler methods
Issue: SPR-15907
2017-08-29 15:07:23 +02:00
Juergen Hoeller b122bc6dcc Upgrade to Hibernate Validator 6.0.2
Includes latest dependency updates (Netty 4.1.15, Undertow 1.4.19)

Issue: SPR-15808
2017-08-29 15:04:17 +02:00
Sebastien Deleuze bddd71e705 Polishing
Issue: SPR-15659
2017-08-29 10:45:11 +02:00
Sebastien Deleuze 4359008b2b Polishing
Issue: SPR-15659
2017-08-29 01:49:37 +02:00
Sebastien Deleuze c1559b3f0a Fix link to Spring Framework KDoc
Issue: SPR-15659
2017-08-29 01:43:32 +02:00
Sebastien Deleuze ed6a35b465 Add API and reference documentation for Kotlin support
Issue: SPR-15659
2017-08-29 01:07:27 +02:00
Sebastien Deleuze d2c1b284f3 Polish Kotlin API contracts and documentation
Issue: SPR-15659
2017-08-29 00:56:39 +02:00
Sam Brannen 3f2e27f24f Fix Javadoc formatting in AnnotationBeanConfigurerAspect 2017-08-28 15:45:09 +02:00
Sam Brannen 4e81ee5fdf Verify support for H2 database aliases in SQL scripts
This commit introduces a test to demonstrate how to define an alias in
an SQL script executed against an embedded H2 database.

Issue: SPR-15896
2017-08-26 15:04:48 +01:00
Brian Clozel 582014e944 Support HTTP range requests in MVC Controllers
Prior to this commit, HTTP Range requests were only supported by the
ResourceHttpRequestHandler when serving static resources.

This commit improves the `HttpEntityMethodProcessor` and
the `RequestResponseBodyMethodProcessor`. They now extract
`ResourceRegion`s from the `Resource` instance returned by the
Controller and let the Resource-related message converters
handle the writing of the resource (including partial writes).

Controller methods can now handle Range requests for
return types that extend Resource or HttpEntity:

    @RequestMapping("/example/video.mp4")
    public Resource handler() { }

    @RequestMapping("/example/video.mp4")
    public HttpEntity<Resource> handler() { }

Issue: SPR-15789, SPR-13834
2017-08-24 20:50:37 +02:00
Sam Brannen d20b3cf86d Upgrade to TestNG 6.12 2017-08-24 15:27:46 +01:00
Sam Brannen d070010650 Upgrade to JUnit Jupiter 5.0 RC3
Issue: SPR-15848
2017-08-23 20:53:46 +01:00
Sebastien Deleuze ba02b5761e Provide distinct Web and Reactive Web sections
This change allows much more usable TOC for the reactive
stack and will make WebFlux documentation easier to
contribute thanks to a clearer split between both stacks.

Issue: SPR-15149
2017-08-23 16:02:04 +02:00
Sebastien Deleuze cdb6688815 Update WebFlux code examples 2017-08-23 13:59:46 +02:00
Sebastien Deleuze d61db48d64 Improve WebFlux documentation sections
Issue: SPR-15149
2017-08-23 13:53:58 +02:00
Sam Brannen 9da3927235 Polishing 2017-08-22 22:23:44 +01:00
Sam Brannen 1cb96f47c8 Fix Eclipse support in Gradle build
The upgrade to Gradle 4.0 broke the custom Eclipse support in the
Spring Framework build.

This commit includes the following changes which re-enable support for
Eclipse in the build.

- Switched to ProjectDependency(String) constructor

- Updated regular expression that matches against project output
  dependencies to include more than one subdirectory between "build"
  and "main"|"test".

Issue: SPR-15862
2017-08-22 22:16:34 +01:00
Brian Clozel 397fd24849 Revert "Leverage Kotlin plugin dependency management"
This reverts commit 3e2f6c848a.
2017-08-22 21:29:39 +02:00
Brian Clozel a1e898fd39 Share common compiler args between src and test
Issue: SPR-15885
2017-08-22 18:09:19 +02:00
Sebastien Deleuze 3e2f6c848a Leverage Kotlin plugin dependency management 2017-08-22 17:35:57 +02:00
Sebastien Deleuze ef68ccdbd8 Add support for Kotlin autowired ctors w/ optional params
This commit adds support for autowired constructor parameters
on Kotlin classes with optional parameters. If some constructor
parameters are not available, optional parameter default values
will be used instead. Both explicit @Autowired annotated constructor
and implicit single constructor automatically autowired are supported.

Issue: SPR-15847
2017-08-22 17:05:18 +02:00
Sebastien Deleuze ab6430569d Efficient Kotlin metadata detection
Follow-up of 3991ab4a23.

Issue: SPR-15673
2017-08-22 16:22:25 +02:00
Brian Clozel cea9d1db8e Fix Spring Framework BOM
This commit reinstates the Spring Framework BOM, which was previously
empty because of a previous change in 41cbc4670f.
This change also removes the JSR305 dependency from the BOM, which does
not belong here since it is not an artifact produced by Spring.

Issue: SPR-15885
2017-08-22 16:04:23 +02:00
Brian Clozel af7673dda7 Polish build
Issue: SPR-15885
2017-08-22 11:23:22 +02:00
Brian Clozel f6023c2202 Remove Sonar / Jacoco build configuration
Issue: SPR-15885
2017-08-22 11:10:53 +02:00
Stephane Nicoll 5a51351fa4 Relax test assertion when Jacoco is enabled
This commit changes the resolveMethod to take a method name as
instrumentation may add additional methods to the test object.

Issue: SPR-15888
2017-08-22 10:26:19 +02:00
Sebastien Deleuze 9abe77670c Sync with reactor-core when() -> zip() change 2017-08-21 19:54:08 +02:00
Brian Clozel 9341955107 Do not render PDF reference doc for SNAPSHOT builds
This commit ensures that only the HTML version of the reference
documentation is rendered for SNAPSHOT builds. This speeds up
significatly the build.

Issue: SPR-15885
2017-08-21 14:42:21 +02:00
Brian Clozel 5460c0095b Fix Gradle warnings about task output
As of Gradle 4.0, project SourceSets can have multiple output
directories (one per programming language).
This commit fixes warnings that are logged when a single output dir
is considered by tasks.

Issue: SPR-15885
2017-08-21 14:42:12 +02:00
Brian Clozel cc3d7d2d48 Apply dependency management to selected modules
This commit applies the Dependency Management Plugin to modules that
require it; right now Spring Framework is importing BOMs for Netty and
Reactor dependencies only.

Instead of applying those BOMs to all modules, they're applied only
where they're needed.

Issue: SPR-15885
2017-08-21 14:42:03 +02:00
Brian Clozel 2eeb428e95 Move modules to independent build files
The main `build.gradle` file contains now only the common build
infrastructure; all module-specific build configurations have
been moved to their own build file.

Issue: SPR-15885
2017-08-21 14:41:55 +02:00
Brian Clozel 41cbc4670f Refactor the spring-beans build
This commit merges back the "spring-beans-groovy" module into the main
"spring-beans" one. The build is configured so:

* Java and Groovy sources are jointly compiled
* Kotlin sources are compiled after

With this change, the `MergePlugin` is not used anymore in the project
build and therefore is removed.
The `DetectSplitPackagesPlugin` wasn't applied so it's been removed as
well.

Issue: SPR-15885
2017-08-21 14:41:46 +02:00
Brian Clozel 0c178ff762 Generate docs *after* running tests in Gradle build
This commit reorders docs generation (javadoc, asciidoctor) *after*
runing tests for `./gradlew build` commands.

Issue: SPR-15885
2017-08-21 14:41:38 +02:00
Brian Clozel 2e50ea7eb4 Move plugin declarations to plugin syntax
Note: this syntax automatically applies the plugin to the root project.
Adding `apply false` in the plugin declaration disables that.

Issue: SPR-15885
2017-08-21 14:41:28 +02:00
Brian Clozel 11418d8d28 Allow dedicated build files for subprojects
With this change, each subproject can configure its
build in a dedicated file like:

```
spring-core/spring-core.gradle
spring-web/spring-web.gradle
```

Issue: SPR-15885
2017-08-21 14:40:35 +02:00
Brian Clozel 4d306e2d85 Use Gradle build scans
This commit configures Gradle build scans for the Spring Framework
build. Scans aren't performed for every build but can be enabled
with the following:

```
./gradlew build --scan
```

Issue: SPR-15885
2017-08-21 14:29:49 +02:00
Stephane Nicoll 3d28e80e53 Fix code format
Closes gh-1501
2017-08-21 08:42:26 +02:00
Juergen Hoeller b61c055e43 Polishing 2017-08-21 01:37:33 +02:00
Juergen Hoeller fac1f236c3 Upgrade to Servlet API 4.0 for MVC and merge EhCache 3 tests into spring-context-support
Includes general streamlining of dependency declarations with reduced version variables, direct use of EclipseLink 2.7 and its implicit JPA 2.2 dependency in spring-orm, mixed use of Hibernate 5.2.10 and 5.1.10 for integration tests, as well as an upgrade to Jetty 9.4.7 RC0 and a downgrade to Groovy 2.4.12 (since Groovy 2.5 won't be final in time for Spring Framework 5.0).

Issue: SPR-15879
Issue: SPR-15880
2017-08-21 01:34:11 +02:00
Juergen Hoeller 3991ab4a23 Efficient Kotlin metadata detection
Issue: SPR-15673
2017-08-21 01:33:20 +02:00
Stephane Nicoll f6e7fef236 Polish 2017-08-19 10:50:41 +02:00
Rossen Stoyanchev dabb02d830 Update docs on DispatcherServlet config and processing
Issue: SPR-15149
2017-08-18 19:07:28 +02:00
Rossen Stoyanchev 940a344a73 Polish 2017-08-18 19:07:28 +02:00
Juergen Hoeller 9aa369f402 Data class construction supports field default/marker parameters
Issue: SPR-15871
2017-08-18 17:59:06 +02:00
Rossen Stoyanchev 18f42f9667 Fix typo
Issue: SPR-15872
2017-08-18 09:18:03 +02:00
Juergen Hoeller 47a7475898 Resolve remaining nullability warnings
Issue: SPR-15869
2017-08-18 00:15:46 +02:00
Juergen Hoeller ac5e2599f7 Consistent overriding for all variants of init/destroy method inheritance
Issue: SPR-15532
2017-08-18 00:13:49 +02:00
Juergen Hoeller b94302b5bd Enforce non-null value from getBean and at injection points
Bean-derived null values may still get passed into bean properties and injection points but only if those are declared as non-required. Note that getBean will never return null; a manual bean.equals(null) / "null".equals(bean.toString()) check identifies expected null values now.  This will only ever happen with custom FactoryBeans or factory methods returning null - and since all common cases are handled by autowiring or bean property values in bean definitions, there should be no need to ever manually check for such a null value received from getBean.

Issue: SPR-15829
2017-08-18 00:11:35 +02:00
Rossen Stoyanchev 10dcaa9bf6 Update introduction to Spring Web MVC
Issue: SPR-15149
2017-08-17 21:59:19 +02:00
Rossen Stoyanchev 11ac87099a Prepare Web section for Servlet vs Reactive content
Refer to both Servlet and reactive stacks in web.adoc
Move web-integration.adoc to the very end
Link in web-flux-functional.adoc
Insert "Spring Web MVC" or "Servlet" prefix in chapter titles

Issue: SPR-15149
2017-08-17 21:59:13 +02:00
Rossen Stoyanchev f1b017af04 Insert line breaks 2017-08-17 21:58:41 +02:00
Sebastien Deleuze 73cf07e9a4 Fix overridden methods nullability
Issue: SPR-15869
2017-08-17 15:02:59 +02:00
Juergen Hoeller 6b6c1d3e53 Build and test against JPA 2.2 and EclipseLink 2.7 (while retaining compatibility with JPA 2.1)
Includes latest dependency updates (Tomcat 8.5.20, Protobuf 3.4, RxJava 2.1.3, Caffeine 2.5.5)

Issue: SPR-15870
2017-08-17 12:31:35 +02:00
Juergen Hoeller ec1eafc46f @Lazy falls back to empty map/list/set for non-required collection dependency
Issue: SPR-15858
2017-08-17 12:28:55 +02:00
Juergen Hoeller 61cdc842e0 BindingResult support for constructor argument mismatch on immutable data object
Issue: SPR-15542
2017-08-17 11:02:40 +02:00
Juergen Hoeller b8f5e97ae5 Properly retrieve and expose HttpServletResponse for async requests
Issue: SPR-15867
2017-08-17 08:52:05 +02:00
Rossen Stoyanchev bb327b90a6 Merge pull request #1499 from rlindooren/SPR-15866-use-provided-mime-types 2017-08-16 15:45:59 +02:00
Rossen Stoyanchev e433d8b66a Polish 2017-08-16 15:45:14 +02:00
rlindooren 5b29555d88 Jackson encoder and decoder should use provided mime types
Instead of always using the default JSON mime types
2017-08-16 15:25:18 +02:00
Rossen Stoyanchev 645e3492db Use URLDecoder for query params in WebFlux
Issue: SPR-15860
2017-08-16 13:34:31 +02:00
Rossen Stoyanchev 8b7a670821 Cancel WebAsyncManager thread on request timeout
Issue: SPR-15852
2017-08-16 09:26:21 +02:00
Rossen Stoyanchev 9c3bd8ce85 Separate forwarded~ and redirectedUrlTemplate methods
This commit restores and existing redirectedUrl and forwardedUrl
methods (simple String comparison) and creates separate
redirectedUrlTemplate and forwardedUrlTemplate methods that expand
and also encode before comparing.

Issue: SPR-15834
2017-08-15 15:25:39 +02:00
Rossen Stoyanchev 8bdaba913c Merge pull request #1486 from drumonii/MockRestRequestMatchers-requestTo-UriVars 2017-08-15 15:11:02 +02:00
Rossen Stoyanchev ea2864c73e Polish 2017-08-15 15:08:23 +02:00
Drummond Dawson 809189be1a URI variables with MockRestRequestMatchers requestToUriTemplate
Issue: SPR-15819
2017-08-15 14:55:56 +02:00
Rossen Stoyanchev 181f002ddf Use exact type name in doc sample
Issue: SPR-15863
2017-08-15 14:44:22 +02:00
Sebastien Deleuze 3f4ec37262 Upgrade to Kotlin 1.1.4
Issue: SPR-15814
2017-08-15 10:12:34 +02:00
Rossen Stoyanchev 280c64ba35 Polish 2017-08-14 18:55:39 +03:00
Rossen Stoyanchev 8c4b1ab781 Functional PathPattern comparator 2017-08-14 16:33:39 +03:00
Sebastien Deleuze ef175d7ca6 Fix BeanUtils#instantiateClass w/ Kotlin + noarg constructor
Issue: SPR-15851
2017-08-14 15:14:02 +02:00
Sebastien Deleuze f57e5584af Add a reference to KT-18833 in JDK 9 ignored tests 2017-08-14 11:47:08 +02:00
Sebastien Deleuze 0bdd246763 Upgrade to Kotlin 1.1.4-eap-77
This commit also fixes compilation with JDK9 since
KT-18832 has been fixed.

Issue: SPR-15814
2017-08-14 11:26:38 +02:00
Rossen Stoyanchev 631b546d1c Proper null handling in PathPattern comparator 2017-08-14 11:45:27 +03:00
Juergen Hoeller adeb521ce4 Polishing 2017-08-08 17:27:28 +02:00
Juergen Hoeller 09f5c71374 Consistent nullability for BeanDefinitionBuilder setters
Issue: SPR-15841
2017-08-08 17:26:45 +02:00
Juergen Hoeller de09f8ca1f Support for Bean Validation 2.0 container elements (with BV 2.0 test setup)
Includes latest dependency updates (Hibernate Validator 6.0.1, Caffeine 2.5.4, Netty 4.1.14, Tomcat 8.5.19, Johnzon 1.1.2, JsonPath 2.4, Jython 2.7.1)

Issue: SPR-15839
Issue: SPR-15808
2017-08-08 17:26:30 +02:00
Juergen Hoeller 48f95e9b96 Upgrade to Gradle 4.1
Issue: SPR-15667
2017-08-08 17:26:21 +02:00
Stephane Maldini 2677bab560 Use Bismut-BUILD-SNAPSHOT
Sync 3.1.0.BUILD-SNAPSHOT changes to Operators.checkRequest (removed)
2017-08-03 14:30:08 -07:00
Sam Brannen c4f7ff04dc Polish JavaDoc for the SpringExtension 2017-08-03 23:26:38 +03:00
Sam Brannen da8d50f91f Revise SpringExtension based on recent changes in JUnit Jupiter
This commit revises the implementation of the SpringExtension to use
the getRequired*() methods in the ExtensionContext which are now built
into JUnit Jupiter thanks to inspiration from the initial "convenience"
methods implemented here.
2017-08-03 23:19:57 +03:00
Juergen Hoeller fabc9c28d7 Align new FileSystemUtils NIO implementation with original behavior
Issue: SPR-15845
Issue: SPR-15846
2017-08-03 14:21:00 +02:00
Rossen Stoyanchev 08dfce2cb5 Dedicated specificity comparator in PathPattern
The PathPattern compareTo method is now consistent with equals when
two patterns are of the same specificity but otherwise different.

Separately PathPattern now exposes a Comparator by specificity that
offers the current functionality of compareTo. This can be used for
actual sorting where we only care about specificity.
2017-08-02 18:11:36 +02:00
Rossen Stoyanchev 62fa20fd6f PathPattern#matchAndExtract minor refactoring
Consistent behavior with matches(PathContainer), the two had slightly
different logic for handling of empty paths.

Make matchAndExtract independantly usable without the need to call
matches(PathContainer) first. Essentially no longer raising ISE if the
pattern doesn't match but simply returning null.
2017-08-02 16:31:06 +02:00
Rossen Stoyanchev dccedd5ad5 Minor refactoring in PathPattern
Rename getPathRemaining to matchStartOfPath since the method does
match and to be more clear about what the method and the return value
intuitively follows.

Remove matchStart which matches the start of the pattern (rather than
the start of the path). It is a use case that does not come up in
request mapping.
2017-08-02 15:05:28 +02:00
Rossen Stoyanchev c060f4f615 Polish PathPattern and parser
Updates to Javadoc
Consistent and separator type neutral naming for trailing slash
PathPattern extracts options from the parser instance
2017-08-02 14:21:16 +02:00
Arjen Poutsma 5394cc0c63 WebClientException should allow access to status code of the response
This commit changes the WebClient so that it now throws a
`WebClientResponseException` for `ResponseSpec.bodyTo`. This newly
introduces exception contains the status code, headers, and body of the
response message.

As a consequence of the above, we had to change `onStatus` so that the
`exceptionFunction` now returns a `Mono<Throwable>` rather than a
`Throwable`, which it was before. The Mono allows for asynchronous
operations, such as reading the contents of the body.

Issue: SPR-15824
2017-08-02 10:20:58 +02:00
Rossen Stoyanchev b6d1fd9d22 Minor refactoring in PathPatternParser
Remove the separator constructor argument (but preserve internal
functionality) now that PathPatternParser is more explicitly purposed
for URL paths and in any case the use of an alternate separator would
also requires a similar input option on the PathContainer parsing side.
2017-08-01 22:52:18 +02:00
Rossen Stoyanchev 1794f1cea4 Polish path pattern parsing javadoc
Emphasize specific purpose for URL path matching.
2017-08-01 22:31:21 +02:00
Rossen Stoyanchev b1440b6816 Remove ParsingPathMatcher
Now that we also have RequestPath and PathContainer with the latter as
the required input, the ParsingPathMatcher adapter can be removed.
2017-08-01 13:35:21 +02:00
Rossen Stoyanchev 4fc0ce1206 Properly detect null value params in params conditions
Issue: SPR-15831
2017-08-01 13:01:09 +02:00
Juergen Hoeller ca0983cd85 Polishing 2017-08-01 12:08:57 +02:00
Juergen Hoeller 697d14a028 Unit tests for transaction annotations on parent interfaces
Issue: SPR-15833
2017-08-01 12:08:21 +02:00
Juergen Hoeller dd2bbcb3ec Leniently handle lambda-defined listeners with ErrorHandler as well
Issue: SPR-15838
2017-08-01 12:06:41 +02:00
Juergen Hoeller 1fbd047003 checkConfigurationClassCandidate explicitly skips factory method definitions
Issue: SPR-14603
2017-08-01 12:05:26 +02:00
Rossen Stoyanchev f813a63fd8 PathContainer parses URL paths only
Collapse non-URL vs URL based path parsing into one essentially
supporting URL paths only.
2017-07-31 22:10:08 +02:00
Rossen Stoyanchev af83d2332a Fix regression in HttpPutFormContentFilter
Re-arrange the checks so that if there is no form parameter, then
immediately and unconditionally delegate to super.getParameterValues().
Or reversely if there is no super.getParameterValues() then return the
form parameter.

So the only remaining case is when combining values present in both.
In that case we'll take both only if a queryString exists.

One extra fix is to not even wrap the request if we did not parse any
form parameters at all which can happen with HttpHiddenMethodFilter.

Issue: SPR-15828, 15835
2017-07-31 17:30:22 +02:00
Juergen Hoeller ce0bce28da Upgrade to JUnit 5.0 RC2
Issue: SPR-15737
2017-07-31 11:11:38 +02:00
Stephane Nicoll 1a9cfefcbb Fix test failure
Issue: SPR-15548
Closes gh-1488
2017-07-31 10:45:18 +02:00
Stephane Nicoll 48f18e9a47 Merge pull request #1488 from eddumelendez:jackson_2.9.0
* pr/1488:
  Upgrade to Jackson 2.9.0
2017-07-31 09:37:56 +02:00
Eddú Meléndez b2345d67db Upgrade to Jackson 2.9.0
Issue: SPR-15548
Closes gh-1488
2017-07-31 09:37:29 +02:00
Rossen Stoyanchev e45733e790 Update overview.adoc 2017-07-28 17:20:19 +02:00
Rossen Stoyanchev d37498c354 Update overview.adoc 2017-07-28 16:37:49 +02:00
Rossen Stoyanchev a48a47bbd0 Merge pull request #1487 from Buzzardo/master
New overview
2017-07-28 16:18:34 +02:00
Jay Bryant 4872084079 New overview
We have written a replacement for the current overview, as the beginning of a larger documentation effort.
2017-07-28 08:38:38 -05:00
Arjen Poutsma 0b3ea405ab Remove BodyInserters.fromServerSentEvent variants
Removed superfluous `fromServerSentEvent` variants from `BodyInserters`,
as their functionality can also be obtained by passing a stream of
strings or POJOs (to be encoded as JSON) to
`fromPublisher(Publisher, Class)}`, and specifying a `text/event-stream`
Content-Type.

Issue: SPR-15826
2017-07-28 12:37:19 +02:00
Rossen Stoyanchev dbe25cf717 Add RequestPath tests for modifying the contextPath 2017-07-28 12:26:34 +02:00
Rossen Stoyanchev 6855a85c41 Move RequestPath to parent server package 2017-07-28 12:26:34 +02:00
Sam Brannen 4630e62c20 Fix formatting 2017-07-28 12:25:05 +02:00
Sam Brannen 859da2f074 Clean up warnings in spring-test 2017-07-28 12:24:53 +02:00
Sebastien Deleuze 6583f9f754 Use ParameterizedTypeReference instead of Class in Kotlin extensions
This commit also removes WebFlux non-extension functions in favor of
regular Kotlin extensions leveraging ParameterizedTypeReference parameter.

Issue: SPR-15818
2017-07-28 00:22:00 +02:00
Arjen Poutsma 1d86c9c3d1 Use Credentials object instead of 2 attributes for Basic Authentication
This commit changes the usage of two separate attributes (username and
password) into one: a single `Credentials` object.
Additionally, the attributes key under which the credentials are stored
is changed to be specific to Basic Authentication, in order to allow for
other sorts of authentication later.

Issue: SPR-15764
2017-07-27 16:09:09 +02:00
Juergen Hoeller 26de6268aa Polishing 2017-07-27 16:06:56 +02:00
Juergen Hoeller fac83b2e7c Consistent logging in Environment and PropertySource implementations
Issue: SPR-15825
2017-07-27 16:02:18 +02:00
Sebastien Deleuze 3cef5a1294 Add RouterFunctions#toWebHandler(RouterFunction<?>) 2017-07-27 15:25:35 +02:00
Arjen Poutsma eb435f5947 Add ParameterizedTypeReference method variants to ServerRequest/ServerResponse
This commit changes adds overloaded `ParameterizedTypeReference `
variants to body-related methods in `ServerRequest` and
`ServerResponse`.
It also adds a single PTR variant to ClientRequest, which was missing
before.

Issue: SPR-15817
2017-07-27 13:38:35 +02:00
Juergen Hoeller c5fc400534 (AnnotationAware)OrderComparator supports null values again
Issue: SPR-15823
2017-07-27 11:39:05 +02:00
Juergen Hoeller 25e6a2da64 StompSubProtocolHandler consistently accesses current user
Issue: SPR-15822
2017-07-27 11:32:32 +02:00
Arjen Poutsma f3975776d4 Use list of HttpMessage[Reader|Writer]s instead of CodecConfigurer
This commit changes all consumers of CodecConfigurer to consume a `List`
of HttpMessageReaders or HttpMessageWriters instead of consuming the
Server- or ClientCodecConfigurer directly.

Issue: SPR-15816
2017-07-26 17:48:36 +02:00
Sebastien Deleuze 1e07468d20 Prevent warning about final private methods in CglibAopProxy
Issue: SPR-15820
2017-07-26 15:57:57 +02:00
Arjen Poutsma d5da823482 Fix race condition for AsynchronousFileChannel
This commit fixes an issue in the DataBufferUtils.write variant that
takes a AsynchronousFileChannel.

Issue: SPR-15798
2017-07-26 14:10:48 +02:00
Juergen Hoeller d904e9ed50 Latest dependency updates (RxJava 2.1.2, Rome 1.7.4, JRuby 9.1.12) 2017-07-25 14:12:57 +02:00
Juergen Hoeller af93503a09 TemplateAwareExpressionParser treats null as non-template ParserContext
Issue: SPR-15810
2017-07-25 14:12:41 +02:00
Rossen Stoyanchev 45e714ec13 Add test case for SPR-15719 2017-07-25 12:29:44 +02:00
Rossen Stoyanchev d20e5fcc59 Polish 2017-07-25 12:29:44 +02:00
Sebastien Deleuze 29c112c010 Avoid requiring it parameter in Kotlin bean DSL
By using function literals with receiver, we can avoid requiring
lambda parameters for a shorter and nicer syntax. Based on a
proposal from Joseph Taylor.

Issue: SPR-15815
2017-07-25 11:21:08 +02:00
Rossen Stoyanchev d7a7b08b08 Find the last plus for suffix MediaType
Issue: SPR-15795
2017-07-25 10:45:59 +02:00
Rossen Stoyanchev 7e232f989b Improve check for "Broken pipe" error message
Issue: SPR-15802
2017-07-25 10:30:11 +02:00
Sebastien Deleuze ed6fe2b723 Upgrade to Kotlin 1.1.4-eap-33
Issue: SPR-15814
2017-07-24 17:29:02 +02:00
Rossen Stoyanchev 14ccb38523 Handle nested w/o top-level array in Jackson2JsonTokenizer
Issue: SPR-15803
2017-07-21 13:43:38 +02:00
Rossen Stoyanchev bd0de7086e Jackson2JsonTokenizer unwraps top level array only
When the input stream is a JSON array the tokenizer skips over the
start and end array tokens in order to decode into an array of
top-level objects. However in this mode it also skips over nested
start and end array tokens which prevents proper parsing of JSR-310
dates (represented with an array syntax) as well as any fields that
are collections.

Issue: SPR-15803
2017-07-21 12:41:20 +02:00
Rossen Stoyanchev c3e3df57f8 Polish 2017-07-21 12:08:06 +02:00
Rossen Stoyanchev 3009e29489 Remove contentDispositionFormData with charset method
The method was orginally added under SPR-14547 but the example in it
was probably intended for use with Content-Disposition server response
header (file dowonload) and not for a Content-Disposition header
within the body of a multipart request.

In a Spring application a multipart request is typically serialized
by the FormHttpMessageConverter and hence the Content-Disposition is
not explicitly set by the application.

Issue: SPR-15205
2017-07-20 17:49:59 +02:00
Sebastien Deleuze d8a80fc0db Rename RouterFunction Kotlin DSL files 2017-07-20 16:05:00 +02:00
Sebastien Deleuze 0720f9e978 Fix an eventual IndexOutOfBoundsException in RequestPredicates 2017-07-20 16:05:00 +02:00
Brian Clozel f1abcba4eb Support ipV6 Host addresses in HttpHeaders
This commit parses the "Host" HTTP request header as an
`InetSocketAddress`, while supporting IPv6 addresses like `[::1]`.

This host string contains `:` chars even though it has no port
information.

Issue: SPR-15799
2017-07-20 15:21:46 +02:00
Rossen Stoyanchev bb684ce60b Improve decoding support for multipart filename
StandardMultipartHttpServletRequest now properly decodes RFC-5987
encoded filenames (i.e. filename*) by delegating to ContentDisposition
and also support RFC-2047 syntax through javax.mail MimeUtility.

Issue: SPR-15205
2017-07-20 14:26:20 +02:00
Sebastien Deleuze 2437500cfe Ignore DataBufferUtilsTests#writeAsynchronousFileChannel
Issue: SPR-15798
2017-07-20 13:51:13 +02:00
Juergen Hoeller e4651d6b50 XmlEventDecoder uses common defensive XMLInputFactory (now in StaxUtils)
Issue: SPR-15797
2017-07-20 13:17:27 +02:00
Juergen Hoeller 40df7b6eca Polishing
Issue: SPR-15673
2017-07-20 13:16:50 +02:00
Sebastien Deleuze fa4d139684 Support instantiating Kotlin classes with optional parameters
This commit updates BeanUtils class in order to add Kotlin optional
parameters with default values support to the immutable data classes
support introduced by SPR-15199.

Issue: SPR-15673
2017-07-20 10:44:06 +02:00
Brian Clozel 5cac619e23 Fix host+port resolution in ReactorServerHttpRequest
Prior to this commit, the host+port information of the incoming request
where taken from the remoteAddress, which is actually the socket address
of the HTTP client (i.e. not the server).

This commit resolves this information from the "Host" HTTP request
header, if available, or the actual local address of the channel if no
header is available.

Issue: SPR-15084
2017-07-20 01:45:13 +02:00
Juergen Hoeller 6d6d772f31 Polishing 2017-07-20 00:14:56 +02:00
Rossen Stoyanchev 378c72e9b6 Polish + minor refactoring of ResourceUrlProvider 2017-07-19 23:04:39 +02:00
Juergen Hoeller 118d1470fd Ignore (Auto)Closeable for interface-based proxy decisions
Issue: SPR-15779
2017-07-19 22:40:45 +02:00
Juergen Hoeller 13080f04f4 UriUtils.extractFileExtension properly handles all fragments
Issue: SPR-15786
2017-07-19 22:40:24 +02:00
Juergen Hoeller ac1d3b22c9 Polishing 2017-07-19 22:22:27 +02:00
Juergen Hoeller 46eba3dbfa Nullability fine-tuning around declaration inconsistencies
Issue: SPR-15720
Issue: SPR-15792
2017-07-19 22:22:20 +02:00
Rossen Stoyanchev 68e6b148cb Refactor relative redirect filter support
Issue: SPR-15717
2017-07-19 18:46:16 +02:00
Rob Winch fadf04e4b4 Add RelativeRedirectFilter 2017-07-19 17:15:33 +02:00
Rob Winch 5f868b493a Add ForwardedHeaderFilter requestOnly
Add an option for ForwardedHeaderFilter to only process the
HttpServletRequest. This means that HttpServletResponse.sendRedirect will
only work when the application is conifgured to use relative redirects
using Servlet Container specific setup.

Issue: SPR-15717
2017-07-19 17:15:33 +02:00
Rossen Stoyanchev 147368eccc Proactively reject URLs without target address
Issue: SPR-15782
2017-07-19 12:37:32 +02:00
Rossen Stoyanchev cbe5a67687 Polish 2017-07-19 12:37:32 +02:00
Juergen Hoeller 9fc4fb10b0 Nullability fine-tuning around bean properties
Issue: SPR-15720
Issue: SPR-15792
2017-07-19 11:43:58 +02:00
Stephane Nicoll 06fc092be2 Polish 2017-07-19 10:11:06 +02:00
Stephane Nicoll 19c88f2cfa Polish components indexer doc
Issue: SPR-15793
2017-07-19 10:05:09 +02:00
Sebastien Deleuze fb4ddb0746 Make getters and setters null-safety consistent
This commit ensure that null-safety is consistent between
getters and setters in order to be able to provide beans
with properties with a common type when type safety is
taken in account like with Kotlin.

It also add a few missing property level @Nullable
annotations.

Issue: SPR-15792
2017-07-19 09:07:56 +02:00
Sebastien Deleuze ff85726fa9 Fix warnings in Kotlin tests 2017-07-19 08:12:48 +02:00
Sebastien Deleuze e2fd04dff3 Add a [] Kotlin extension for PropertyResolver#getRequiredProperty 2017-07-19 08:12:32 +02:00
Sebastien Deleuze f72e0daa54 Add an env accessor to BeanDefinitionContext
Issue: SPR-15755
2017-07-19 07:57:19 +02:00
Juergen Hoeller c292a89b24 Http(Async)Client not actually nullable, plus MethodInterceptor nullability
Issue: SPR-15720
2017-07-19 00:15:37 +02:00
Sam Brannen 1e66191cbd Upgrade to JUnit Jupiter 5.0 M6
Issue: SPR-15791
2017-07-18 22:21:34 +02:00
Rossen Stoyanchev 43f2de4671 Defensive checks in WebClient and Reactor connector
Since there is no reason for an exchange to ever complete without a
ClientResponse I've added a switchIfEmpty check at the WebClient level.

Also, temporarily a second check closer to the problem in the
ReactorClientHttpConnector suggesting a workaround and providing a
reference to the Reactor Netty issue #138.

Issue: SPR-15784
2017-07-18 18:13:47 +02:00
Rossen Stoyanchev 56903581d9 ResponseEntity declared as Object in WebFlux controller
Issue: SPR-15785
2017-07-18 17:09:24 +02:00
Rossen Stoyanchev 57221ab15c ContentVersionStrategy has non-blocking contract
Issue: SPR-15773
2017-07-18 15:57:49 +02:00
Rossen Stoyanchev efb5ba5a95 Refactor VersionStrategy in WebFlux
Collapse the base interface VersionPathStrategy into its extension
VersionStrategy and then turn the prefix nad fliename based
implementations into abstract base classes (vs delegate strategies).

It is simpler to have one VersionStrategy hierarchy vs that plus a
separate VersionPathStrategy as a delegate. In practice each
VersionStrategy is suited to be prefix or filename based. Also none
of our code cares about the distinction between those two interfaces.
2017-07-18 15:57:49 +02:00
Juergen Hoeller 704d4c34be Upgrade to Reactor Bismuth M3 (and JavaMail 1.6 final)
Issue: SPR-15787
2017-07-18 13:14:07 +02:00
Brian Clozel a06da0019f Remove PathPatternParser from PatternsRequestCondition
Since `PathPattern.combine` now returns another `PathPattern` instance
(it was previously returning a String instance), we can now safely
remove the parser instance included in `PatternsRequestCondition`.

Issue: SPR-15663
2017-07-18 11:40:30 +02:00
Rossen Stoyanchev 7a0e5a378a Update for reactor-core change 2017-07-18 04:09:25 +02:00
Rossen Stoyanchev b0422d02dc Resource transformers use AsynchronousFileChannel
Issue: SPR-15773
2017-07-18 03:58:21 +02:00
Juergen Hoeller bca5a36216 Explicit error message for bean name clash with containing configuration class
Issue: SPR-15775
2017-07-18 00:54:49 +02:00
Juergen Hoeller 12114a9d4c Consistent use of NIO.2 for file read/write interactions
Issue: SPR-15748
2017-07-18 00:54:41 +02:00
Rossen Stoyanchev d56fedc226 Methods for reading a Resource in DataBufferUtils
Currently ResourceEncoder and ResourceRegionEncoder use DataBufferUtils
to read resource with an AsynchronousFileChannel if it is a file or
otherwise fallback on getting the channel from the resource.

The same is now required in other places where a Resource needs to be
read and is also generally useful.

Issue: SPR-15773
2017-07-17 12:25:25 +02:00
Rossen Stoyanchev ee91e52c3a Polish 2017-07-17 11:39:32 +02:00
Rossen Stoyanchev e2ee23bfc5 WebSession supports changeSessionId
Issue: SPR-15571
2017-07-17 11:09:38 +02:00
Rossen Stoyanchev 70252a7335 Add tests for SPR-15777 2017-07-17 08:35:58 +02:00
Rossen Stoyanchev b0fc83ee05 Polish CssLinkResourceTransformer 2017-07-17 08:16:25 +02:00
Rossen Stoyanchev d3749bc1ec Add timeout to DataBufferUtilsTests to avoid hanging 2017-07-14 23:07:48 +02:00
Rossen Stoyanchev 47b63150d1 Refactor DefaultWebSession
Use copy constructor to refresh a session with lastAccessTime and a
save function referencing the current exchange. As a result both fields
are now final and ConfigurableWebSession is no longer needed.
2017-07-14 22:55:56 +02:00
Rossen Stoyanchev bf712957f6 Polish WebSession support code 2017-07-14 22:55:56 +02:00
Arjen Poutsma c802827f0f Change write methods to return Flux<DataBuffer>
This commit changes the write methods to return `Flux<DataBuffer>`
instead of `Mono<Void>`, giving access to the original buffers,
so that they can decided whether the buffers need to be closed or not.

Issue: SPR-15726
2017-07-14 18:55:25 +02:00
Juergen Hoeller efc5b47b9a Polishing 2017-07-14 17:37:06 +02:00
Arjen Poutsma 83051b06b8 Add write methods to DataBufferUtils
This commit adds an overloaded write method to `DataBufferUtils`. There
are three parameter variants: `OutputStream`, `WritableByteChannel`, and
`AsynchronousFileChannel`.

Issue: SPR-15726
2017-07-14 17:13:59 +02:00
Rossen Stoyanchev e37af83459 Improve docs on on use of urlDecode=false
Issue: SPR-15643
2017-07-14 16:52:02 +02:00
Juergen Hoeller 1ad6180019 Expression javadoc alignment 2017-07-14 16:46:22 +02:00
Rossen Stoyanchev f5c54f90b3 Add shortcut to mutate + apply to WebTestClient
Issue: SPR-15770
2017-07-14 16:24:15 +02:00
Juergen Hoeller bcf9f21ecc PropertyOrFieldReference checks cached PropertyAccessor against current EvaluationContext
Issue: SPR-15769
2017-07-14 15:18:05 +02:00
Juergen Hoeller 57f961e36b No nullability declarations in AOP Alliance sources
Issue: SPR-15720
2017-07-14 15:10:20 +02:00
Rossen Stoyanchev 9d04c0424d Allow empty body with no content type in BodyExtractors
Issue: SPR-15758
2017-07-14 14:38:42 +02:00
Rossen Stoyanchev d2c6ea5b1b Polish 2017-07-14 13:23:11 +02:00
Arjen Poutsma 805b7159b0 Add ParameterizedTypeReference variants to bodyTo[Mono|Flux], toEntity[List]
This commit introduces overloaded variants of `bodytoMono`,
`bodyToFlux`, `toEntity`, and `toEntityList` that take a
`ParameterizedTypeReference`. It also adds similar methods to
`WebClient.ResponseSpec`.

Issue: SPR-15725
2017-07-14 13:09:44 +02:00
Rossen Stoyanchev 095cc2283e Replace constant from QueueSupplier with local one 2017-07-13 22:07:19 +02:00
Juergen Hoeller 301e2ea493 Nullability fine-tuning and related polishing
Issue: SPR-15720
2017-07-13 21:20:42 +02:00
Sebastien Deleuze f46520e6e8 Add Jackson Smile support to WebFlux
This binary format more efficient than JSON should be useful for server
to server communication, for example in micro-services use cases.

Issue: SPR-15424
2017-07-13 17:57:07 +02:00
Juergen Hoeller 50493a0f5f Missing abstract declaration on ReflectionTestUtils
Issue: SPR-15757
2017-07-13 13:19:52 +02:00
Juergen Hoeller fd2b4f2427 DefaultListableBeanFactory falls back to empty DLBF instance on deserialization
Issue: SPR-15766
(cherry picked from commit c9ffa64)
2017-07-13 13:19:45 +02:00
Juergen Hoeller 6d7612e052 AbstractTraceInterceptor provides logExceptionStackTrace flag and writeToLog delegates
Issue: SPR-15763
(cherry picked from commit aa0d7a6)
2017-07-13 13:19:40 +02:00
Rossen Stoyanchev ed5cc27f7b Support empty body without content type in WebFlux
Issue: SPR-15758
2017-07-13 11:11:34 +02:00
Rossen Stoyanchev d9eafce266 Polish 2017-07-13 06:10:29 +02:00
Juergen Hoeller 25f3aef1ab Latest dependency updates (Caffeine 2.5.3, Netty 4.1.13, XPP3 1.1.6) 2017-07-12 19:13:21 +02:00
Juergen Hoeller 19a8efc717 Revised assertions and $[invocationTime] support for exceptionMessage
Issue: SPR-15763
2017-07-12 19:13:12 +02:00
Juergen Hoeller 5f767a86f5 Always invoke Jackson serialization with AtomicReference cause
Issue: SPR-15760
2017-07-12 19:13:03 +02:00
Rossen Stoyanchev 8359201a0d Improve write completion handling in ChannelSendOperator
Avoid re-using the WriteBarrier as the Subscription to both the
completionSubscriber and the writeSubscriber.

Instead DownstreamBridge is now called WriteCompletionBarrier and is
both a Subscriber and Subscription, i.e. handles all signals to and
from the completion Subscriber.

This frees the request method implementation in WriteBarrier to assume
it can only be called by the writeSubscriber and hence it's safe to
pass on request signals to the write source outside the synchronized
block.
2017-07-12 18:49:28 +02:00
Arjen Poutsma 6329ccb327 Read-Only HttpHeaders only created when necessary
This commit introduces a boolean `readOnly` flag in `HttpHeaders`,
which is used to check if creating a new `HttpHeaders` instance is
necessary in `readOnlyHttpHeaders`.
2017-07-12 18:13:24 +02:00
Stephane Nicoll 1764f905d8 Merge pull request #1469 from IAMTJW:master
* pr/1469:
  Polish contribution
  Use dedicated addAdvisors
2017-07-12 17:25:02 +02:00
Stephane Nicoll 6e5e5913d7 Polish contribution
Closes gh-1469
2017-07-12 17:24:17 +02:00
tianjunwei 03b409f891 Use dedicated addAdvisors
See gh-1469
2017-07-12 17:22:26 +02:00
Stephane Nicoll e90583fb58 Merge pull request #1465 from hackerwins:fix-typo
* pr/1465:
  Fix typo
2017-07-12 17:15:35 +02:00
Alan Hong fc7e7a3304 Fix typo
closes gh-1465
2017-07-12 17:12:34 +02:00
Sebastien Deleuze 1f011467b8 Introduce Kotlin functional bean definition DSL
As a follow-up of the ApplicationContext Kotlin extensions, close to
the Kotlin functional WebFlux DSL and partially inspired of the
Groovy/Scala bean configuration DSL, this commit introduces a
lightweight Kotlin DSL for functional bean declaration.

It allows declaring beans as following:

beans {
	bean<Foo>()
	profile("bar") {
		bean<Bar>("bar", scope = Scope.PROTOTYPE)
	}
	environment({ it.activeProfiles.contains("baz") }) {
		bean { Baz(it.ref()) }
		bean { Baz(it.ref("bar")) }
	}
}

Advantages compared to Regular ApplicationContext API are:
 - No exposure of low-level ApplicationContext API
 - Focused DSL easier to read, but also easier to write with a fewer
   entries in the auto-complete
 - Declarative syntax instead of functions with verbs like registerBeans
   while still allowing programmatic registration of beans if needed
 - Such DSL is idiomatic in Kotlin
 - No need to have an ApplicationContext instance to write how you
   register your beans since beans { } DSL is conceptually a
   Consumer<GenericApplicationContext>

This DSL effectively replaces ApplicationContext Kotlin extensions as
the recommended way to register beans in a functional way with Kotlin.

Issue: SPR-15755
2017-07-12 16:38:41 +02:00
Arjen Poutsma f4180eb359 Removed faulty test 2017-07-12 15:02:50 +02:00
Arjen Poutsma d6c102d1b8 Add apply method to WebClient.Builder
This commit introduces an apply method to `WebClient.Builder`, allowing
users to make multiple changes to the builder in one consumer.

Issue: SPR-15743
2017-07-12 14:53:06 +02:00
Rossen Stoyanchev 9ac71afbda Fix one failing test and @Ignore another
The failures look like older failures possibly exposed by recent
changes in Reactor.

The one in ViewResolutionResultHandler is very old test error.
The one in Jackson2JsonDecoderTests is more recent but went unreported.
2017-07-12 13:16:51 +02:00
Rossen Stoyanchev 89a5c857ac Fix recently intorduced bug in ChannelSendOperator
WriteBarrier acts as Subscription to both completionSubscriber and
writeSubscriber so the request method needs to be careful not to
pass on the request outside of readyToWrite or writeSubscriber checks.
2017-07-12 12:40:51 +02:00
Rossen Stoyanchev fbcd554f42 Fix method order in ChannelSendOperator
1. Group by contract
2. Follow lifecycle -- Subscriber 1st, Subscription 2nd, Publisher last
3. Order of declaration in implemented contracts
2017-07-12 12:29:38 +02:00
Rossen Stoyanchev 42188020b4 Polish ChannelSendOperator 2017-07-12 12:21:04 +02:00
Stephane Maldini b3a05ebac9 Inline super SubscriberAdapter with ChannelSendOperator
Add support for CoreSubscriber context passing
2017-07-11 13:12:07 -07:00
Rossen Stoyanchev 134ceac58e Set all strategies in CNM factory bean
ContentNegotiationManagerFactoryBean now provides an option to
explicitly set the strategies to use vs customizing a fixed
list of default strategies.

Issue: SPR-11114
2017-07-11 21:00:57 +02:00
Rossen Stoyanchev befacf4a35 ParameterContentNegotiationStrategy uses MediaTypeFactory
Issue: SPR-15649
2017-07-11 17:54:16 +02:00
Arjen Poutsma c9a3b863c4 Move toEntity(List) from WebClient.ResponseSpec to ClientResponse
This commit moves `toEntity(Class<T>)` and `toEntityList(Class<T>)`
from WebClient.ResponseSpec to ClientResponse. The main reason for doing
so is that the newly introduced `onStatus` method (see
2f9bd6e075) does not apply to these two
methods, and the result would be confusing. Also, `ClientResponse` and
`ResponseEntity` represent the same data: status code, headers, and a
body.

Issue: SPR-15724
2017-07-11 17:40:16 +02:00
Arjen Poutsma 51e02c2911 Add status-based error filter
This commit introduces an ExchangeFilterFunction that throws an
exception given a HTTP status predicate.

Issue: SPR-15724
2017-07-11 16:36:47 +02:00
Arjen Poutsma 2f9bd6e075 Add local error handling in WebClient.retrieve
This commit introduces a way to customize the WebClientExceptions, as
thrown by WebClient.ResponseSpec.bodyTo[Mono|Flux]. The first
customization will override the defaults, additional customizations are
simply tried in order.

Issue: SPR-15724
2017-07-11 16:36:40 +02:00
Arjen Poutsma 2ea693bd83 Add ClientRequest.attribute(String)
This commit adds the attribute(String) convenience method to the
ClientRequest class. It also adapts the Basic Authentication filter to
use it.
2017-07-11 15:41:33 +02:00
Arjen Poutsma e11bb17aa6 Change ServerRequest.attribute(String) to return Object
This commit changes `ServerRequest.attribute(String)`` to return
`Optional<Object>` instead of `Optional<T>`, where `T` was infered
from a type parameter.
2017-07-11 15:41:33 +02:00
Rossen Stoyanchev dfcc9af938 Lazy registration in ReactiveAdapterRegistry
Issue: SPR-15747
2017-07-11 13:04:43 +02:00
Rossen Stoyanchev 1d5bd8ef35 Polish 2017-07-11 12:01:44 +02:00
Rossen Stoyanchev eb84547894 Fix MockMvc + HttpPutFormContentFilter issue
Issue: SPR-15753
2017-07-11 11:43:48 +02:00
Rossen Stoyanchev f6e9c47432 Merge PathContainer refactoring changes 2017-07-11 10:58:45 +02:00
Rossen Stoyanchev c93792b8c9 Allow custom separator in PathContainer 2017-07-11 10:56:19 +02:00
Rossen Stoyanchev 0e370e0703 Separate out URL path parsing in PathContainer
PathContainer now has separate parsePath and parseUrlPath methods each
creating PathSegment and UrlPathSegment respectively.
2017-07-11 10:56:19 +02:00
Rossen Stoyanchev 1d201a55db Refine PathContainer.Segment value representation
Segment.value() now returns the actual original path segment value
including path parameters while semicolonContent() is removed.

valueDecoded() is renamed to valueToMatch() to reflect it is the value
for pattern matching which is not only decoded but also has path
parameters removed.
2017-07-11 10:54:42 +02:00
Rossen Stoyanchev 2f17c5f3b6 From static to instance-based PathContainer#subPath 2017-07-11 06:05:36 +02:00
Rossen Stoyanchev 9f7d57f933 Encapsulate choice of URI encoding within RequestPath
Currently the URI path is always treated as UTF-8 so we can eliminate
the encoding parameter from RequestPath#parse.
2017-07-11 06:05:36 +02:00
Juergen Hoeller 122ee3096c Efficient log checks in STOMP encoder/decoder 2017-07-10 20:44:51 +02:00
Juergen Hoeller dd43b6aabe ReflectionTestUtils does not require spring-aop on the classpath
Issue: SPR-15757
2017-07-10 20:43:34 +02:00
Juergen Hoeller 3714e7b044 Deprecate FileSystemUtils
Issue: SPR-15748
2017-07-10 14:25:13 +02:00
Juergen Hoeller 9b5132ce53 LinkedCaseInsensitiveMap exposes its locale for key conversion
Issue: SPR-15752
2017-07-10 14:24:28 +02:00
Rossen Stoyanchev fac35ebec2 Remove PathPatternRegistry 2017-07-10 11:37:18 +02:00
Juergen Hoeller e7b77cb2b6 Drop legacy DisposableBean declaration on AbstractApplicationContext
Issue: SPR-15154
2017-07-07 20:50:35 +02:00
Juergen Hoeller 6d55b3a592 Perform onException delegation outside of connection monitor
Issue: SPR-15738
2017-07-07 20:44:09 +02:00
Rossen Stoyanchev 7d747f9645 Deprecate AsyncRestTemplate methods in MockRestServiceServer 2017-07-07 19:20:36 +02:00
Rossen Stoyanchev 9640cedeae Removing remaining use of PathPattern with String path 2017-07-07 19:20:36 +02:00
Juergen Hoeller 00f4c36d7a Nullability fine-tuning (RequestContext, LocaleResolver)
Includes page-level JSTL time zone support for JSP tags.

Issue: SPR-15720
Issue: SPR-15746
2017-07-07 18:46:19 +02:00
Sam Brannen 4a3ca17d3f Fix imports 2017-07-07 17:23:43 +02:00
Arjen Poutsma 5f2d2b21d9 Avoid required uri when using WebTestClient w/ base url
This commit makes the `uri` step of the WebTestClient optional, so that
users who have specified a base URL during WebClient config do not need
to provide an empty one (i.e. `url("")`).

Issue: SPR-15695
2017-07-07 17:07:15 +02:00
Arjen Poutsma 3232cb6260 Avoid required uri when using WebClient w/ base url
This commit makes the `uri` step of the WebClient optional, so that
users who have specified a base URL during WebClient config do not need
to provide an empty one (i.e. `url("")`).

The basic idea of this fix is that the HTTP method methods in WebClient
(`get`, `post`, etc.) should be able to "bypass" the uri stage, and skip
straight to defining headers, or even doing an exchange or retrieve
(i.e. call methods on `RequestHeaderSpec` or `RequestBodySpec`).

I have accomplished this by adding two new composed interfaces:
`RequestHeadersUriSpec` and `RequestBodyUriSpec`.
`RequestHeadersUriSpec` extends from the existing `UriSpec` and
`RequestHeaderSpec`, while `RequestBodyUriSpec` extends from `UriSpec`
and `RequestBodySpec`. These types are returned from the HTTP methods
(`get`, `post` etc). The `uri` methods on these types return a plain
`RequestHeaderSpec` and `RequestBodySpec` (i.e. types without the `uri`
methods), so that you can call `uri` once only.

Issue: SPR-15695
2017-07-07 17:07:15 +02:00
Sam Brannen 1c07369406 Verify interoperability w/ JUnit Jupiter's @ParameterizedTest in TCF
This commit introduces integration tests which verify that the
SpringExtension can be used in conjunction with JUnit Jupiter's
@ParameterizedTest support.
2017-07-07 16:52:37 +02:00
Sam Brannen 2b03507894 Polishing wording regarding JUnit Platform and JUnit Jupiter 2017-07-07 16:52:37 +02:00
Sam Brannen ad5f85f8d3 Clean up deprecation warnings in spring-test 2017-07-07 15:41:02 +02:00
Arjen Poutsma e458862849 Reflect recent Reactor changes 2017-07-07 15:24:15 +02:00
Rossen Stoyanchev e0de7754cc Polish 2017-07-07 09:44:02 +02:00
Renato Soppelsa 3dd6069578 Add UTF8 problem+json media type constant
Issue: SPR-15742
2017-07-07 09:42:50 +02:00
Rossen Stoyanchev aad4916cac WiretapConnector removes exchanges
Issue: SPR-15744
2017-07-06 23:01:01 +02:00
Rossen Stoyanchev 4e95378fc6 Remove unused imports 2017-07-06 15:28:32 +02:00
Rossen Stoyanchev 5f9f323b12 Add logging to randomly failing websocket test 2017-07-06 15:07:41 +02:00
Rossen Stoyanchev acd6b9df06 Fix failing test
Explicitly pass the client-side JSR-356 WebSocketContainer to the
TomcatWebSocketClient to prevent the ContainerProvider from finding
the one from undertow-websockets-jsr through the ServiceLoader API.
2017-07-06 14:32:46 +02:00
Arjen Poutsma b0ab84657b Disable "failOnServerError" in ReactorClientHttpRequest
This commit disables the "failOnServerError" feature on the
`HttpClientRequest`, as wrapped by ReactorClientHttpRequest. 5xx errors
are supposed to be dealt with in the WebClient, not in the lower-level
components.

Issue: SPR-15739
2017-07-06 13:37:21 +02:00
Arjen Poutsma 0065bc5ee5 Support null query param values in ServerRequest.queryParam(String)
Issue: SPR-15740
2017-07-06 12:10:55 +02:00
Arjen Poutsma 625855c00f Add comment indicating path segment combining in UriComponents.normalize
Issue: SPR-15734
2017-07-06 11:45:13 +02:00
Juergen Hoeller 398322139a StringUtils.uncapitalize is not actually nullable
Issue: SPR-15540
2017-07-05 17:56:37 +02:00
Juergen Hoeller 59c26f65ba AbstractValueAdaptingCache subclasses may reuse NullValue.INSTANCE
Issue: SPR-15693
2017-07-05 17:55:11 +02:00
Arjen Poutsma 74b4c02881 Add ClientRequest attributes
This commit introduces client-side request attributes, similar to those
found on the server-side. The attributes can be used, for instance, for
passing on request-specific information to a globally registered
ExchangeFilterFunction.

The client request builder, as well as WebClient.RequestHeadersSpec and
WebTestClient.RequestHeaderSpec, add methods for adding a single
attribute, as well as manipulating the entire attributes map.

The client request itself adds a accessor for the (immutable) attributes
map.

This commit also introduces a new variant of the basic authentication
filter in ExchangeFilterFunctions. This variant takes the username and
password from well-known attributes.

Issue: SPR-15691
2017-07-05 14:52:38 +02:00
Juergen Hoeller eb928ce456 Reliably detect event listener conditions on proxied beans
Issue: SPR-15678
2017-07-05 13:41:56 +02:00
Juergen Hoeller a6d616d844 Exception handler methods may receive original as well as cause
Issue: SPR-15701
2017-07-05 13:39:30 +02:00
Juergen Hoeller 45d376b6af Polishing 2017-07-05 10:55:30 +02:00
Juergen Hoeller 1306bb9982 Declare spring-context as optional in web, webflux, messaging, jms
Issue: SPR-15733
2017-07-05 10:55:16 +02:00
Juergen Hoeller e35b63f813 Latest dependency updates (Kotlin 1.1.3-2, Undertow 1.4.18, JsonPath 2.3) 2017-07-05 00:19:38 +02:00
Juergen Hoeller 6c0ae1ec9b Clarified role of postProcessAfterInstantiation
Issue: SPR-15732
2017-07-05 00:01:38 +02:00
Sam Brannen 75a71accea Upgrade to JUnit Jupiter 5.0 M5
Issue: SPR-15728
2017-07-04 22:21:13 +02:00
Brian Clozel 9c93521512 Leverage PathPatternParser in CORS configuration source
Previously `UrlBasedCorsConfigurationSource` was relying on
`PathMatcher` implementations for matching incoming request lookup paths
with the configured path patterns for CORS configuration.

This commit replaces the use of `PathMatcher` with a `PathPatternParser`
that parses the string patterns into `PathPattenr` instances and allows
for faster matching against lookup paths.

Issue: SPR-15688
2017-07-04 16:01:18 +02:00
Violeta Georgieva fd1859c34c Adapt to the changes in Reactor Netty ClientOptions
ClientOptions/HttpClientOptions are now created via Builder
2017-07-04 15:26:29 +02:00
Rossen Stoyanchev f7478446b7 Improve Object return type support in WebFlux
Issue: SPR-15731
2017-07-04 08:19:50 -04:00
Brian Clozel f63b0d720e Update WebFlux reference documentation
Note that WebFlux and WebFlux.fn can be both used at the same time
thanks to the handler mapping registration in `@EnableWebFlux`.

Fixing typos in the reference documentation for outdated Reactor
operators.
2017-07-04 13:47:05 +02:00
Brian Clozel baaa84e90f Include port info in HTTP headers for Netty client
This commit adds the port information in the "Host" HTTP request header
for the Netty-based HTTP client.

Issue: SPR-15706
2017-07-04 12:13:06 +02:00
Sebastien Deleuze 7a171c6ae9 Fix Kotlin return types to match @Nullable annotations 2017-07-04 11:27:54 +02:00
Arjen Poutsma de9196bbdc Change from flatMap to map
Changed main tokenbuffer decoding loop from using flatMap to using map.
2017-07-04 10:51:43 +02:00
Brian Clozel 839b6c18d4 Optimize Flux pipeline in ClientHttpRequest 2017-07-04 10:11:56 +02:00
Arjen Poutsma f8589d9eca Return MultiValueMap from ServerRequest.queryParams instead of List
This commit changes ServerRequest.queryParams from returning a
List<String> given a String name, to returning a
MultiValueMap<String, String>, which gives more flexibility.
2017-07-03 16:23:33 +02:00
Arjen Poutsma 2ccbc55ffd Use PathContainer in web.reactive.function.server
This commit uses the newly introduced `PathContainer` and `RequestPath`
support in the functional web framework. It exposes the path container
as property in `ServerRequest`, and uses that in the path-based
`RequestPredicates`.
2017-07-03 13:36:30 +02:00
Sebastien Deleuze 727ca4514a Stream custom types in Jackson2JsonEncoder
Issue: SPR-15727
2017-07-03 10:25:59 +02:00
Sebastien Deleuze 9901c38f9d Improve logging of DefaultCorsProcessor for rejected headers
Issue: SPR-15708
2017-07-03 09:47:43 +02:00
Sebastien Deleuze 1fa8410995 Leverage RFC_1123_DATE_TIME formatter in tests
Issue: SPR-15661
2017-07-02 22:33:43 +02:00
Sam Brannen f790337880 Clean up warnings in spring-test 2017-07-02 21:28:39 +02:00
Rossen Stoyanchev 9528c3532d Fix typo 2017-07-01 21:07:08 -04:00
Rossen Stoyanchev 15cf9c1d78 Switch to ContainerPath variants in HandlerMapping's 2017-07-01 20:05:17 -04:00
Rossen Stoyanchev 145eab9c2f Remove PathMatchResultComparator
Follow-up change to the previous commit.
2017-07-01 17:27:54 -04:00
Rossen Stoyanchev a5e54788cc Remove PathPatternComparator
Direct comparison of a pattern (as a String) to the path does not make
much sense now that we deal with URL encoding through PathContainer
which exposes (safely) decoded path segments.

Removing the PathPatternComparator also means we can keep patterns
pre-sorted instead of sorting them all the time. That probably offsets
any benefits from comparing to the lookup path for direct matches and
patterns are still sorted according to specificity.
2017-06-30 18:19:35 -04:00
Rossen Stoyanchev 850083ca6c Polish 2017-06-30 18:19:35 -04:00
Rossen Stoyanchev 8581afa621 WebFlux compiles after PathPattern/Container changes 2017-06-30 18:19:35 -04:00
Andy Clement 26448a0ebc Rework matching to use PathContainer 2017-06-30 18:19:35 -04:00
Rossen Stoyanchev fc3fcf05fd Refactor PathSegmentContainer -> PathContainer
The new PathContainer represent the path as a series of elements
including separators. This naturally represents leading/trailing
slashes and empty path segments which in turn makes it easier to match
in PathPattern as well as to reconstruct the path.
2017-06-30 18:19:35 -04:00
Juergen Hoeller 6534359473 FactoryBean object cache cleared on shutdown
Issue: SPR-15722
2017-06-30 20:57:15 +02:00
Juergen Hoeller 9afce23845 WebSocketSession.getUri() may return null
Issue: SPR-15721
2017-06-30 20:56:21 +02:00
Arjen Poutsma 930f0f1760 Add ServerRequest.cookies()
This commit introduces a cookies() method on ServerRequest, returning a
MultiValueMap<String, HttpCookie>.

Issue: SPR-15715
2017-06-30 16:31:37 +02:00
Arjen Poutsma 621df7c978 Add ByteBuf leak detection @Rule
This commit introduces a JUnit rule that detects ByteBuf leaks in
subclasses of AbstractDataBufferAllocatingTestCase.
2017-06-30 10:52:00 +02:00
Juergen Hoeller b33d8c6ade Merge pull request #1467 from violetagg/deferred-result-handle-error
Polish - the flag continueProcessing is not needed
2017-06-30 10:33:39 +02:00
Violeta Georgieva 5f020d1ee7 Polish - the flag continueProcessing is not needed 2017-06-30 09:59:32 +03:00
Juergen Hoeller 5f4d1a4628 CronSequenceGenerator.isValidExpression actually validates cron fields
Issue: SPR-15604
2017-06-30 01:54:32 +02:00
Juergen Hoeller cc74a2891a @Nullable all the way: null-safety at field level
This commits extends nullability declarations to the field level, formalizing the interaction between methods and their underlying fields and therefore avoiding any nullability mismatch.

Issue: SPR-15720
2017-06-30 01:54:16 +02:00
Juergen Hoeller c4694c3f5c WebAsyncManager defensively ignores attribute type mismatch
Issue: SPR-15709
2017-06-30 01:53:30 +02:00
Juergen Hoeller af69c5b6a9 Upgrade to AspectJ 1.9 beta 6
Issue: SPR-15686
2017-06-30 01:53:22 +02:00
Rossen Stoyanchev 8f4eb23540 Remove use of Optional in SyncHandlerMethodArgumentResolver
... and a couple more protected methods in WebFlux

Issue: SPR-15718
2017-06-29 17:19:48 -04:00
Rossen Stoyanchev 7de6cfa1df Refactor WebSession#getAttribute options
Issue: SPR-15718
2017-06-29 15:23:36 -04:00
Rossen Stoyanchev 9253facf02 Refactor ServerWebExchange#getAttribute options
Issue: SPR-15718
2017-06-29 14:55:30 -04:00
Stephane Maldini cd643704ad Update to reactor core 3.1.0.B-S with context update for monoSendOperator
Explicit typing for older jvm compilation in BodyExtractor
2017-06-29 10:47:28 -07:00
Rossen Stoyanchev 67330dfc23 Expose mapped handler as an exchange attribute
Issue: SPR-15564
2017-06-29 13:18:39 -04:00
Arjen Poutsma 58a5e7f17b Proper closing of resources
This commit introduces a `doFinally` block that properly signals the
end of input for the non-blocking XML and JSON parsers.
2017-06-29 16:48:53 +02:00
Arjen Poutsma 9d7b8503d0 Delay DataBuffer release until stream is closed
This commit changes the release of data buffers from a finally block
into a `doFinally()` lambda on the returned `Flux<XMLEvent>` stream.

Issue: SPR-15707
2017-06-29 16:19:03 +02:00
Stephane Nicoll b1f06fddd2 Polish
Issue: SPR-14528
2017-06-29 10:26:50 +02:00
Arjen Poutsma 33f99910dd Change spaces to tabs in build.gradle 2017-06-28 16:41:26 +02:00
Arjen Poutsma 31e0e53750 Leverage Jackson non-blocking parser
This commit introduces the Jackson2Tokenizer as a replacement for the
JsonObjectDecoder. The latter was dropped because of its complexity, and
hard dependency on Netty's ByteBuf.

The new Jackson2Tokenizer leverages the new non-blocking JSON parser,
using it to parse the incoming data buffers into TokenBuffers, each
token buffer representing one JSON object. As with JsonObjectDecoder,
it also supports streaming individual JSON array elements.

Issue: SPR-14528
2017-06-28 16:19:01 +02:00
Arjen Poutsma b778f94a07 Made ObjectMapper field private with protected accessor 2017-06-28 16:19:01 +02:00
Rossen Stoyanchev 667437e300 Polish 2017-06-27 18:48:45 -04:00
Sebastien Deleuze d728d597f2 Add missing license headers in Kotlin files 2017-06-27 14:39:26 +02:00
Juergen Hoeller 87430f3cd3 ListenableFuture provides CompletableFuture adaptation via completable()
Issue: SPR-15696
2017-06-27 00:43:37 +02:00
Juergen Hoeller 98642c7e29 Consistent ScriptTemplateView locale resolution via request
Issue: SPR-15064
2017-06-26 23:28:49 +02:00
Juergen Hoeller 41eaf03bc8 Compatibility with covariant return type on JDK 9's ByteBuffer
Issue: SPR-15686
2017-06-26 23:22:28 +02:00
Rossen Stoyanchev cea1a0f1ca Polish 2017-06-26 15:51:17 -04:00
Violeta Georgieva 9cb74b1399 Enable suspend/resume on reactive TomcatWebSocketSession 2017-06-26 15:39:02 -04:00
Rossen Stoyanchev 5b8f7f503f Deprecate adapter classes for async interceptors 2017-06-26 15:34:51 -04:00
Rossen Stoyanchev eb0479dee8 Polish 2017-06-26 14:50:11 -04:00
Violeta Georgieva e0678ba583 Add onError callback to DeferredResult
Issue: SPR-15614
2017-06-26 14:12:56 -04:00
Juergen Hoeller 140542e8b1 Polishing 2017-06-26 18:59:17 +02:00
Juergen Hoeller 098ff6f0f8 Compatibility with JDK 9 release candidate build (175)
Includes upgrade to Objenesis 2.6, Gradle 3.5.1, RxJava 2.1.1, JSON Binding API 1.0 final.

Issue: SPR-15686
Issue: SPR-15600
2017-06-26 18:58:59 +02:00
Juergen Hoeller 155a1c6c71 AsyncHandlerInterceptor.afterConcurrentHandlingStarted declared as default method
Issue: SPR-15702
2017-06-26 18:58:39 +02:00
Sebastien Deleuze ba3a12e4cc Use fixed GMT time-zone for WebSession Clock
Issue: SPR-15675
2017-06-26 18:01:21 +02:00
Rossen Stoyanchev 043c0eff4f Same session after mutate for WebTestClient mock server
Issue: SPR-15674
2017-06-23 19:19:14 -04:00
Sebastien Deleuze d57cd37266 Upgrade to Kotlin 1.1.3
This commit also enables Kotlin build with JDK 9 since this new
version supports it.
2017-06-24 01:13:22 +02:00
Rossen Stoyanchev 97390fd939 Polish 2017-06-23 17:05:57 -04:00
Rossen Stoyanchev 12850c5fc4 Fix test failure by using the new cloneBuilder method
The cloneBuilder helps to avoid the issue in the comment of the ticket.
Rather than creating the WebClient to then obtain a fresh builder which
causes connector instantiation, we now use the cloneBuilder

Issue: SPR-15674
2017-06-23 16:22:10 -04:00
Brian Clozel 8ac29c8ce7 Add cloneBuilder method on WebClient.Builder
This commit adds a new `cloneBuilder()` method on `WebClient.Builder`;
we can now reuse the customizations of an existing builder without
sharing its state across several `WebClient` building code paths.

Issue: SPR-15690
2017-06-23 16:16:23 -04:00
Rossen Stoyanchev 8fc3b3bc37 Add WebTestClientConfigurer
Issue: SPR-15674
2017-06-23 14:45:46 -04:00
Rossen Stoyanchev 4db0ce12e1 Add MockServerConfigurer to WebTestClient
Issue: SPR-15674
2017-06-23 10:46:59 -04:00
Rossen Stoyanchev c37c59f578 Consumer methods for WebHttpHandlerBuilder
Replace the more limited List-based methods to add filtes and exception
handlers with Consumer<List<?>> variants.
2017-06-23 07:12:10 -04:00
Rossen Stoyanchev 782c595cf7 Polish 2017-06-22 18:33:27 -04:00
Eko Kurniawan Khannedy ac68cc35c2 Ordered WebMvcConfigurer interceptor registrations
Issue: SPR-15620
2017-06-22 18:33:27 -04:00
Sebastien Deleuze 5c1d8c7c59 Leverage ZonedDateTime in HttpHeaders
This commit introduces 2 new public methods in HttpHeaders in order
to leverage Java 8 ZonedDateTime in addition to the existing long
(with GMT time zone implied) variants:
 - ZonedDateTime getFirstZonedDateTime(String headerName)
 - void setZonedDateTime(String headerName, ZonedDateTime date)

This commit also leverages Java 8 thread-safe DateTimeFormatter for
HttpHeader implementation instead of SimpleDateFormat. As a consequence
of the usage of DateTimeFormatter.RFC_1123_DATE_TIME, HTTP date header
serialization could change slightly for single digit days from for
example "Thu, 01 Jan 1970 00:00:00 GMT" to
"Thu, 1 Jan 1970 00:00:00 GMT".

Issue: SPR-15661
2017-06-23 00:15:51 +02:00
Arjen Poutsma 4f39edc905 Fix initialization issue with headers in DefaultWebClient
This commit fixes a lazy initialization issue in
`headers(Consumer<HttpHeaders>)`.

Issue: SPR-15657
2017-06-21 15:48:48 +02:00
Arjen Poutsma 0a4d3c14db Jackson2JsonDecoder should support empty JSON array
Before this commit, the Jackson2JsonDecoder was not able to decode an
empty JSON array (`[]`). After this commit, it is.

Issue: SPR-15685
2017-06-21 11:14:34 +02:00
Sebastien Deleuze 1e04cdfa7e Add CorsWebFilter
This new WebFilter implementation is designed to allow initial
CORS support when using WebFlux functional API. More high-level
API may be introduced later.

Issue: SPR-15567
2017-06-21 10:50:09 +02:00
Sebastien Deleuze 59e90943e4 Rename CorsProcessor#processRequest to process 2017-06-21 10:50:09 +02:00
Rob Winch f092ae567b Conditionally apply Kotlin if not using JDK 9
Kotlin does not yet work with JDK 9, so we need to disable the Kotlin
plugin if we are using JDK 9.
2017-06-20 14:35:55 -05:00
Juergen Hoeller 03133630cb Missing @Nullable annotations in WebFlux, in particular around locale resolution
Issue: SPR-15036
Issue: SPR-15540
2017-06-20 18:08:42 +02:00
Arjen Poutsma a95cf07317 Add WebTestClient.mutate()
This commit introduces a WebTestClient.mutate() method,
returning a WebTestClient.Builder.

Issue: SPR-15657
2017-06-20 17:11:52 +02:00
Juergen Hoeller 535103cd52 Fine-tune HTTP/RMI Invoker exception handling
Issue: SPR-15684
2017-06-20 16:50:35 +02:00
Juergen Hoeller c244f33f84 Polishing 2017-06-20 16:50:02 +02:00
Arjen Poutsma 3b1d46b3ba Polishing 2017-06-20 16:34:09 +02:00
Arjen Poutsma 50fc8f4e32 Support Void response body type in WebClient
This commit adds support for Void response body types in the WebClient,
both when using `exchange` with a response.bodyToMono(Void.class), as
well as using `retrieve` with `toEntity(Void.class)`.

Issue: SPR-15679
2017-06-20 16:30:37 +02:00
Arjen Poutsma 4a0597d612 Replace WebClient.filter with Builder.filter
This commit replaces the WebClient.filter method with
WebClient.Builder.filter. The reason for this change is that filters
added via WebClient.filter would be applied in the opposite order of
their declaration, due to the compositional nature of the method,
combined with the immutable nature of the WebClient.
WebClient.Builder.filter does keep the order of the filters, as
registered.

Furthermore, this commit introduces a WebClient.mutate() method,
returning a WebClient.Builder. This method allow to add/remove filters
and other defaults from a given WebClient.

Issue: SPR-15657

Add WebClient.Builder.addFilter

Add Consumer-based headers and cookies methods to builders.

Add WebClient.mutate
2017-06-20 14:25:52 +02:00
Brian Clozel 52148a10b7 Consistently use CodecConfigurer for configuration
This commit changes the `ExchangeStrategies` and `HandlerStrategies`
interfaces to consistently use the `CodecConfigurer` (and
sub-interfaces) for configuring codecs on the server and on the client.

Issue: SPR-15682
2017-06-19 18:42:37 +02:00
Juergen Hoeller 018cc45483 Upgrade to Groovy 2.5 beta 1
Includes latest dependency updates (Commons FileUpload 1.3.3, OkHttp 3.8.1, XStream 1.4.10)

Issue: SPR-15407
2017-06-19 12:28:09 +02:00
Stephane Nicoll 0e87a346ac Merge pull request #1461 from freeman0432:master
* pr/1461:
  Fix a missing line of xml fragment
2017-06-17 10:33:28 +02:00
freeman0432 b14df2b6ea Fix a missing line of xml fragment
Closes gh-1461
2017-06-17 10:33:08 +02:00
Sebastien Deleuze a2e555d749 Upgrade to Jackson 2.9.0.pr4
Issue: SPR-15548
2017-06-17 09:37:28 +02:00
Sebastien Deleuze 38db64e0d8 Warn when Jackson + Kotlin are used without jackson-module-kotlin
Issue: SPR-15658
2017-06-17 00:07:59 +02:00
Juergen Hoeller efb735aa99 SimpleRequestExpectationManager properly handles sequential requests with different count
Issue: SPR-15672
2017-06-16 13:32:43 +02:00
Sebastien Deleuze d5f9ad03a7 Support ScriptEngine#eval(String, Bindings) in ScriptTemplateView
Supporting ScriptEngine#eval(String, Bindings) when no render function
is specified allows to support use cases where script templates are
simply evaluating a script expression with an even more simplified
configuration.

This improvement also makes it possible to use script engines that
do not implement Invocable.

Issue: SPR-15115
2017-06-16 10:38:59 +02:00
Juergen Hoeller 7e251274ee Consistent nullability of headers Map and MessagePostProcessor
Issue: SPR-15670
2017-06-15 22:45:06 +02:00
Rossen Stoyanchev 4a21fb27fc Fix root path test and add more test cases 2017-06-15 16:14:12 -04:00
Rossen Stoyanchev 67e482aaf8 Fix ROOT_PATH constant to match recent changes
"/" should be 0 segments, isAbsolute=true, hasTrailingSlash=false
2017-06-15 15:40:32 -04:00
Rossen Stoyanchev ef3e309c12 Adjust timeout in Spring MVC for reactive streaming
Issue: SPR-15669
2017-06-15 13:11:59 -04:00
Rossen Stoyanchev 53e8ebe6a6 Fix failing test (after previous commit) 2017-06-15 11:07:39 -04:00
Rossen Stoyanchev 97917aa57d Add PathSegmentContainer subPath extracting method 2017-06-14 17:44:56 -04:00
Rossen Stoyanchev 1018bf771b Separate DefaultRequestPath/DefaultPathSegmentContainer 2017-06-14 17:44:56 -04:00
Rossen Stoyanchev 97a97f9bba RequestPath improvements
Static parse methods on PathSegmentContainer and PathSegment plus:

isEmpty() on PathSegmentContainer and PathSegment
isAbsolute() and hasTrailingSlash() on PathSegmentContainer
char[] alternative for valueDecoded() on PathSegment
2017-06-14 17:44:56 -04:00
Juergen Hoeller 7b5f96c804 HttpComponentsAsyncClientHttpRequestFactory supports plain HttpAsyncClient as well
Issue: SPR-15664
2017-06-14 17:10:44 +02:00
Juergen Hoeller 137fc48cc2 Polishing 2017-06-13 20:59:26 +02:00
Sebastien Deleuze 04d5a2951c Remove KClass based Kotlin extensions
Issue: SPR-15660
2017-06-13 18:43:59 +02:00
Rob Winch 223315f96b Update to SonarQube 2.5 2017-06-13 09:30:50 -05:00
Stephane Nicoll 5e4e3fbe8b Merge pull request #1459 from diguage:lambda-map
* pr/1459:
  Polish "Refactor iterator of Map with Java8's Map.forEach"
  Refactor iterator of Map with Java8's Map.forEach
2017-06-13 16:06:47 +02:00
Stephane Nicoll 1ab678a2a3 Polish "Refactor iterator of Map with Java8's Map.forEach"
Closes gh-1459
2017-06-13 16:06:20 +02:00
diguage 1ef5f61ab2 Refactor iterator of Map with Java8's Map.forEach
See gh-1459
2017-06-13 16:06:20 +02:00
Arjen Poutsma 7018804e84 ServerRequest.path() should return raw path
After this commit, ServerRequest.path() returns the raw, unencoded path,
as that is expected by the PathPatternParser.
2017-06-13 15:23:46 +02:00
Sebastien Deleuze 97909f2258 Support date properties in Content-Disposition HTTP header
Issue: SPR-15555
2017-06-13 15:17:48 +02:00
Sebastien Deleuze e0e6736bc5 Introduce LocaleContextResolver in WebFlux
This commit introduces LocaleContextResolver interface, which is used
at ServerWebExchange level to resolve Locale, TimeZone and other i18n
related informations.

It follows Spring MVC locale resolution patterns with a few differences:
 - Only LocaleContextResolver is supported since LocaleResolver is less
   flexible
 - Support is implemented in the org.springframework.web.server.i18n
   package of spring-web module rather than in spring-webflux in order
   to be able to leverage it at ServerWebExchange level

2 implementations are provided:
 - FixedLocaleContextResolver
 - AcceptHeaderLocaleContextResolver

It can be configured with both functional or annotation-based APIs.

Issue: SPR-15036
2017-06-13 15:10:18 +02:00
Juergen Hoeller 72a8868f84 FreeMarker macros based on HTML output format (requires FreeMarker 2.3.24+)
Issue: SPR-14740
2017-06-13 14:21:09 +02:00
Juergen Hoeller a0cea9a86f Polishing 2017-06-13 14:20:33 +02:00
Sebastien Deleuze aa28b6cb54 Upgrade to Kotlin 1.1.2-5
Changelog: https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-5
2017-06-13 12:22:52 +02:00
Juergen Hoeller 779deb0fa7 Cleanup of duplicate semicolons
Issue: SPR-15654
2017-06-13 11:38:05 +02:00
Juergen Hoeller 7dd8dc62a5 Fixes for ignored tests after last week's nullability commit
Issue: SPR-15540
2017-06-13 11:37:58 +02:00
Stephane Nicoll 58242f2249 Polish 2017-06-13 10:13:14 +02:00
Stephane Nicoll 40df48fd95 Merge pull request #1454 from diguage:lambda
* pr/1454:
  Polish "Replace relevant code with lambda"
  Replace relevant code with lambda
2017-06-13 10:09:57 +02:00
Stephane Nicoll fc64b8040f Polish "Replace relevant code with lambda"
Closes gh-1454
2017-06-13 09:42:20 +02:00
diguage 4b1478d830 Replace relevant code with lambda
See gh-1454
2017-06-13 08:55:38 +02:00
Juergen Hoeller 738160538e TargetSource.getTarget() is nullable again (for compatibility with MethodInvocation.getThis)
Issue: SPR-15651
2017-06-13 03:11:36 +02:00
Juergen Hoeller 47ec966757 TargetSource.getTarget() is nullable again (for compatibility with MethodInvocation.getThis)
Issue: SPR-15651
2017-06-12 22:54:18 +02:00
Brian Clozel 233c15b80e Add PathPatternRegistry for handler mapping matching
Previously `HandlerMapping` implementation were heavily relying on
`String` path patterns, `PathMatcher` implementations and dedicated maps
for matching incoming request URL to an actual request handler.

This commit adds the `PathPatternRegistry` that holds `PathPattern`
instances and the associated request handler — matching results are then
shared as `PathMatchResult` instances. `AbstractUrlHandlerMapping` will
use this registry directly, but other components dealing with request
matching (like `PatternsRequestCondition`) will directly use ordered
`PathPattern` collections since ordering is important there.

This opens the door for faster request matching and simplifies the
design of this part.

Issue: SPR-15608
2017-06-12 18:53:05 +02:00
Brian Clozel 1f0d107d37 Enable trailing slash matching by default
This commit enables trailing slash matching in `PathPatternParser` by
default - this mirrors the default configuration in `PathMatcher`
implementations in MVC.
2017-06-12 16:17:18 +02:00
Juergen Hoeller 3ae84d6dd8 Consistent support for Charset/StandardCharsets in UriUtils etc
Issue: SPR-15613
2017-06-12 15:51:45 +02:00
Juergen Hoeller 14161d1dbf Protected applyLifecycleMethods in UrlBasedViewResolver
Issue: SPR-15219
2017-06-12 15:48:59 +02:00
Juergen Hoeller 6320976669 Latest dependency updates (H2 1.4.196, Apache JSTL 1.2.5, HtmlUnit 2.27) 2017-06-12 15:27:57 +02:00
Stephane Nicoll aca5eb7393 Merge pull request #1449 from diguage:dev
* pr/1449:
  Polish "Use Map#forEach instead of Map#entrySet#forEach"
  Use Map#forEach instead of Map#entrySet#forEach
2017-06-12 14:37:52 +02:00
Stephane Nicoll 451b419624 Polish "Use Map#forEach instead of Map#entrySet#forEach"
Closes gh-1449
2017-06-12 14:37:33 +02:00
diguage 2efa06237a Use Map#forEach instead of Map#entrySet#forEach
See gh-1449
2017-06-12 14:37:33 +02:00
Arjen Poutsma 424bc75fb1 Remove headers(HttpHeaders)
This commit removes the headers(HttpHeaders) method on ClientRequest and
ServerResponse, in favor of headers(Consumer<HttpHeaders>), which is
more flexible.
2017-06-12 14:14:40 +02:00
Arjen Poutsma 9bf82dc18f Add addAll(MultiValueMap)
This commit introduces a new method for MultiValueMap: addAll, which
adds all values of a given map (cf putAll, which replaces existing
values).
2017-06-12 14:12:12 +02:00
Arjen Poutsma 7085a30382 Improve capacity calculcation in DefaultDataBuffer
This commit improves the capacity calculation for the DefaultDataBuffer,
so that the capacity typically doubles instead of improving by the
minimal required amount.

Issue: SPR-15647
2017-06-12 11:04:19 +02:00
Sebastien Deleuze 3373a3f7ef Add Kotlin extensions for WebTestClient API
Issue: SPR-15622
2017-06-12 10:42:56 +02:00
Stephane Nicoll a665da415a Merge pull request #1450 from diguage:diamond
* pr/1450:
  Use the diamond syntax
2017-06-12 09:19:22 +02:00
diguage c1d44d9a34 Use the diamond syntax
Closes gh-1450
2017-06-12 09:19:06 +02:00
Stephane Nicoll ca1e682dc4 Merge pull request #1451 from diguage:lambda-map
* pr/1451:
  Polish "Refact iterator of Map with Java 8 forEach"
  Refact iterator of Map with Java 8 forEach
2017-06-12 08:58:33 +02:00
Stephane Nicoll 27aabb15f9 Polish "Refact iterator of Map with Java 8 forEach"
Closes gh-1451
2017-06-12 08:53:56 +02:00
diguage dab7a7f0ee Refact iterator of Map with Java 8 forEach
See gh-1451
2017-06-12 08:11:32 +02:00
Stephane Nicoll 5df053c44b Merge pull request #1455 from diguage:editor-config
* pr/1455:
  Add EditorConfig
2017-06-12 08:08:14 +02:00
diguage d33764353e Add EditorConfig
Closes gh-1455
2017-06-12 08:07:54 +02:00
Rossen Stoyanchev 38a12ed4ba Expose RequestPath in ServerHttpRequest
The new structured getPath() method replaces the existing
getContextPath() + getPathWithinApplication().

Issue: SPR-15648
2017-06-11 21:59:24 -04:00
Rossen Stoyanchev 2d17411ec4 Add RequestPath to http/server/reactive
Issue: SPR-15648
2017-06-11 21:59:24 -04:00
Juergen Hoeller e2e0410570 Method-level javadoc on XmlReaderContext etc 2017-06-11 12:03:05 +02:00
Juergen Hoeller f43ea96dd9 Upgrade to Apache Johnzon 1.1.1
Issue: SPR-15590
2017-06-11 12:02:57 +02:00
Rossen Stoyanchev 01a92517bd Refactor RequestedContentTypeResolverBuilder
The revised builder emphasizes creating a list of resolvers either
built-in or custom with each top-level builder method resulting in
adding a resolver.

By default only the Header resolver is configured.

The path extension resolver is removed altogether to discourage its use
but is trivial to create manually with the helpf of
UriUtils#extractFileExtension + MediaTypeFactory.

Issue: SPR-15639
2017-06-09 16:15:38 -04:00
Rossen Stoyanchev b0e8e7f536 Refactor MappingContentTypeResolver implementations
After the removal of suffix pattern matches, there is no longer a need
to expose the list of registered file extensions.

Also polish, refactor, and simplify the abstract base class
AbstractMappingContentTypeResolver and its sub-classes.

Issue: SPR-15639
2017-06-09 16:15:38 -04:00
Rossen Stoyanchev cb604738cf ResourceWebHandler uses MediaTypeFactory directly
There is no need for ResourceWebHandler to go through the
PathExtensionContentTypeResolver when MediaTypeFactory makes it easy to
perform such lookups for a given Resource.

This does not support any extensions explicitly registered through a
WebFluxConfigurer but it would be easy enough to pass those into
ResourceWebHandler as a simple Map<String, MediaType>, should the need
arise.

Issue: SPR-15639
2017-06-09 16:15:38 -04:00
Rossen Stoyanchev b65bfdb979 Remove HttpRequestPathHelper
The use of the undecoded URL path by default and the removal of suffix
pattern matching effectively means HttpRequestPathHelper is no longer
needed.

Issue: SPR-15640, SPR-15639
2017-06-09 16:15:38 -04:00
Rossen Stoyanchev 95196e1aee Use undecoded pathWithinApplication in WebFlux
Introduce pathWithinApplication() in ServerHttpRequest and use it for
request mapping purposes instead of LookupPath.

In turn this means that for request mapping purposes:
1) the path is not decoded
2) suffix pattern matching is not supported

Issue: SPR-15640
2017-06-09 16:15:38 -04:00
Andy Clement ff2af660cf PathPatternParser encodes patterns as it parses them
Before this commit there was no special handling for URL encoding
of the path pattern string coming into the path pattern parser. No
assumptions were made about it being in an encoded form or not.

With this change it is assumed incoming path patterns are not
encoded and as part of parsing the parser builds PathPattern
objects that include encoded elements. For example parsing "/f o"
will create a path pattern of the form "/f%20o". In this form
it can then be used to match against encoded paths.

Handling encoded characters is not trivial and has resulted in
some loss in matching speed but care has been taken to
avoid unnecessary creation of additional heap objects.  When
matching variables the variable values are return in a
decoded form. It is hoped the speed can be recovered, at least
for the common case of non-encoded incoming paths.

Issue: SPR-15640
2017-06-09 13:08:07 -07:00
Juergen Hoeller c0550f7eb6 Documented AbstractBeanFactory nullability warning
Issue: SPR-15540
2017-06-09 20:46:15 +02:00
Juergen Hoeller a1ce3244b0 Latest dependency updates (EclipseLink 2.6.5 RC2, JSON-B 1.0 RC2, Gson 2.8.1, Jetty 9.4.6, Netty 4.1.12) 2017-06-09 20:43:15 +02:00
Rob Winch b1345014b9 Update to Reactor Bismuth-M2
Issue: SPR-15646
2017-06-09 09:49:31 -05:00
Arjen Poutsma 5e954dcba0 Use ParameterizedTypeReference in public-facing WebFlux APIs
This commit changes the use of `ResolvableType` to
`ParameterizedTypeReference` in all public-facing WebFlux APIs. This
change removes the necessity for providing the parameterized type
information twice: once for creating the `ResolvableType`, and once for
specifying a `BodyExtractor`.

Issue: SPR-15636
2017-06-09 13:29:15 +02:00
Sebastien Deleuze b6c09fa76a Disambiguate BodyExtractors/Inserters Kotlin function names 2017-06-09 01:51:28 +03:00
Sebastien Deleuze 86580b2358 Polishing 2017-06-09 01:49:56 +03:00
Sebastien Deleuze 736bf1c502 Fix Kotlin dependencies
Avoid importing Kotlin 1.0.x from Mockito Kotlin and only depends on
kotlin-stdlib instead of kotlin-stdlib-jre8 since we don't use
additional jre7 or jre8 API.
2017-06-09 01:24:47 +03:00
Sebastien Deleuze 8579ae66fc Add comprehensive tests of Kotlin extensions
This commit also removes extensions hidden by Java API (varargs).
2017-06-09 01:01:16 +03:00
Juergen Hoeller fd53d2a51a Consistent use of @Nullable in spring-test
This commit also removes nullability from two common spots: ResolvableType.getType() and TargetSource.getTarget(), both of which are never effectively null with any regular implementation. For such scenarios, a non-null empty type/target is the cleaner contract.

Issue: SPR-15540
2017-06-08 22:52:59 +02:00
Juergen Hoeller ee5fa2633a Protect against null return value from DataSource.getConnection()
Issue: SPR-15641
2017-06-08 22:51:41 +02:00
Arjen Poutsma bf66f45283 Support overriding, removing headers in ClientRequest
This commit adds two Consumer based methods to ClientRequest that allow
for direct manipulation of the underlying headers or cookies map. As
such, these methods can be used to override or remove existing entries.

Issue: SPR-15635
2017-06-08 14:00:39 +02:00
Juergen Hoeller e6f1950952 Missing @Nullable annotations for findAnnotation/getValue/getDefaultValue
Note that synthesizeAnnotation has an assertion now, keeping its non-null policy.

Issue: SPR-15642
2017-06-08 10:35:54 +02:00
Phillip Webb 72cd24446d Make resolvePropertyName available to subclasses
Change `SystemEnvironmentPropertySource.resolvePropertyName` to a
protected final method so that subclasses may call it.

Issue: SPR-15617
2017-06-07 17:03:31 -07:00
Phillip Webb c675424189 Restore AnnotationUtils null argument support
Update AnnotationUtils to restore support for `null` arguments in
certain methods. Some existing upstream projects were relying on this
behavior.

Issue: SPR-15642
2017-06-07 16:59:24 -07:00
Juergen Hoeller 7eaedf2916 Debug-level log entry for any Jackson exception during canConvert
Issue: SPR-15582
2017-06-07 18:33:19 +02:00
Juergen Hoeller 55b0fe1027 Unwrap SpringValidatorAdapter (e.g. CustomValidatorBean) to native Validator
Issue: SPR-15629
(cherry picked from commit 8330134)
2017-06-07 18:33:13 +02:00
Arjen Poutsma 510436bae9 Copy header values instead of header lists in DefaultClientRequestBuilder
This commit changes the `headers(HttpHeaders)` method in
DefaultClientRequestBuilder so that it copies the individual header
values instead of using the `List<String>` value directly. The reason
for this change is that the list of values can be immutable, and adding
additional values after that could result in
UnsupportedOperationExceptions.
2017-06-07 17:55:51 +02:00
Juergen Hoeller a0bce618c2 Latest dependency updates (Undertow 1.4.16, Caffeine 2.5.2, JavaMail 1.6 RC2) 2017-06-07 14:19:58 +02:00
Juergen Hoeller f813712f5b Consistent use of @Nullable across the codebase (even for internals)
Beyond just formally declaring the current behavior, this revision actually enforces non-null behavior in selected signatures now, not tolerating null values anymore when not explicitly documented. It also changes some utility methods with historic null-in/null-out tolerance towards enforced non-null return values, making them a proper citizen in non-null assignments.

Some issues are left as to-do: in particular a thorough revision of spring-test, and a few tests with unclear failures (ignored as "TODO: NULLABLE") to be sorted out in a follow-up commit.

Issue: SPR-15540
2017-06-07 14:19:15 +02:00
Stephane Nicoll ffc3f6d87d Merge pull request #1445 from diguage:dev
* pr/1445:
  Polish "Refactor duplicated code"
  Refactor duplicated code
2017-06-04 13:06:26 +02:00
Stephane Nicoll 6e3a9cbbb4 Polish "Refactor duplicated code"
Closes gh-1445
2017-06-04 13:06:09 +02:00
diguage 5288641c50 Refactor duplicated code
See gh-1445
2017-06-04 13:01:03 +02:00
Stéphane Nicoll a1a6157fb1 Merge pull request #1444 from diguage/dev
Fix reference
2017-06-03 15:20:28 +02:00
diguage eae63786c2 Fixed reference 2017-06-03 15:19:36 +08:00
Andy Clement 77576ed6fe Fix PathPattern comparator result for wildcard suffix usage
Without this change the comparator thinks "/{foo}"
is more specific than "/{foo}.*". The minimal fix here
to address it is to copy what the AntPathMatcher
comparator does which is to consider '.*' as *not*
a usage of a wildcard. See PatternInfo#initCounters()
for the AntPathMatcher handling of this.

This change ensures the PathPattern comparator now produces
the expected result but suffix usage in general needs more
thought at some point.

Issue: SPR-15597
2017-06-02 15:40:16 -07:00
Rossen Stoyanchev 4244df740b Consolidate matrix vars parsing in HttpRequestPathHelper
Restore matrix variable parsing code not resorting to the use of
WebUtils which brings Servlet API dependencies with it.

Instead the parsing logic is now exposed through HttpRequestPathHelper
which already contained the decoding logic and also the knowledge of
whether to decode the parsed variables or not.

Issue: SPR-15397
2017-06-02 15:52:44 -04:00
Rossen Stoyanchev d2685dfe67 Add static factory/accessor methods to LookupPath
Issue: SPR-15397
2017-06-02 15:15:42 -04:00
Rossen Stoyanchev a7020e419a Polish use of LookupPath 2017-06-02 14:46:34 -04:00
Sebastien Deleuze 90df7dd279 Add missing @Nullable annotation
Issue: SPR-15540
2017-06-02 14:16:19 +02:00
Brian Clozel 74fb2645fd Fix LookupPath parsing
Issue: SPR-15397
2017-06-02 09:26:35 +02:00
Rossen Stoyanchev 4d52590964 Improve docs on forwarded headers
Issue: SPR-15612
2017-06-01 22:36:12 -04:00
Rossen Stoyanchev 895fa2ea7b Add removeOnly mode to ForwardedHeaderFilter
Issue: SPR-15610
2017-06-01 15:39:19 -04:00
Brian Clozel cf1bc81199 Introduce LookupPath in WebFlux request routing
This commit adds the `LookupPath` class that contains the full
request path relative to the web context; the application can
get from it various information, including the file extension
and path parameters (if any).

Since that operation is done multiple times for each request, this
object is stored as an attribute at the `ServerWebExchange` level.

Issue: SPR-15397
2017-06-01 18:31:04 +02:00
Brian Clozel 0557404715 Throw exception for illegal PathMatch configurations
With the new `ParsingPathMatcher` implementation, new patterns are now
allowed, such as `"/foo/{*bar}". The `"{*bar}"` segment will capture
everything until the end of the given path. Adding other elements after
that segment is illegal and will throw exceptions.

One can configure on a `PathMatchConfigurer` various options like
`useTrailingSlashMatch` and `useSuffixPatternMatch`; those options, when
enabled, will try to append suffixes like `".*"` and `"/"` to existing
path patterns. In case of a "capture the rest" pattern segment, those
options won't be honored.

This is why this commit ensures that an exception is thrown at the start
of the application if an illegal configuration is applied to the
`PathMatchConfigurer`.

Issue: SPR-15303, SPR-15558
2017-06-01 18:30:18 +02:00
Arjen Poutsma 8ea54270e1 Allow for null query parameter values in ServerRequest
With this commit, ServerRequest allows for `null` values in query
parameters, treating them as empty values instead.

Issue: SPR-15609
2017-06-01 18:00:54 +02:00
Rossen Stoyanchev b93579a43e Polish 2017-06-01 09:28:55 -04:00
Violeta Georgieva e8d2c6c74b AbstractListenerWriteProcessor/AbstractListenerWriteFlushProcessor error handling
When an exception happens while writing/flushing, the exception handling
for Servlet 3.1 based implementation will happen when
WriteListener#onError and AsyncListener#onError events are received
2017-06-01 09:19:45 -04:00
Violeta Georgieva 23a052c160 Clear the buffer provided by Undertow before reading the request
When reading more that once for a given request, the position/limit of
the buffer provided by Undertow should be reset in order to use the
full capacity of the buffer.
2017-06-01 15:14:25 +03:00
Arjen Poutsma 8504084553 Add package-info.java to mock.web.reactive.function.server 2017-06-01 12:37:42 +02:00
Arjen Poutsma 7894efdd1e Allow for null values in ExtractingResponseErrorHandler.hasError
This commit fixes the implementation of
ExtractingResponseErrorHandler.hasError to allow for null values,
indicating an override of the behavior inherited from
DefaultResponseErrorHandler.

Issue: SPR-15544
2017-06-01 11:44:08 +02:00
Rossen Stoyanchev d3e3365990 Merge pull request #1439 from dreis2211/SPR-15602 2017-05-31 22:46:09 -04:00
Rossen Stoyanchev 4a3f6e4546 Polish 2017-05-31 22:43:25 -04:00
Christoph Dreis 0ef1623643 Optimize DefaultUserDestinationResolver.resolveDestination()
Issue: SPR-15602
2017-05-31 22:37:42 -04:00
Kazuki Shimizu 1412c2c577 Fix sample code in WebFlux chapter 2017-05-31 22:05:38 -04:00
QBNemo 94618c4f37 Polish doc on RequestMappingHandlerMapping#isHandler 2017-05-31 21:25:44 -04:00
Rossen Stoyanchev e81651b657 Ignore empty Accept-Language header value
Issue: SPR-15603
2017-05-31 21:10:08 -04:00
Sebastien Deleuze b494c53b40 Avoid defining nullability for non-relevant API
Defining nullability of some API like EnvironmentCapable
or ConditionContext causes issues in Spring Boot because
in the context where they are used, it is known for sure
they will return non-null values even if their API can in
other context return null values.

It is better in this case for both Java and Kotlin to
not define at all the nullabity of such API.

In practice, this is achieved by removing the package level
@NonNullApi annotation and adding it only on the
relevant classes.

Issue: SPR-15540
2017-05-31 22:51:33 +02:00
Sebastien Deleuze 1f28825f9d Add more @Nullable parameters based on null usage
Issue: SPR-15540
2017-05-31 21:42:23 +02:00
Gary Russell f9b319d3ba Revert Incorrect MessagingTemplate Change
The change to "optimize" the template by not rebuilding the reply
message when the original header channels was null was incorrect.

We need to null out those headers if they were originally null.

Issue: SPR-15991
2017-05-31 15:12:46 -04:00
Sebastien Deleuze c3e6afb879 Improve null-safety to fix some Spring Boot warnings
Issue: SPR-15540
2017-05-31 17:14:49 +02:00
Sebastien Deleuze b47d713e14 Add missing @Nullable annotations on parameters
Issue: SPR-15540
2017-05-31 16:56:08 +02:00
Sebastien Deleuze ad2c0f8410 Improve @Nullable annotation
This commit makes Spring @Nullable annotation leveraging
JSR 305 @TypeQualifierNickname + @Nonnull(when= When.MAYBE)
instead of directly using @javax.annotation.Nullable which
seems not designed to be used as a meta-annotation.

It also removes @TypeQualifierDefault since the purpose of
this annotation when applied at method level is to only
change return value nullability, not parameters one.

Issue: SPR-15540
2017-05-31 16:56:08 +02:00
Rossen Stoyanchev abcc4ac979 Fix composability issue in ExchangeMutatorWebFilter
This commit replaces the UnaryOperatory<ServerWebExchange> inputs with
Function<ServerWebExchange, ServerWebExchange> instead. Unfortunately
the composability methods inherited from Function don't work in terms
of generics for composing multiple UnaryOperator's.

Issue: SPR-15599
2017-05-31 09:30:04 -04:00
Gary Russell e06c4d5116 Timeout Overrides in Messaging Templates
Provide a mechanism to override the configured send and receive
timeouts in the GenericMessagingTemplate.

- overload `doReceive()` to take a receive timeout argument
- for `sendAndReceive()` methods examine message headers for these
  timeout values
  - remove headers to avoid propagation
  - avoid the unconditional rebuild of the reply message if the
    original headers weren't present
- also remove headers from simple `send()` operations
- change javadocs for the setters to indicate they are now defaults
- add properties to allow the user to override the header names used
- change `TemporaryReplyChannel` to use `send` arg and change to static
  - add package-protected ctor to avoid the compiler creating a
    synthetic constructor for access

Issue: SPR-15591
2017-05-30 17:03:46 -04:00
Rossen Stoyanchev 5dcfd84d3b MockServerHttpRequest and Response set cookie headers
Issue: SPR-15522
2017-05-30 11:00:15 -04:00
Rossen Stoyanchev 67bcef22e4 Polish MockServerHttpRequest|Response 2017-05-30 11:00:15 -04:00
Arjen Poutsma 4b0dedc45e Add ExtractingResponseErrorHandler
This commit introduces ExtractingResponseErrorHandler: an alternative
ResponseErrorHandler that uses `HttpMessageConverter`s to convert HTTP
error responses to `RestClientException`.

Issue: SPR-15544
2017-05-30 13:17:25 +02:00
Stephane Nicoll beb7ed9715 Polish
Issue: SPR-15592
2017-05-29 17:04:10 +02:00
Arjen Poutsma 42d1ba080d Copy MockServerRequest to spring-test
This commit copies the MockServerRequest to the spring-test module, in
the mock.web.reactive.function.server package.

Issue: SPR-15530
2017-05-29 10:16:55 +02:00
Sam Brannen 76b28a0cec Fix grammatical errors in Testing chapter 2017-05-28 14:28:57 +02:00
Rossen Stoyanchev 1383ad5f91 Reasonable defaults for MultipartHttpMessageWriter
MultipartHttpMessageWriter is now configured to handle JSON and XML
out of the box.
2017-05-27 20:41:07 -04:00
Rossen Stoyanchev 03b344b579 Refactor DefaultCodecs implementation
Simplify the internals of the DefaultCodecs implementation favoring
explicit fields per override vs a generic list of readers and writers
for overrides.
2017-05-27 20:41:07 -04:00
Rossen Stoyanchev 1328c8f46e Simplify CodecConfigurer related type names
Essentially drop "Configurer" suffix from nested interfaces.
2017-05-27 20:41:07 -04:00
Stéphane Nicoll 7efa0db1d1 Merge pull request #1436 from wilkinsona/patch-2
Correct the javadoc for ExchangeResult.getUrl()
2017-05-27 09:01:54 +02:00
Sebastien Deleuze 87598f48e4 Introduce null-safety of Spring Framework API
This commit introduces 2 new @Nullable and @NonNullApi
annotations that leverage JSR 305 (dormant but available via
Findbugs jsr305 dependency and already used by libraries
like OkHttp) meta-annotations to specify explicitly
null-safety of Spring Framework parameters and return values.

In order to avoid adding too much annotations, the
default is set at package level with @NonNullApi and
@Nullable annotations are added when needed at parameter or
return value level. These annotations are intended to be used
on Spring Framework itself but also by other Spring projects.

@Nullable annotations have been introduced based on Javadoc
and search of patterns like "return null;". It is expected that
nullability of Spring Framework API will be polished with
complementary commits.

In practice, this will make the whole Spring Framework API
null-safe for Kotlin projects (when KT-10942 will be fixed)
since Kotlin will be able to leverage these annotations to
know if a parameter or a return value is nullable or not. But
this is also useful for Java developers as well since IntelliJ
IDEA, for example, also understands these annotations to
generate warnings when unsafe nullable usages are detected.

Issue: SPR-15540
2017-05-27 08:57:01 +02:00
Rossen Stoyanchev 2d37c966b2 Support for decoding @RequestPart content
Issue: SPR-15515
2017-05-26 18:03:01 -04:00
Andy Wilkinson bc2e1b375e Correct the javadoc for ExchangeResult.getUrl() 2017-05-26 20:58:53 +01:00
Rossen Stoyanchev be0b671191 Upgrade nio-multipart-parser to 1.1.0
Issue: SPR-15515
2017-05-26 09:19:10 -04:00
Juergen Hoeller e7b41bc30a Use Apache Johnzon 1.1 for JSON-B integration tests
Issue: SPR-15590
2017-05-25 23:37:14 +02:00
Juergen Hoeller 3cc94ae8b5 Consistently accept "taskExecutor" bean of type Executor (as stated in @EnableAsync's javadoc)
Issue: SPR-15566
2017-05-25 23:37:02 +02:00
Rossen Stoyanchev 0287a74d69 ExchangeResult exposes URI template used if any
Issue: SPR-15589
2017-05-25 17:07:50 -04:00
Rossen Stoyanchev fd51893a44 Refactor exchange mutator
As a follow-up to the recent commit 246e72 some slight modifications
to MockServerExchangeMutator (renamed to ExchnageMutatorWebFilter).

Aside from the name change, the main difference is that "per request"
exchange processors are now simply applied via WebTestClient#filter(..).

Issue: SPR-15570
2017-05-25 11:41:28 -04:00
Juergen Hoeller 6fcf3a104f SharedEntityManagerCreator detects JPA 2.2's getResultStream method as query-terminating
This commit also changes "hibval5Version" to the more general "hibvalVersion" build variable, and includes dependency updates to Caffeine 2.5.1 and JRuby 9.1.9.

Issue: SPR-13482
2017-05-25 13:16:51 +02:00
Rossen Stoyanchev 346d5d2fab Refactor WebTestClient consumeWith methods
Issue: SPR-15587
2017-05-24 20:24:54 -04:00
Rossen Stoyanchev 718162b8c4 Fix issue with "redirect:" when a media type is present
Issue: SPR-15291
2017-05-24 16:31:05 -04:00
Andy Clement 109746a03b Adjust source in test class to work around eclipse compiler bug
Issue: SPR-15586
2017-05-24 13:24:24 -07:00
Rossen Stoyanchev 805fcc6a05 ResponseErrorHandler provides access to URI and method
Issue: SPR-15511
2017-05-24 15:34:40 -04:00
Rossen Stoyanchev 9b53b86d24 Check Reactor presence after Undertow for WebSocket
Issue: SPR-15539
2017-05-24 15:05:59 -04:00
Rossen Stoyanchev df8412bded ExceptoinWebSocketHandlerDecorator uses ERROR level
Issue: SPR-15537
2017-05-24 15:00:12 -04:00
Rossen Stoyanchev 204a9cf056 Public constant for webtestclient-request-id header
Issue: SPR-15575
2017-05-24 14:26:52 -04:00
Rossen Stoyanchev 4d4c3d5c0b Replace bindToHttpHandler with bindToWebHandler
This commit replaces the option to bind the WebTestClient to an
HttpHandler to bind to a WebHandler instead.

This allows testing below the WebFlux level such as WebFilter,
WebHandler, or WebSession scenarios, but still a level above
HttpHandler so that WebTestClient is in charge of creating the
ServerWebExchange and expose consistently the
WebTestClient#MockServerSpec setup across all "mock" server bindToXxx
options.

Issue: SPR-15570
2017-05-24 14:03:57 -04:00
Rossen Stoyanchev 246e72ff2f Refactor WebTestClient exchange mutator support
This commit factors ServerWebExchange mutator support out of
WebTestClient in favor of an independent public class called
MockServerExchangeMutator which implements WebFilter and can be
applied to the WebTestClient as any other WebFilter.

The MockServerExchangeMutator also exposes a method to apply
a client-side filter for "per request" mutators. See the Javadoc
of the MockServerExchangeMutator.

Issue: SPR-15570
2017-05-24 14:03:57 -04:00
Arjen Poutsma a5b94f3a77 Use HttpRequest.getMethodValue
This commit uses the newly introduced HttpRequest.getMethodValue in
the webflux module.

Issue: SPR-15545
2017-05-24 17:19:43 +02:00
Arjen Poutsma 630fc194f0 Add HttpRequest.getMethodValue
This commit introduces a new method in HttpRequest:
`String getMethodValue`, which returns the HTTP method as a String.
Furthermore, HttpRequest.getMethod() has been given a default
implementation using this String value in combination with
`HttpMethod.resolve`.

Issue: SPR-15545
2017-05-24 16:36:58 +02:00
Arjen Poutsma 31d1e26c95 Use List<T> instead of Supplier<Stream<T>>
This commit changes all methods that return `Supplier<Stream<T>` to
return `List<T>` instead. This includes the HandlerStrategies, but also
BodyInserter.Context, BodyExtractor.Context, and ServerResponse.Context.

The reason for this change is that most of the strategies have some sort
of order, where more specific message readers - for instance - come
before generic ones. Such an ordering can only be enforced through a
List.

Issue: SPR-15578
2017-05-24 13:48:03 +02:00
Arjen Poutsma 01e3561db9 Support RouterFunction in @EnableWebFlux
This commit removes the RouterFunctions.toHandlerMapping method, in
favor of native support for RouterFunctions in @EnableWebFlux
configuration classes.

In order to accomplish this, the HandlerStrategies components has been
repurposed to only be used for the "bare-bones" HttpHandler, while the
(newly introduced) RouterFunctionMapping uses the strategies as exposed
through WebFluxConfigurationSupport.

Furthermore, this commit also introduces support for testing
RouterFunctions without resorting to an application context.

Issue: SPR-15536
2017-05-24 11:42:15 +02:00
skarafaz 3d290165fb Find exact matches in WebJarsResourceResolver
Prior to this commit, resolving resources from webjars using the
`WebJarAssetLocator.getFullPath` could lead to multiple candidates,
since this method is trying to find *any* resource matching that path
under the given webjar location.

This commit replaces that call with
`WebJarAssetLocator.getFullPathExact`, which avoids those multiple
matches and only resolves resources if the given path is exact.

Issue: SPR-15526
(cherry picked from commit e2aa117ff9)
2017-05-24 10:46:35 +02:00
Rossen Stoyanchev 3f32f72bfc Polish
SPR-15576
2017-05-23 21:57:34 -04:00
Juergen Hoeller 0183576215 Polishing 2017-05-23 22:05:22 +02:00
Juergen Hoeller db69a082d9 Avoid java.util.Optional signatures for simple field access
Issue: SPR-15576
2017-05-23 22:05:15 +02:00
Juergen Hoeller ce5e2b94c4 ProtobufJsonFormatHttpMessageConverter for configurable JSON processing
Issue: SPR-15550
2017-05-23 21:59:23 +02:00
Juergen Hoeller 113f0fb13f Javadoc suggests Jackson 2.9
Issue: SPR-14925
2017-05-23 21:59:16 +02:00
Rossen Stoyanchev b6e252495a Protect against NPE in DefaultSubscriptionRegistry
Follow-up fix on the recent commit:
https://github.com/spring-projects/spring-framework/commit/44c31a

Issue: SPR-15543
2017-05-22 16:08:34 -04:00
Stephane Nicoll b64de87a6b Merge pull request #1411 from andreykaipov:patch-2
* pr/1411:
  Minor typo fix: form -> from
2017-05-20 14:50:18 +02:00
Andrey Kaipov 9c226aa742 Minor typo fix: form -> from
Closes gh-1411
2017-05-20 14:49:54 +02:00
Rossen Stoyanchev 11075f12bc Fix URI parsing in Reactor Netty request
Issue: SPR-15560
2017-05-19 21:47:27 -04:00
Juergen Hoeller c59e192b0f Upgrade to Kotlin 1.1.2-4 (and Undertow 1.4.15) 2017-05-19 23:23:11 +02:00
Rossen Stoyanchev 34f1712d59 Merge pull request #1422 from svorcmar/SPR-15505 2017-05-19 17:00:16 -04:00
Rossen Stoyanchev 48a5938cd4 Polish 2017-05-19 16:59:36 -04:00
Martin Švorc bf83e4e861 Use original query string of forwarded request
Prior to this commit, the AbstractFlashMapManager has used the
originating URI but the query string of the forwarded request. That
resulted to FlashMap not being matched even when both originating
URI and query string matched the FlashMap attributes. The originating
query string is now used to match the forwarded request.

Issue: SPR-15505
2017-05-19 16:49:29 -04:00
Bao Tran 44c31a6aad Fix duplicate STOMP subscription id issue
Issue: SPR-15543
2017-05-19 15:20:14 -04:00
Juergen Hoeller cb3d1befcd LocalValidatorFactoryBean properly supports unwrap at ValidatorFactory level
Also documents limitation for Bean Validation 2.0's getClockProvider() method.

Issue: SPR-15561
Issue: SPR-13482
2017-05-18 21:00:56 +02:00
Juergen Hoeller 67881a5726 Polish PathPattern parser (including package change to web.util.pattern)
Issue: SPR-15531
2017-05-17 17:40:25 +02:00
Juergen Hoeller eaac348c05 Close InputStreams in writeResourceRegionCollection (analogous to writeResourceRegion)
Issue: SPR-15559
2017-05-17 14:34:50 +02:00
Juergen Hoeller 7b3f5fd855 ResourceUtils.extractArchiveURL properly deals with top-level war URLs
Issue: SPR-15556
2017-05-17 14:22:43 +02:00
Juergen Hoeller e835f4d025 Revised png and jpeg mappings
Issue: SPR-15546
Issue: SPR-15557
2017-05-17 14:21:44 +02:00
Arjen Poutsma ba39697f2e Expose Principal in ServerRequest
This commit exposes the Principal in ServerRequest.

Issue: SPR-15552
2017-05-16 14:50:57 +02:00
Juergen Hoeller 94efbe2687 Latest dependency updates (OkHttp 3.8, Protobuf 3.3.1, Rome 1.7.3, Tomcat 8.5.15) 2017-05-16 11:39:21 +02:00
Juergen Hoeller 9e3f4ccce9 Merge pull request #1394 from alexander-riss/keySet
Fix inefficient use of keySet operators in messaging classes

Issue: SPR-15553
2017-05-16 11:22:22 +02:00
Alexander Riss e49a5d8424 fix inefficient use of keySet operators in messaging classes
issue: SPR-15553
2017-05-16 10:41:22 +02:00
Rossen Stoyanchev 5ac7955de9 More qualified "request-id" header in WebTestClient
Issue: SPR-15501
2017-05-15 15:52:50 -04:00
Violeta Georgieva 7f616c216b Specify the HandlerMapping#order in the websocket example
The order value has to be specified for the HandlerMapping
so that it will be ordered before the one that serves the static resource.
2017-05-12 20:45:27 +03:00
Juergen Hoeller f985f71daf Polishing 2017-05-12 12:50:17 +02:00
Juergen Hoeller 650a682659 Upgrade to Netty 4.1.11 2017-05-12 12:50:10 +02:00
Arjen Poutsma f4cf55cb2b Add support for WebFilter and WebExceptionHandler
This commit adds support for configuring `WebFilter` and
`WebExceptionHandler` instances in HandlerStrategies. It also drops the
"native" support for `ResponseStatusException`s, in favor of the
`ResponseStatusExceptionHandler`, which is registered by default.

Issue: SPR-15518
2017-05-11 11:45:00 +02:00
Arjen Poutsma ad9cf99420 ResourceHandlerFunction returns EntityResponse
The ResourceHandlerFunction now returns an `EntityResponse<Resource>`
(instead of a `ServerResponse`), so that filters can inspect/change the
returned Resource.
2017-05-11 11:45:00 +02:00
Arjen Poutsma 8db4b2f7ed Remove synchronized block around PathPatternParser
Removed the synchronized block around PathPatternParser, since it is
now thread-safe.
2017-05-11 09:55:20 +02:00
Sebastien Deleuze 285fa1cc2c Fix typos in Kotlin extensions documentation 2017-05-10 17:22:27 +02:00
Arjen Poutsma f0f3df5cc0 Use PathPattern in PathResourceLookupFunction 2017-05-10 10:12:55 +02:00
Arjen Poutsma 64c0ec3d5e Add test for combining @Controller with RouterFunctions
This commit adds a test for combining RouterFunctions with a
@Controller.

Issue: SPR-15521
2017-05-09 16:38:30 +02:00
Juergen Hoeller 9273197f11 Latest dependency updates (Common Annotations 1.3, Caffeine 2.5, Selenium 3.4, JSONassert 1.5) 2017-05-09 13:48:05 +02:00
Arjen Poutsma b649041976 Add ServerHttpResponse.addCookie method
This commit adds a `addCookie(ResponseCookie)` method to the reactive
`ServerHttpResponse` interface.

Issue: SPR-15523
2017-05-09 10:18:39 +02:00
Rossen Stoyanchev add1305252 Re-add vararg options in WebHttpHandlerBuilder
WebHttpHandlerBuilder is low level not expected to appear frequently
but they might be repeated more in tests (e.g. of WebFilter's).

Issuse: SPR-15499
2017-05-08 15:50:27 -04:00
Rossen Stoyanchev 459457e1aa WebFilterChain delegation nested in Mono.defer()
Issue: SPR-15520
2017-05-08 15:36:31 -04:00
Rossen Stoyanchev 47d6e4a332 Immutable DefaultWebFilterChain
Issue: SPR-15517
2017-05-08 15:04:38 -04:00
8003 changed files with 265892 additions and 140714 deletions
+10
View File
@@ -0,0 +1,10 @@
root = true
[*.{adoc,bat,groovy,html,java,js,jsp,kt,kts,md,properties,py,rb,sh,sql,svg,txt,xml,xsd}]
charset = utf-8
[*.{groovy,java,kt,kts,xml,xsd}]
indent_style = tab
indent_size = 4
continuation_indent_size = 8
end_of_line = lf
+17
View File
@@ -0,0 +1,17 @@
<!--
!!! For Security Vulnerabilities, please go to https://pivotal.io/security !!!
-->
**Affects:** \<Spring Framework version>
---
<!--
Thanks for taking the time to create an issue. Please read the following:
- Questions should be asked on Stack Overflow.
- For bugs, specify affected versions and explain what you are trying to do.
- For enhancements, provide context and describe the problem.
Issue or Pull Request? Create only one, not both. GitHub treats them as the same.
If unsure, start with an issue, and if you submit a pull request later, the
issue will be closed as superseded.
-->
@@ -1,9 +0,0 @@
#com.springsource.sts.gradle.core.preferences.GradleImportPreferences
#Thu Aug 9 11:34:43 CEST 2012
enableAfterTasks=true
afterTasks=afterEclipseImport;
enableDependendencyManagement=false
enableBeforeTasks=true
projects=;spring-aop;spring-aspects;spring-beans;spring-context;spring-context-support;spring-core;spring-expression;spring-instrument;spring-instrument-tomcat;spring-jdbc;spring-jms;spring-orm;spring-oxm;spring-struts;spring-test;spring-tx;spring-web;spring-webmvc;spring-webmvc-portlet;
enableDSLD=false
beforeTasks=cleanEclipse;eclipse;\:spring-oxm\:compileTestJava;
@@ -1,5 +0,0 @@
#com.springsource.sts.gradle.core.preferences.GradleProjectPreferences
#Tue Feb 21 14:38:31 CET 2012
com.springsource.sts.gradle.classpath.enableSorting=false
com.springsource.sts.gradle.rootprojectloc=
com.springsource.sts.gradle.linkedresources=
@@ -1,9 +0,0 @@
#com.springsource.sts.gradle.core.actions.GradleRefreshPreferences
#Thu Aug 9 11:34:43 CEST 2012
enableAfterTasks=true
afterTasks=afterEclipseImport;
useHierarchicalNames=false
enableBeforeTasks=true
addResourceFilters=false
enableDSLD=false
beforeTasks=cleanEclipse;eclipse;\:spring-oxm\:compileTestJava;
+2 -2
View File
@@ -40,5 +40,5 @@ appropriate to the circumstances. Maintainers are obligated to maintain confiden
with regard to the reporter of an incident.
This Code of Conduct is adapted from the
http://contributor-covenant.org[Contributor Covenant], version 1.3.0, available at
http://contributor-covenant.org/version/1/3/0/[contributor-covenant.org/version/1/3/0/]
https://contributor-covenant.org[Contributor Covenant], version 1.3.0, available at
https://contributor-covenant.org/version/1/3/0/[contributor-covenant.org/version/1/3/0/]
-51
View File
@@ -1,51 +0,0 @@
= How to contribute to the reference
The Spring Framework reference now uses http://asciidoctor.org/[asciidoctor]. This
document describes how to contribute documentation updates.
== Building with Gradle
You can build the documentation using gradle using the `reference` task. For example, from
the project root execute the following command:
./gradlew reference
the output will be available at `spring-framework/build/reference/htmlsingle/index.html`
== Live editing
One of the nice features about using asciidoctor is the support for live editing.
You will find a Guardfile already present at `spring-framework/src/asciidoc/Guardfile`.
Make sure first to follow the setup instructions within the
http://asciidoctor.org/docs/editing-asciidoc-with-live-preview/[Editing AsciiDoc with Live Preview]
document. Once you have done that, there are additional gems to install to make it work
(assuming that you are using http://livereload.com/[LiveReload]):
gem install guard-rspec guard-livereload
When running `guard start` within the `src/asciidoc/` folder, any changes to the
`src/asciidoc/index.adoc` file will automatically be written at
`src/asciidoc/build/index.html`.
== Troubleshooting
* If you are using LiveReload, make sure to select _Allow access to file URLs_ in the
LiveEdit plugin options of your browser.
* The icon used to enable _LiveReload_ can be a bit confusing. The dot is empty when it is
disabled and full when the plugin is active. Make sure to enable it on the tab
displaying the `index.html` file.
* Ensure you are _not_ running guard start at all as two instances could not run at the
same time. To exit a current session in a clean way, just type e in the shell.
== Documentation notes
Some notes on documentation
* Documentation is wrapped at 90 chars, ensure that you manually wrap your edits
* Tabs are used for indentation, do not use spaces
* Follow the existing style when inserting `source` blocks
* http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/[Asciidoctor Quick Reference]
* http://asciidoctor.org/docs/user-manual/[Asciidoctor Manual]
* http://asciidoctor.org/docs/asciidoc-writers-guide/[Asciidoctor Writers Guide]
+92 -268
View File
@@ -1,304 +1,128 @@
_Have something you'd like to contribute to the framework? We welcome pull
requests but ask that you carefully read this document first to understand how
best to submit them; what kind of changes are likely to be accepted; and what
to expect from the Spring team when evaluating your submission._
# Contributing to the Spring Framework
_Please refer back to this document as a checklist before issuing any pull
request; this will save time for everyone!_
First off, thank you for taking the time to contribute! :+1: :tada:
## Code of Conduct
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.adoc).
By participating, you are expected to uphold this code. Please report unacceptable behavior to spring-code-of-conduct@pivotal.io.
### Table of Contents
## Take Your First Steps
* [Code of Conduct](#code-of-conduct)
* [How to Contribute](#how-to-contribute)
* [Discuss](#discuss)
* [Create a Ticket](#create-a-ticket)
* [Ticket Lifecycle](#ticket-lifecycle)
* [Submit a Pull Request](#submit-a-pull-request)
* [Build from Source](#build-from-source)
* [Source Code Style](#source-code-style)
* [Reference Docs](#reference-docs)
### Understand the basics
### Code of Conduct
Not sure what a pull request is, or how to submit one? Take a look at GitHub's
excellent [help documentation][] first.
This project is governed by the [Spring Code of Conduct](CODE_OF_CONDUCT.adoc).
By participating you are expected to uphold this code.
Please report unacceptable behavior to spring-code-of-conduct@pivotal.io.
### Search Stack Overflow first; discuss if necessary
### How to Contribute
If you're unsure why something isn't working or wondering if there is a better
way of doing it please check on Stack Overflow first and if necessary start
a discussion. This is the official list of
[Spring project tags](https://spring.io/questions). In short the issue tracker
should be used to report issues and make feature requests.
#### Discuss
### Search JIRA; create an issue if necessary
If you have a question, check StackOverflow using
[this list of tags](https://spring.io/questions), organized by Spring project.
Find an existing discussion or start a new one if necessary.
Is there already an issue that addresses your concern? Do a bit of searching
in our [JIRA issue tracker][] to see if you can find something similar. If you
do not find something similar, please create a new JIRA issue before submitting
a pull request unless the change is truly trivial -- for example: typo fixes,
removing compiler warnings, etc.
If you suspect an issue, perform a search in the
[GitHub issue tracker](https://github.com/spring-projects/spring-framework/issues), using a few different keywords.
When you find related issues and discussions, prior or current, it helps you to learn and
it helps us to make a decision.
### Sign the Contributor License Agreement (CLA)
#### Create a Ticket
If you have not previously done so, please sign the [Contributor License Agreement][].
If you forget to do so, you'll be reminded when you submit a pull request.
Reporting an issue or making a feature request is a great way to contribute. Your feedback
and the conversations that result from it provide a continuous flow of ideas.
## Create a Branch
Before you create a ticket, please take the time to [research first](#discuss).
### Branch from `master`
If creating a ticket after a discussion on StackOverflow, please provide a self-sufficient description in the ticket, independent of the details on StackOverview. We understand this is extra work but the issue tracker is an important place of record for design discussions and decisions that can often be referenced long after the fix version, for example to revisit decisions, to understand the origin of a feature, and so on.
Master currently represents work toward Spring Framework 5.0. Please submit
all pull requests there, even bug fixes and minor improvements. Backports to
`4.3.x` will be considered on a case-by-case basis.
When ready create a ticket in the [GitHub issue tracker](https://github.com/spring-projects/spring-framework/issues).
#### Ticket Lifecycle
### Use short branch names
When an issue is first created, it may not be assigned and will not have a fix version.
Within a day or two, the issue is assigned to a specific committer and the target
version is set to "Waiting for Triage". The committer will then review the issue, ask for
further information if needed, and based on the findings, the issue is either assigned a fix
version or rejected.
Branches used when submitting pull requests should preferably be named
according to JIRA issues, e.g. 'SPR-1234'. Otherwise, use succinct, lower-case,
dash (-) delimited names, such as 'fix-warnings', 'fix-typo', etc. In
[fork-and-edit][] cases, the GitHub default 'patch-1' is fine as well. This is
important, because branch names show up in the merge commits that result from
accepting pull requests and should be as expressive and concise as possible.
When a fix is ready, the issue is marked "Resolved" and may still be re-opened. Once a fix
is released, the issue is permanently "Closed". If necessary, you will need to create a new,
related ticket with a fresh description.
## Use Spring Framework Code Style
#### Submit a Pull Request
The complete [Spring Framework Code Style][] reference is available on the wiki, but
here's a quick summary:
You can contribute a source code change by submitting a pull request.
### Mind the whitespace
1. If you have not previously done so, please sign the
[Contributor License Agreement](https://cla.pivotal.io/sign/spring). You will also be reminded
automatically when you submit a pull request.
Please carefully follow the whitespace and formatting conventions already
present in the framework.
1. For all but the most trivial of contributions, please [create a ticket](#create-a-ticket).
The purpose of the ticket is to understand and discuss the underlying issue or feature.
We use the GitHub issue tracker as the preferred place of record for conversations and
conclusions. In that sense discussions directly under a PR are more implementation detail
oriented and transient in nature.
1. Tabs, not spaces
1. Unix (LF), not DOS (CRLF) line endings
1. Eliminate all trailing whitespace
1. Wrap Javadoc at 90 characters
1. Aim to wrap code at 90 characters, but favor readability over wrapping
1. Preserve existing formatting; i.e. do not reformat code for its own sake
1. Search the codebase using `git grep` and other tools to discover common
naming conventions, etc.
1. UTF-8 encoding for Java sources
1. Always check out the `master` branch and submit pull requests against it
(for target version see [settings.gradle](settings.gradle)).
Backports to prior versions will be considered on a case-by-case basis and reflected as
the fix version in the issue tracker.
1. Use short branch names, preferably based on the GitHub issue (e.g. `22276`), or
otherwise using succinct, lower-case, dash (-) delimited names, such as `fix-warnings`.
### Add Apache license header to all new classes
1. Choose the granularity of your commits consciously and squash commits that represent
multiple edits or corrections of the same logical change. See
[Rewriting History section of Pro Git](https://git-scm.com/book/en/Git-Tools-Rewriting-History)
for an overview of streamlining commit history.
```java
/*
* Copyright 2002-2017 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
1. Format commit messages using 55 characters for the subject line, 72 lines for the
description, followed by the issue fixed, e.g. `Fixes #22276`.
See the
[Commit Guidelines section of Pro Git](https://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project#Commit-Guidelines)
for best practices around commit messages and use `git log` to see some examples.
package ...;
```
1. List the GitHub issue number in the PR description.
### Update Apache license header in modified files as necessary
If accepted, your contribution may be heavily modified as needed prior to merging.
You will likely retain author attribution for your Git commits granted that the bulk of
your changes remain intact. You may also be asked to rework the submission.
Always check the date range in the license header. For example, if you've
modified a file in 2017 whose header still reads:
If asked to make corrections, simply push the changes against the same branch, and your
pull request will be updated. In other words, you do not need to create a new pull request
when asked to make changes.
```java
/*
* Copyright 2002-2011 the original author or authors.
```
### Build from Source
Then be sure to update it to 2017 accordingly:
See the [Build from Source](https://github.com/spring-projects/spring-framework/wiki/Build-from-Source)
wiki page for instructions on how to check out, build, and import the Spring Framework
source code into your IDE.
```java
/*
* Copyright 2002-2017 the original author or authors.
```
### Source Code Style
### Use @since tags for newly-added public API types and methods
The wiki pages
[Code Style](https://github.com/spring-projects/spring-framework/wiki/Code-Style) and
[IntelliJ IDEA Editor Settings](https://github.com/spring-projects/spring-framework/wiki/IntelliJ-IDEA-Editor-Settings)
defines the source file coding standards we use along with some IDEA editor settings we customize.
For example:
### Reference Docs
```java
/**
* ...
*
* @author First Last
* @since 5.0
* @see ...
*/
```
The reference documentation is in the [src/docs/asciidoc](src/docs/asciidoc) directory and, in
[Asciidoctor](https://asciidoctor.org/) format. For trivial changes, you may be able to browse,
edit source files, and submit directly from GitHub.
## Prepare Your Commit
When making changes locally, use `./gradlew asciidoctor` and then browse the result under
`build/asciidoc/html5/index.html`.
### Submit JUnit test cases for all behavior changes
Search the codebase to find related tests and add additional `@Test` methods
as appropriate. It is also acceptable to submit test cases on a per JIRA issue
basis, for example:
```java
package org.springframework.beans.factory.support;
/**
* Unit tests for SPR-8954, in which a custom {@link InstantiationAwareBeanPostProcessor}
* forces the predicted type of a FactoryBean, effectively preventing retrieval of the
* bean from calls to #getBeansOfType(FactoryBean.class). The implementation of
* {@link AbstractBeanFactory#isFactoryBean(String, RootBeanDefinition)} now ensures
* that not only the predicted bean type is considered, but also the original bean
* definition's beanClass.
*
* @author Chris Beams
*/
public class Spr8954Tests {
@Test
public void cornerSpr8954() {
// ...
}
}
```
### Squash commits
Use `git rebase --interactive --autosquash`, `git add --patch`, and other tools
to "squash" multiple commits into a single atomic commit. In addition to the man
pages for git, there are many resources online to help you understand how these
tools work. The [Rewriting History section of Pro Git][] provides a good overview.
### Use real name in git commits
Please configure git to use your real first and last name for any commits you
intend to submit as pull requests. For example, this is not acceptable:
Author: Nickname <user@mail.com>
Rather, please include your first and last name, properly capitalized, as
submitted against the Spring Individual Contributor License Agreement (ICLA):
Author: First Last <user@mail.com>
This helps ensure traceability against the ICLA and also goes a long way to
ensuring useful output from tools like `git shortlog` and others.
You can configure this via the account admin area in GitHub (useful for
fork-and-edit cases); _globally_ on your machine with
git config --global user.name "First Last"
git config --global user.email user@mail.com
or _locally_ for the `spring-framework` repository only by omitting the
'--global' flag:
cd spring-framework
git config user.name "First Last"
git config user.email user@mail.com
### Format commit messages
Please read and follow the [Commit Guidelines section of Pro Git][].
Most importantly, please format your commit messages in the following way
(adapted from the commit template in the link above):
Short (50 chars or less) summary of changes
More detailed explanatory text, if necessary. Wrap it to about 72
characters or so. In some contexts, the first line is treated as the
subject of an email and the rest of the text as the body. The blank
line separating the summary from the body is critical (unless you omit
the body entirely); tools like rebase can get confused if you run the
two together.
Further paragraphs come after blank lines.
- Bullet points are okay, too
- Typically a hyphen or asterisk is used for the bullet, preceded by a
single space, with blank lines in between, but conventions vary here
Issue: SPR-1234, SPR-1235
1. Use imperative statements in the subject line, e.g. "Fix broken Javadoc link".
1. Begin the subject line with a capitalized verb, e.g. "Add, Prune, Fix,
Introduce, Avoid, etc."
1. Do not end the subject line with a period.
1. Restrict the subject line to 50 characters or less if possible.
1. Wrap lines in the body at 72 characters or less.
1. Mention associated JIRA issue(s) at the end of the commit comment, prefixed
with "Issue: " as above.
1. In the body of the commit message, explain how things worked before this
commit, what has changed, and how things work now.
For examples of this style, issue a `git log --author=cbeams` in the
`spring-framework` git repository. For convenience, here are several such commits:
- https://github.com/spring-projects/spring-framework/commit/08e2669b84ec0faa2f7904441fe39ac70b65b078
- https://github.com/spring-projects/spring-framework/commit/1d9d3e6ff79ce9f0eca03b02cd1df705925575da
- https://github.com/spring-projects/spring-framework/commit/8e0b1c3a5f957af3049cfa0438317177e16d6de6
- https://github.com/spring-projects/spring-framework/commit/b787a68f2050df179f7036b209aa741230a02477
## Run the Final Checklist
### Run all tests prior to submission
See the [building from source][] section of the `README` for instructions. Make
sure that all tests pass prior to submitting your pull request.
### Submit your pull request
Subject line:
Follow the same conventions for pull request subject lines as mentioned above
for commit message subject lines.
In the body:
1. Explain your use case. What led you to submit this change? Why were existing
mechanisms in the framework insufficient? Make a case that this is a
general-purpose problem and that yours is a general-purpose solution, etc.
1. Add any additional information and ask questions; start a conversation or
continue one from JIRA.
1. Mention the JIRA issue ID.
1. Also mention that you have submitted the ICLA as described above.
Note that for pull requests containing a single commit, GitHub will default the
subject line and body of the pull request to match the subject line and body of
the commit message. This is fine, but please also include the items above in the
body of the request.
### Mention your pull request on the associated JIRA issue
Add a comment to the associated JIRA issue(s) linking to your new pull request.
### Expect discussion and rework
The Spring team takes a very conservative approach to accepting contributions to
the framework. This is to keep code quality and stability as high as possible,
and to keep complexity at a minimum. Your changes, if accepted, may be heavily
modified prior to merging. You will retain "Author:" attribution for your Git
commits granted that the bulk of your changes remain intact. You may be asked to
rework the submission for style (as explained above) and/or substance. Again, we
strongly recommend discussing any serious submissions with the Spring Framework
team _prior_ to engaging in serious development work.
Note that you can always force push (`git push -f`) reworked / rebased commits
against the branch used to submit your pull request. In other words, you do not
need to issue a new pull request when asked to make changes.
[help documentation]: https://help.github.com/categories/collaborating-on-projects-using-issues-and-pull-requests/
[JIRA issue tracker]: https://jira.spring.io/browse/SPR
[Contributor License Agreement]: https://cla.pivotal.io/sign/spring
[fork-and-edit]: https://github.com/blog/844-forking-with-the-edit-button
[Spring Framework Code Style]: https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Code-Style
[Rewriting History section of Pro Git]: http://git-scm.com/book/en/Git-Tools-Rewriting-History
[Commit Guidelines section of Pro Git]: http://git-scm.com/book/en/Distributed-Git-Contributing-to-a-Project#Commit-Guidelines
[building from source]: https://github.com/spring-projects/spring-framework#building-from-source
Asciidoctor also supports live editing. For more details read
[Editing AsciiDoc with Live Preview](https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/).
Note that if you choose the
[System Monitor](https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/#using-a-system-monitor)
option, you can find a Guardfile under `src/docs/asciidoc`.
+16 -88
View File
@@ -1,102 +1,30 @@
## Spring Framework
The Spring Framework provides a comprehensive programming and configuration
model for modern Java-based enterprise applications -- on any kind of deployment
platform. A key element of Spring is infrastructural support at the application
level: Spring focuses on the "plumbing" of enterprise applications so that teams
can focus on application-level business logic, without unnecessary ties to
specific deployment environments.
# <img src="src/docs/asciidoc/images/spring-framework.png" width="80" height="80"> Spring Framework
The framework also serves as the foundation for [Spring Integration][], [Spring Batch][]
and the rest of the Spring [family of projects][]. Browse the repositories under
the [Spring organization][] on GitHub for a full list.
This is the home of the Spring Framework: the foundation for all [Spring projects](https://spring.io/projects). Collectively the Spring Framework and the family of Spring projects is often referred to simply as "Spring".
Spring provides everything required beyond the Java programming language for creating enterprise applications for a wide range of scenarios and architectures. Please read the [Overview](https://docs.spring.io/spring/docs/current/spring-framework-reference/overview.html#spring-introduction) section as reference for a more complete introduction.
## Code of Conduct
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.adoc).
By participating, you are expected to uphold this code. Please report unacceptable behavior to spring-code-of-conduct@pivotal.io.
## Downloading Artifacts
See [downloading Spring artifacts][] for Maven repository information. Unable to
use Maven or other transitive dependency management tools?
See [building a distribution with dependencies][].
This project is governed by the [Spring Code of Conduct](CODE_OF_CONDUCT.adoc). By participating, you are expected to uphold this code of conduct. Please report unacceptable behavior to spring-code-of-conduct@pivotal.io.
## Access to Binaries
For access to artifacts or a distribution zip, see the [Spring Framework Artifacts](https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Artifacts) wiki page.
## Documentation
See the current [Javadoc][] and [reference docs][].
## Getting Support
Check out the [spring][spring tags] tags on [Stack Overflow][]. [Commercial support][]
is available too.
The Spring Framework maintains reference documentation ([published](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/) and [source](src/docs/asciidoc)), Github [wiki pages](https://github.com/spring-projects/spring-framework/wiki), and an
[API reference](https://docs.spring.io/spring-framework/docs/current/javadoc-api/). There are also [guides and tutorials](https://spring.io/guides) across Spring projects.
## Issue Tracking
Report issues via the [Spring Framework JIRA][]. Understand our issue management
process by reading about [the lifecycle of an issue][]. Think you've found a
bug? Please consider submitting a reproduction project via the
[spring-framework-issues][] GitHub repository. The [readme][] there provides
simple step-by-step instructions.
## Build from Source
## Building from Source
The Spring Framework uses a [Gradle][]-based build system. In the instructions
below, [`./gradlew`][] is invoked from the root of the source tree and serves as
a cross-platform, self-contained bootstrap mechanism for the build.
See the [Build from Source](https://github.com/spring-projects/spring-framework/wiki/Build-from-Source) Wiki page and the [CONTRIBUTING.md](CONTRIBUTING.md) file.
### Prerequisites
## Stay in Touch
[Git][] and [JDK 8 update 20 or later][JDK8 build]
Be sure that your `JAVA_HOME` environment variable points to the `jdk1.8.0` folder
extracted from the JDK download.
### Check out sources
`git clone git@github.com:spring-projects/spring-framework.git`
### Import sources into your IDE
Run `./import-into-eclipse.sh` or read `import-into-idea.md` as appropriate.
> **Note:** Per the prerequisites above, ensure that you have JDK 8 configured properly in your IDE.
### Install all spring-\* jars into your local Maven cache
`./gradlew install`
### Compile and test; build all jars, distribution zips, and docs
`./gradlew build`
... and discover more commands with `./gradlew tasks`. See also the [Gradle
build and release FAQ][].
## Contributing
[Pull requests][] are welcome; see the [contributor guidelines][] for details.
## Staying in Touch
Follow [@SpringCentral][] as well as [@SpringFramework][] and its [team members][]
on Twitter. In-depth articles can be found at [The Spring Blog][], and releases
are announced via our [news feed][].
Follow [@SpringCentral](https://twitter.com/springcentral), [@SpringFramework](https://twitter.com/springframework), and its [team members](https://twitter.com/springframework/lists/team/members) on Twitter. In-depth articles can be found at [The Spring Blog](https://spring.io/blog/), and releases are announced via our [news feed](https://spring.io/blog/category/news).
## License
The Spring Framework is released under version 2.0 of the [Apache License][].
[Spring Integration]: https://github.com/spring-projects/spring-integration
[Spring Batch]: https://github.com/spring-projects/spring-batch
[family of projects]: http://spring.io/projects
[Spring organization]: https://github.com/spring-projects
[downloading Spring artifacts]: https://github.com/spring-projects/spring-framework/wiki/Downloading-Spring-artifacts
[building a distribution with dependencies]: https://github.com/spring-projects/spring-framework/wiki/Building-a-distribution-with-dependencies
[Javadoc]: http://docs.spring.io/spring-framework/docs/current/javadoc-api/
[reference docs]: http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/
[spring tags]: http://spring.io/questions
[Stack Overflow]: http://stackoverflow.com/faq
[Commercial support]: http://spring.io/services
[Spring Framework JIRA]: https://jira.spring.io/browse/SPR
[the lifecycle of an issue]: https://github.com/spring-projects/spring-framework/wiki/The-Lifecycle-of-an-Issue
[spring-framework-issues]: https://github.com/spring-projects/spring-framework-issues#readme
[readme]: https://github.com/spring-projects/spring-framework-issues#readme
[Gradle]: http://gradle.org
[`./gradlew`]: http://vimeo.com/34436402
[Git]: http://help.github.com/set-up-git-redirect
[JDK8 build]: http://www.oracle.com/technetwork/java/javase/downloads
[Gradle build and release FAQ]: https://github.com/spring-projects/spring-framework/wiki/Gradle-build-and-release-FAQ
[Pull requests]: https://help.github.com/categories/collaborating-on-projects-using-issues-and-pull-requests/
[contributor guidelines]: https://github.com/spring-projects/spring-framework/blob/master/CONTRIBUTING.md
[@SpringFramework]: https://twitter.com/springframework
[@SpringCentral]: https://twitter.com/springcentral
[team members]: https://twitter.com/springframework/lists/team/members
[The Spring Blog]: http://spring.io/blog/
[news feed]: http://spring.io/blog/category/news
[Apache License]: http://www.apache.org/licenses/LICENSE-2.0
The Spring Framework is released under version 2.0 of the [Apache License](https://www.apache.org/licenses/LICENSE-2.0).
+141 -1112
View File
File diff suppressed because it is too large Load Diff
+10
View File
@@ -0,0 +1,10 @@
description = "Exposes gradle buildSrc for IDE support"
apply plugin: "groovy"
dependencies {
compile gradleApi()
compile localGroovy()
}
configurations.archives.artifacts.clear()
@@ -1,158 +0,0 @@
/*
* Copyright 2002-2013 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.build.gradle
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
/**
* Gradle plugin that detects identically named, non-empty packages split across multiple
* subprojects, e.g. "org.springframework.context.annotation" existing in both spring-core
* and spring-aspects. Adds a 'detectSplitPackages' task to the current project's task
* collection. If the project already contains a 'check' task (i.e. is a typical Gradle
* project with the "java" plugin applied), the 'check' task will be updated to depend on
* the execution of 'detectSplitPackages'.
*
* By default, all subprojects will be scanned. Use the 'projectsToScan' task property to
* modify this value. Example usage:
*
* apply plugin: 'detect-split-packages // typically applied to root project
*
* detectSplitPackages {
* packagesToScan -= project(":spring-xyz") // scan every project but spring-xyz
* }
*
* @author Rob Winch
* @author Glyn Normington
* @author Chris Beams
*/
public class DetectSplitPackagesPlugin implements Plugin<Project> {
public void apply(Project project) {
def tasks = project.tasks
Task detectSplitPackages = tasks.create("detectSplitPackages", DetectSplitPackagesTask.class)
if (tasks.asMap.containsKey("check")) {
tasks.getByName("check").dependsOn detectSplitPackages
}
}
}
public class DetectSplitPackagesTask extends DefaultTask {
private static final String JAVA_FILE_SUFFIX = ".java"
private static final String PACKAGE_SEPARATOR = "."
private static final String HIDDEN_DIRECTORY_PREFIX = "."
@Input
Set<Project> projectsToScan = project.subprojects
public DetectSplitPackagesTask() {
this.group = "Verification"
this.description = "Detects packages split across two or more subprojects."
}
@TaskAction
public void detectSplitPackages() {
def splitPackages = doDetectSplitPackages()
if (!splitPackages.isEmpty()) {
def message = "The following split package(s) have been detected:\n"
splitPackages.each { pkg, mod ->
message += " - ${pkg} (split across ${mod[0].name} and ${mod[1].name})\n"
}
throw new GradleException(message)
}
}
private Map<String, List<Project>> doDetectSplitPackages() {
def splitPackages = [:]
def mergedProjects = findMergedProjects()
def packagesByProject = mapPackagesByProject()
def projects = packagesByProject.keySet().toArray()
def nProjects = projects.length
for (int i = 0; i < nProjects - 1; i++) {
for (int j = i + 1; j < nProjects - 1; j++) {
def prj_i = projects[i]
def prj_j = projects[j]
def pkgs_i = new HashSet(packagesByProject.get(prj_i))
def pkgs_j = packagesByProject.get(prj_j)
pkgs_i.retainAll(pkgs_j)
if (!pkgs_i.isEmpty()
&& mergedProjects.get(prj_i) != prj_j
&& mergedProjects.get(prj_j) != prj_i) {
pkgs_i.each { pkg ->
def readablePkg = pkg.substring(1).replaceAll(File.separator, PACKAGE_SEPARATOR)
splitPackages[readablePkg] = [prj_i, prj_j]
}
}
}
}
return splitPackages;
}
private Map<Project, Set<String>> mapPackagesByProject() {
def packagesByProject = [:]
this.projectsToScan.each { Project p ->
def packages = new HashSet<String>()
p.sourceSets.main.java.srcDirs.each { File dir ->
findPackages(packages, dir, "")
}
if (!packages.isEmpty()) {
packagesByProject.put(p, packages)
}
}
return packagesByProject;
}
private Map<Project, Project> findMergedProjects() {
def mergedProjects = [:]
this.projectsToScan.findAll { p ->
p.plugins.findPlugin(MergePlugin)
}.findAll { p ->
p.merge.into
}.each { p ->
mergedProjects.put(p, p.merge.into)
}
return mergedProjects
}
private static void findPackages(Set<String> packages, File dir, String packagePath) {
def scanDir = new File(dir, packagePath)
def File[] javaFiles = scanDir.listFiles({ file ->
!file.isDirectory() && file.name.endsWith(JAVA_FILE_SUFFIX)
} as FileFilter)
if (javaFiles != null && javaFiles.length != 0) {
packages.add(packagePath)
}
scanDir.listFiles({ File file ->
file.isDirectory() && !file.name.startsWith(HIDDEN_DIRECTORY_PREFIX)
} as FileFilter).each { File subDir ->
findPackages(packages, dir, packagePath + File.separator + subDir.name)
}
}
}
@@ -1,177 +0,0 @@
/*
* Copyright 2002-2015 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.build.gradle
import org.gradle.api.*
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ProjectDependency;
import org.gradle.api.artifacts.maven.Conf2ScopeMapping
import org.gradle.api.plugins.MavenPlugin
import org.gradle.plugins.ide.eclipse.EclipsePlugin
import org.gradle.plugins.ide.idea.IdeaPlugin
import org.gradle.api.invocation.*
/**
* Gradle plugin that allows projects to merged together. Primarily developed to
* allow Spring to support multiple incompatible versions of third-party
* dependencies (for example Hibernate v3 and v4).
* <p>
* The 'merge' extension should be used to define how projects are merged, for example:
* <pre class="code">
* configure(subprojects) {
* apply plugin: MergePlugin
* }
*
* project("myproject") {
* }
*
* project("myproject-extra") {
* merge.into = project("myproject")
* }
* </pre>
* <p>
* This plugin adds two new configurations:
* <ul>
* <li>merging - Contains the projects being merged into this project<li>
* <li>runtimeMerge - Contains all dependencies that are merge projects. These are used
* to allow an IDE to reference merge projects.</li>
* <ul>
*
* @author Rob Winch
* @author Phillip Webb
*/
class MergePlugin implements Plugin<Project> {
private static boolean attachedProjectsEvaluated;
public void apply(Project project) {
project.plugins.apply(MavenPlugin)
project.plugins.apply(EclipsePlugin)
project.plugins.apply(IdeaPlugin)
MergeModel model = project.extensions.create("merge", MergeModel)
model.project = project
project.configurations.create("merging")
Configuration runtimeMerge = project.configurations.create("runtimeMerge")
// Ensure the IDE can reference merged projects
project.eclipse.classpath.plusConfigurations += [ runtimeMerge ]
project.idea.module.scopes.PROVIDED.plus += [ runtimeMerge ]
// Hook to perform the actual merge logic
project.afterEvaluate{
if (it.merge.into != null) {
setup(it)
}
setupIdeDependencies(it)
}
// Hook to build runtimeMerge dependencies
if (!attachedProjectsEvaluated) {
project.gradle.projectsEvaluated{
postProcessProjects(it)
}
attachedProjectsEvaluated = true;
}
}
private void setup(Project project) {
project.merge.into.dependencies.add("merging", project)
project.dependencies.add("provided", project.merge.into.sourceSets.main.output)
project.dependencies.add("runtimeMerge", project.merge.into)
setupTaskDependencies(project)
setupMaven(project)
}
private void setupTaskDependencies(Project project) {
// invoking a task will invoke the task with the same name on 'into' project
["sourcesJar", "jar", "javadocJar", "javadoc", "install", "artifactoryPublish"].each {
def task = project.tasks.findByPath(it)
if (task) {
task.enabled = false
task.dependsOn(project.merge.into.tasks.findByPath(it))
}
}
// update 'into' project artifacts to contain the source artifact contents
project.merge.into.sourcesJar.from(project.sourcesJar.source)
project.merge.into.jar.from(project.sourceSets.main.output)
project.merge.into.javadoc {
source += project.javadoc.source
classpath += project.javadoc.classpath
}
}
private void setupIdeDependencies(Project project) {
project.configurations.each { c ->
c.dependencies.findAll( { it instanceof org.gradle.api.artifacts.ProjectDependency } ).each { d ->
d.dependencyProject.merge.from.each { from ->
project.dependencies.add("runtimeMerge", from)
}
}
}
}
private void setupMaven(Project project) {
project.configurations.each { configuration ->
Conf2ScopeMapping mapping = project.conf2ScopeMappings.getMapping([configuration])
if (mapping.scope) {
Configuration intoConfiguration = project.merge.into.configurations.create(
project.name + "-" + configuration.name)
configuration.excludeRules.each {
configuration.exclude([
(ExcludeRule.GROUP_KEY) : it.group,
(ExcludeRule.MODULE_KEY) : it.module])
}
configuration.dependencies.each {
def intoCompile = project.merge.into.configurations.getByName("compile")
// Protect against changing a compile scope dependency (SPR-10218)
if (!intoCompile.dependencies.contains(it)) {
intoConfiguration.dependencies.add(it)
}
}
def index = project.parent.childProjects.findIndexOf {p -> p.getValue() == project}
project.merge.into.install.repositories.mavenInstaller.pom.scopeMappings.addMapping(
mapping.priority + 100 + index, intoConfiguration, mapping.scope)
}
}
}
private postProcessProjects(Gradle gradle) {
gradle.allprojects(new Action<Project>() {
public void execute(Project project) {
project.configurations.getByName("runtime").allDependencies.withType(ProjectDependency).each{
Configuration dependsOnMergedFrom = it.dependencyProject.configurations.getByName("merging");
dependsOnMergedFrom.dependencies.each{ dep ->
project.dependencies.add("runtimeMerge", dep.dependencyProject)
}
}
}
});
}
}
class MergeModel {
Project project;
Project into;
List<Project> from = [];
public void setInto(Project into) {
this.into = into;
into.merge.from.add(project);
}
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1 +0,0 @@
implementation-class=org.springframework.build.gradle.DetectSplitPackagesPlugin
@@ -1 +0,0 @@
implementation-class=org.springframework.build.gradle.MergePlugin
+1 -1
View File
@@ -1 +1 @@
version=5.0.0.BUILD-SNAPSHOT
version=5.2.0.M1
+104 -30
View File
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,29 +14,6 @@
* limitations under the License.
*/
apply plugin: "org.asciidoctor.convert"
asciidoctor {
sources {
include '*.adoc'
}
logDocuments = true
backends = ["html5", "pdf"]
options doctype: 'book', eruby: 'erubis'
attributes 'icons': 'font',
'idprefix': '',
'idseparator': '-',
docinfo: '',
revnumber: project.version,
sectanchors: '',
sectnums: '',
'source-highlighter': 'coderay@', // TODO switch to 'rouge' once supported by the html5 backend
stylesdir: 'stylesheets/',
stylesheet: 'spring.css',
'spring-version': project.version
}
task api(type: Javadoc) {
group = "Documentation"
description = "Generates aggregated Javadoc API documentation."
@@ -50,6 +27,7 @@ task api(type: Javadoc) {
options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
options.author = true
options.header = rootProject.description
options.use = true
options.overview = "src/docs/api/overview.html"
options.stylesheetFile = file("src/docs/api/stylesheet.css")
options.splitIndex = true
@@ -72,12 +50,97 @@ task api(type: Javadoc) {
}
}
task docsZip(type: Zip, dependsOn: 'asciidoctor') {
dokka {
dependsOn {
tasks.getByName("api")
}
doFirst {
classpath = subprojects.collect { project -> project.jar.outputs.files.getFiles() }.flatten()
classpath += files(subprojects.collect { it.sourceSets.main.compileClasspath })
}
moduleName = "spring-framework"
outputFormat = "html"
outputDirectory = "$buildDir/docs/kdoc"
sourceDirs = files(subprojects.collect { project ->
def kotlinDirs = project.sourceSets.main.kotlin.srcDirs.collect()
kotlinDirs -= project.sourceSets.main.java.srcDirs
})
externalDocumentationLink {
url = new URL("https://docs.spring.io/spring-framework/docs/$version/javadoc-api/")
packageListUrl = new File(buildDir, "api/package-list").toURI().toURL()
}
externalDocumentationLink {
url = new URL("https://projectreactor.io/docs/core/release/api/")
}
externalDocumentationLink {
url = new URL("https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/")
}
externalDocumentationLink {
url = new URL("https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/")
}
}
configurations {
docs
}
dependencies {
// for documentation resources
docs "io.spring.docresources:spring-doc-resources:0.1.0.RELEASE@zip"
}
task extractDocResources(type: Sync) {
dependsOn configurations.docs
from "src/docs/asciidoc/"
from {
configurations.docs.collect { zipTree(it) }
}
into "$buildDir/asciidoc/build"
}
asciidoctor {
sourceDir "$buildDir/asciidoc/build"
sources {
include '*.adoc'
}
resources {
from(sourceDir) {
include 'images/*', 'css/**', 'js/**'
}
}
logDocuments = true
backends = ["html5"]
// only ouput PDF documentation for non-SNAPSHOT builds
if(!project.getVersion().toString().contains("BUILD-SNAPSHOT")) {
backends += "pdf"
}
options doctype: 'book', eruby: 'erubis'
attributes 'icons': 'font',
'idprefix': '',
'idseparator': '-',
docinfo: 'shared',
revnumber: project.version,
sectanchors: '',
sectnums: '',
'source-highlighter=highlight.js',
'highlightjsdir=js/highlight',
'highlightjs-theme=atom-one-dark-reasonable',
stylesdir: "css/",
stylesheet: 'spring.css',
'spring-version': project.version
}
asciidoctor.dependsOn extractDocResources
task docsZip(type: Zip, dependsOn: ['api', 'asciidoctor', 'dokka']) {
group = "Distribution"
baseName = "spring-framework"
classifier = "docs"
description = "Builds -${classifier} archive containing api and reference " +
"for deployment at http://docs.spring.io/spring-framework/docs."
"for deployment at https://docs.spring.io/spring-framework/docs."
from("src/dist") {
include "changelog.txt"
@@ -87,9 +150,17 @@ task docsZip(type: Zip, dependsOn: 'asciidoctor') {
into "javadoc-api"
}
from (asciidoctor) {
from ("$asciidoctor.outputDir/html5") {
into "spring-framework-reference"
}
from ("$asciidoctor.outputDir/pdf") {
into "spring-framework-reference/pdf"
}
from (dokka) {
into "kdoc-api"
}
}
task schemaZip(type: Zip) {
@@ -97,7 +168,7 @@ task schemaZip(type: Zip) {
baseName = "spring-framework"
classifier = "schema"
description = "Builds -${classifier} archive containing all " +
"XSDs for deployment at http://springframework.org/schema."
"XSDs for deployment at https://springframework.org/schema."
duplicatesStrategy 'exclude'
moduleProjects.each { subproject ->
def Properties schemas = new Properties();
@@ -121,6 +192,7 @@ task schemaZip(type: Zip) {
}
task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) {
group = "Distribution"
baseName = "spring-framework"
classifier = "dist"
@@ -158,6 +230,8 @@ task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) {
}
}
distZip.mustRunAfter subprojects.test
// Create a distribution that contains all dependencies (required and optional).
// Not published by default; only for use when building from source.
task depsZip(type: Zip, dependsOn: distZip) { zipTask ->
@@ -188,4 +262,4 @@ task depsZip(type: Zip, dependsOn: distZip) { zipTask ->
}
}
}
}
}
+11 -3
View File
@@ -11,9 +11,9 @@ eclipse.jdt {
}
// Replace classpath entries with project dependencies (GRADLE-1116)
// http://issues.gradle.org/browse/GRADLE-1116
// https://issues.gradle.org/browse/GRADLE-1116
eclipse.classpath.file.whenMerged { classpath ->
def regexp = /.*?\/([^\/]+)\/build\/[^\/]+\/(?:main|test)/ // only match those that end in main or test (avoids removing necessary entries like build/classes/jaxb)
def regexp = /.*?\/([^\/]+)\/build\/([^\/]+\/)+(?:main|test)/ // only match those that end in main or test (avoids removing necessary entries like build/classes/jaxb)
def projectOutputDependencies = classpath.entries.findAll { entry -> entry.path =~ regexp }
projectOutputDependencies.each { entry ->
def matcher = (entry.path =~ regexp)
@@ -21,7 +21,7 @@ eclipse.classpath.file.whenMerged { classpath ->
def projectName = matcher[0][1]
def path = "/${projectName}"
if(!classpath.entries.find { e -> e instanceof ProjectDependency && e.path == path }) {
def dependency = new ProjectDependency(path, project(":${projectName}").path)
def dependency = new ProjectDependency(path)
dependency.exported = true
classpath.entries.add(dependency)
}
@@ -91,6 +91,14 @@ task cleanEclipseJdtUi(type: Delete) {
delete project.file(".settings/org.eclipse.wst.common.project.facet.core.xml")
}
task eclipseBuildship(type: Copy) {
from rootProject.files(
"src/eclipse/org.eclipse.jdt.ui.prefs",
"src/eclipse/org.eclipse.jdt.core.prefs")
into project.file('.settings/')
outputs.upToDateWhen { false }
}
tasks["eclipseJdt"].dependsOn(eclipseJdtPrepare)
tasks["cleanEclipse"].dependsOn(cleanEclipseJdtUi)
tasks["eclipse"].dependsOn(eclipseSettings, eclipseWstComponent)
+4 -4
View File
@@ -11,11 +11,11 @@ difference between two public Java APIs.
The file jdiff.html contains the reference page for JDiff. The latest
version of JDiff can be downloaded at:
http://sourceforge.net/projects/javadiff
https://sourceforge.net/projects/javadiff
To use the Ant task on your own project, see example.xml. More examples
of using JDiff to compare the public APIs of J2SE1.3 and J2SE1.4 can
be seen at http://www.jdiff.org
be seen at http://javadiff.sourceforge.net/
For an example with the source distribution, run "ant" and
look at the HTML output in ./build/reports/example/changes.html
@@ -40,7 +40,7 @@ Acknowledgements
JDiff uses Stuart D. Gathman's Java translation of Gene Myers' O(ND)
difference algorithm.
JDiff uses Xerces 1.4.2 from http://www.apache.org.
JDiff uses Xerces 1.4.2 from https://www.apache.org.
JDiff also includes a script to use the classdoc application from
http://classdoc.sourceforge.net or http://www.jensgulden.de, by Jens
@@ -56,4 +56,4 @@ much of this work.
Footnote:
If you are looking for a generalized diff tool for XML, try diffmk from
http://wwws.sun.com/software/xml/developers/diffmk/
https://wwws.sun.com/software/xml/developers/diffmk/
+11 -11
View File
@@ -7,10 +7,10 @@
<BODY BGCOLOR="#ffffff">
<table width="100%">
<tr>
<td align="left"><A href="http://sourceforge.net/projects/javadiff/">
<td align="left"><A href="https://sourceforge.net/projects/javadiff/">
<IMG src="http://javadiff.cvs.sourceforge.net/*checkout*/javadiff/jdiff/lib/jdiff_logo.gif"
width="88" height="31" border="0" alt="JDiff Logo"></A></td>
<td align="right"><A href="http://sourceforge.net"> <IMG src="http://sourceforge.net/sflogo.php?group_id=37160" width="88" height="31" border="0" alt="SourceForge Logo"></A></td>
<td align="right"><A href="https://sourceforge.net"> <IMG src="https://sourceforge.net/sflogo.php?group_id=37160" width="88" height="31" border="0" alt="SourceForge Logo"></A></td>
</tr>
</table>
@@ -21,7 +21,7 @@ width="88" height="31" border="0" alt="JDiff Logo"></A></td>
<BLOCKQUOTE>
<b>JDiff</b> is a Javadoc <a
href="http://java.sun.com/j2se/javadoc">doclet</a> which generates an
href="https://java.sun.com/j2se/javadoc">doclet</a> which generates an
HTML report of all the packages, classes, constructors, methods, and
fields which have been removed, added or changed in any way, including
their documentation, when two APIs are compared. This is very useful
@@ -312,7 +312,7 @@ the HTML output to the given directory.
<code>-javadocnew</code> &lt;<i>javadoc files location for the new API</i>></DT>
<DD STYLE="margin-right: 2cm; margin-bottom: 0.5cm">
The location of existing Javadoc files
for the new API, e.g. "http://java.sun.com/j2se/<b>1.5.0</b>/docs/api/" for the
for the new API, e.g. "https://java.sun.com/j2se/<b>1.5.0</b>/docs/api/" for the
public documentation for J2SE1.5.0. The default value is "../", which implies
that the documentation directory generated by Javadoc is at the same level as
the "changes.html" file generated by JDiff. Slashes are always
@@ -325,7 +325,7 @@ the HTML output to the given directory.
<DT STYLE="margin-right: 2cm; margin-bottom: 0.5cm">
<code>-javadocold</code> &lt;<i>javadoc files location for the old API</i>></DT>
<DD STYLE="margin-right: 2cm; margin-bottom: 0.5cm"> The location of existing
Javadoc files for the old API, e.g. "http://java.sun.com/j2se/<b>1.5.0</b>/docs/API/"
Javadoc files for the old API, e.g. "https://java.sun.com/j2se/<b>1.5.0</b>/docs/API/"
for the public documentation for J2SE1.5.0. The default value is null, which
results in no links to Javadoc-generated documentation for the previous
release. Slashes are always forward in the argument, since this is an HTML
@@ -426,7 +426,7 @@ the HTML output to the given directory.
<code>-showallchanges</code></DT>
<DD STYLE="margin-right: 2cm; margin-bottom: 0.5cm">
If this argument is used, JDiff will show changes in
native and synchronized modifiers. See <a href="http://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/javadoc.html#generatedapideclarations">here</a> for why these are not shown by default.
native and synchronized modifiers. See <a href="https://java.sun.com/j2se/1.4.1/docs/tooldocs/solaris/javadoc.html#generatedapideclarations">here</a> for why these are not shown by default.
</DD>
<DT STYLE="margin-right: 2cm; margin-bottom: 0.5cm">
@@ -547,7 +547,7 @@ moved to the end of the file and placed inside XML comments.
<BLOCKQUOTE> The text which is added can be HTML text if necessary, but if the
HTML is incorrect, JDiff may fail to read the comments file and exit. Note that
the required HTML is in fact <a href="http://www.w3.org/TR/xhtml1/diffs.html">XHTML</a>. Since this HTML is stored in an XML document, single tags without their closing ("slash") element are not permitted.
the required HTML is in fact <a href="https://www.w3.org/TR/xhtml1/diffs.html">XHTML</a>. Since this HTML is stored in an XML document, single tags without their closing ("slash") element are not permitted.
For example, most browsers permit HTML which looks like "&lt;p>Here is some
text.", with no closing tag. XML requires that either a closing tag exists ("&lt;/p>"),
or that the single tag is closed, e.g. "&lt;p/>Here is some text.".
@@ -988,7 +988,7 @@ it can tell you how the content has changed.
Nor does it
compare what the methods in an API do; if JDiff could tell you what had changed about the way two
versions of an API execute, the <a
href="http://en.wikipedia.org/wiki/Halting_Problem">Halting
href="https://en.wikipedia.org/wiki/Halting_Problem">Halting
Problem</a> would be solved, and our lives would be very different.</li>
<li>On a P3 450MHz machine, to scan all of the J2SE <code>Java</code>
and <code>javax</code> packages and generate XML takes about 2 minutes
@@ -1002,14 +1002,14 @@ per version. To generate a report from the XML files takes about 30s</li>
<BLOCKQUOTE>
<UL>
<LI><A HREF="http://www.sys-con.com/java">Java Developer's Journal
<LI><A HREF="https://www.sys-con.com/java">Java Developer's Journal
</A>, April 2002 contained an article about JDiff. The article
can also be <a
href="http://javadiff.cvs.sourceforge.net/*checkout*/javadiff/jdiff/doc/JDiffArticle.pdf">found
here</a>.</LI>
<LI><A HREF="http://java.sun.com/j2se/javadoc/">Javadoc</A> and Doclet
<LI><A HREF="https://java.sun.com/j2se/javadoc/">Javadoc</A> and Doclet
documentation from Sun.</LI>
<LI><A HREF="http://java.sun.com/j2se/javadoc/faq.html#doclets">Third-party
<LI><A HREF="https://java.sun.com/j2se/javadoc/faq.html#doclets">Third-party
doclets</a> as listed by Sun.</LI>
<LI><A HREF="http://www.doclet.com">Third-party doclets</a> as listed by others.</LI>
</UL>
+9 -4
View File
@@ -18,6 +18,11 @@ def customizePom(pom, gradleProject) {
"$dep.scope:$dep.groupId:$dep.artifactId"
}
def managedVersions = dependencyManagement.managedVersions
generatedPom.dependencies.findAll{dep -> !dep.version }.each { dep ->
dep.version = managedVersions["${dep.groupId}:${dep.artifactId}"]
}
// add all items necessary for maven central publication
generatedPom.project {
name = gradleProject.description
@@ -25,12 +30,12 @@ def customizePom(pom, gradleProject) {
url = "https://github.com/spring-projects/spring-framework"
organization {
name = "Spring IO"
url = "http://projects.spring.io/spring-framework"
url = "https://projects.spring.io/spring-framework"
}
licenses {
license {
name "Apache License, Version 2.0"
url "http://www.apache.org/licenses/LICENSE-2.0"
url "https://www.apache.org/licenses/LICENSE-2.0"
distribution "repo"
}
}
@@ -47,8 +52,8 @@ def customizePom(pom, gradleProject) {
}
}
issueManagement {
system = "Jira"
url = "https://jira.springsource.org/browse/SPR"
system = "GitHub"
url = "https://github.com/spring-projects/spring-framework/issues"
}
}
}
-67
View File
@@ -1,67 +0,0 @@
/*
* Copyright 2002-2017 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
configure(allprojects) { project ->
ext.snifferVersion = "1.15"
configurations {
sniffer
javaApiSignature
}
dependencies {
sniffer("org.codehaus.mojo:animal-sniffer-ant-tasks:${snifferVersion}")
javaApiSignature("org.codehaus.mojo.signature:java18:1.0@signature")
}
}
task copyJavaApiSignature(type: Copy) {
ext.to = file("$buildDir/javaApiSignature/")
description "Copy the resolved Animal Sniffer signature dependency artifact to a known location and name"
from configurations.javaApiSignature
into to
rename '.*signature', 'javaApi.signature'
}
task sniff {
group = "Verification"
description = "Checks the Java API signatures"
dependsOn compileJava
dependsOn copyJavaApiSignature
inputs.dir sourceSets.main.output.classesDir
inputs.dir copyJavaApiSignature.to
doLast {
ant.taskdef(
name: 'animalSniffer',
classname: 'org.codehaus.mojo.animal_sniffer.ant.CheckSignatureTask',
classpath: configurations.sniffer.asPath
)
// TODO: Animal Sniffer currently chokes on optional JDK 9 bytecode in AspectJ 1.9 beta 5
// ant.animalSniffer(
// signature: "$buildDir/javaApiSignature/javaApi.signature",
// classpath: sourceSets.main.compileClasspath.asPath) {
// path(path: sourceSets.main.output.classesDir)
// annotation(className: "org.springframework.lang.UsesSunHttpServer")
// }
}
}
Binary file not shown.
+1 -2
View File
@@ -1,6 +1,5 @@
#Mon Apr 10 21:20:52 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.3.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip
Vendored
+20 -4
View File
@@ -1,5 +1,21 @@
#!/usr/bin/env sh
#
# Copyright 2015 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.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
@@ -29,16 +45,16 @@ APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
GRADLE_OPTS="-XX:MaxMetaspaceSize=1024m -Xmx1024m $GRADLE_OPTS"
DEFAULT_JVM_OPTS=""
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
warn () {
echo "$*"
}
die ( ) {
die () {
echo
echo "$*"
echo
@@ -156,7 +172,7 @@ if $cygwin ; then
fi
# Escape application args
save ( ) {
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
Vendored
+17 -1
View File
@@ -1,3 +1,19 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@@ -15,7 +31,7 @@ set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set GRADLE_OPTS=-XX:MaxMetaspaceSize=1024m -Xmx1024m -XX:MaxHeapSize=256m %GRADLE_OPTS%
set DEFAULT_JVM_OPTS=
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
-117
View File
@@ -1,117 +0,0 @@
@echo off
set STS_TEST_VERSION='2.9.2.RELEASE'
set CURRENT_DIR=%~dp0
cd %CURRENT_DIR%
cls
echo.
echo -----------------------------------------------------------------------
echo Spring Framework Eclipse/STS project import guide
echo.
echo This script will guide you through the process of importing the
echo Spring Framework sources into Eclipse/STS. It is recommended that you
echo have a recent version of the SpringSource Tool Suite (this script has
echo been tested against STS %STS_TEST_VERSION%), but at the minimum you will
echo need Eclipse + AJDT.
echo.
echo If you need to download and install STS, please do that now by
echo visiting http://spring.io/tools/sts/all
echo.
echo Otherwise, press enter and we'll begin.
pause
REM this command:
REM - wipes out any existing Eclipse metadata
REM - generates OXM test classes to avoid errors on import into Eclipse
REM - generates metadata for all subprojects
REM - skips metadata gen for the root project (-x :eclipse) to work
REM around Eclipse's inability to import hierarchical project structures
REM SET COMMAND="./gradlew --no-daemon cleanEclipse :spring-oxm:compileTestJava eclipse -x :eclipse"
SET COMMAND=gradlew --no-daemon cleanEclipse :spring-oxm:compileTestJava eclipse -x :eclipse
echo.
echo -----------------------------------------------------------------------
echo STEP 1: Generate subproject Eclipse metadata
echo.
echo The first step will be to generate Eclipse project metadata for each
echo of the spring-* subprojects. This happens via the built-in
echo "Gradle wrapper" script (./gradlew in this directory). If this is your
echo first time using the Gradle wrapper, this step may take a few minutes
echo while a Gradle distribution is downloaded for you.
echo.
echo The command run will be:
echo.
echo %COMMAND%
echo.
echo Press enter when ready.
pause
call %COMMAND%
if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
echo.
echo -----------------------------------------------------------------------
echo STEP 2: Import subprojects into Eclipse/STS
echo.
echo Within Eclipse/STS, do the following:
echo.
echo File ^> Import... ^> Existing Projects into Workspace
echo ^> When prompted for the 'root directory', provide %CURRENT_DIR%
echo ^> Press enter. You will see the modules show up under "Projects"
echo ^> All projects should be selected/checked. Click Finish.
echo ^> When the project import is complete, you should have no errors.
echo.
echo When the above is complete, return here and press the enter key.
pause
set COMMAND=gradlew --no-daemon :eclipse
echo.
echo -----------------------------------------------------------------------
echo STEP 3: generate root project Eclipse metadata
echo.
echo Unfortunately, Eclipse does not allow for importing project
echo hierarchies, so we had to skip root project metadata generation in the
echo during step 1. In this step we simply generate root project metadata
echo so you can import it in the next step.
echo.
echo The command run will be:
echo.
echo %COMMAND%
echo.
echo Press the enter key when ready.
pause
call %COMMAND%
if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
echo.
echo -----------------------------------------------------------------------
echo STEP 4: Import root project into Eclipse/STS
echo.
echo Follow the project import steps listed in step 2 above to import the
echo root project.
echo.
echo Press enter when complete, and move on to the final step.
pause
echo.
echo -----------------------------------------------------------------------
echo STEP 5: Enable Git support for all projects
echo.
echo - In the Eclipse/STS Package Explorer, select all spring* projects.
echo - Right-click to open the context menu and select Team ^> Share Project...
echo - In the Share Project dialog that appears, select Git and press Next
echo - Check "Use or create repository in parent folder of project"
echo - Click Finish
echo.
echo When complete, you'll have Git support enabled for all projects.
echo.
echo You're ready to code! Goodbye!
+49
View File
@@ -0,0 +1,49 @@
# Spring Framework - Eclipse/STS Project Import Guide
This document will guide you through the process of importing the Spring Framework
projects into Eclipse or the Spring Tool Suite (STS). It is recommended that you have a
recent version of Eclipse or STS. As a bare minimum you will need Eclipse with full Java
8 support, the AspectJ Development Tools (AJDT), and the Groovy Compiler.
The following instructions have been tested against
[Spring Tool Suite](https://spring.io/tools) (_STS_) 3.9.4 and 4.0.0.M11 with
[Eclipse Buildship](https://projects.eclipse.org/projects/tools.buildship) (Eclipse
Plug-ins for Gradle). The instructions should work with the latest Eclipse distribution
as long as you install
[Buildship](https://marketplace.eclipse.org/content/buildship-gradle-integration). Note
that STS 4 comes with Buildship preinstalled.
## Steps
_Within your locally cloned `spring-framework` working directory:_
1. Precompile `spring-oxm` with `./gradlew :spring-oxm:compileTestJava`
2. Import into Eclipse (File -> Import -> Gradle -> Existing Gradle Project -> Navigate
to directory -> Select Finish)
3. If prompted, exclude the `spring-aspects` module (or after the import by closing or
deleting the project)
4. In the `spring-oxm` project, add the `jaxb` folder in
`build/generated-sources` to the build path (right click on them and select
`Build Path -> Use as Source Folder`)
5. To apply project specific settings run `./gradlew eclipseBuildship`
7. Code away
## Known Issues
1. `spring-core` and `spring-oxm` should be pre-compiled due to repackaged dependencies.
- See `*RepackJar` tasks in the build.
2. `spring-aspects` does not compile due to references to aspect types unknown to Eclipse.
- If you install [AJDT](https://www.eclipse.org/ajdt/downloads/) into Eclipse it should
work.
3. While JUnit tests pass from the command line with Gradle, some may fail when run from
the IDE.
- Resolving this is a work in progress.
- If attempting to run all JUnit tests from within the IDE, you will likely need to set
the following VM options to avoid out of memory errors:
`-XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m`
## Tips
In any case, please do not check in your own generated `.classpath` file, `.project`
file, or `.settings` folder. You'll notice these files are already intentionally in
`.gitignore`. The same policy holds for IDEA metadata.
-135
View File
@@ -1,135 +0,0 @@
cd `dirname $0`
clear
cat <<EOM
------------------------------------------------------------------------
Spring Framework - Eclipse/STS Project Import Guide
This script will guide you through the process of importing the Spring
Framework projects into Eclipse or the Spring Tool Suite (STS). It is
recommended that you have a recent version of Eclipse or STS. As a bare
minimum you will need Eclipse with full Java 8 support, the AspectJ
Development Tools (AJDT), and the Groovy Compiler.
This script has been tested against:
- STS: 3.6.3.RELEASE (Eclipse Luna SR1 4.4.1)
- AJDT: 2.2.4.e44x-20141118-0700 (Luna 4.4)
If you need to download and install Eclipse or STS, please do that now
by visiting one of the following sites:
- Eclipse downloads: http://download.eclipse.org/eclipse/downloads
- STS downloads: http://spring.io/tools/sts/all
- STS nightly builds: http://dist.springsource.com/snapshot/STS/nightly-distributions.html
If you need to install a recent CI build for AJDT (i.e., so that the
spring-aspects module properly compiles in Eclipse/STS), click on the
"Artifacts" tab of a successful CI build and copy the link to the
"update site" which you can then use to install or update AJDT within
Eclipse/STS.
- AJDT CI builds: https://build.spring.io/browse/AJDT-AE44
Once Eclipse/STS is installed, press enter, and we'll begin.
EOM
read
# this command:
# - wipes out any existing Eclipse metadata
# - generates OXM test classes to avoid errors on import into Eclipse
# - generates metadata for all subprojects
# - skips metadata gen for the root project (-x :eclipse) to work
# around Eclipse's inability to import hierarchical project structures
COMMAND="./gradlew --no-daemon cleanEclipse :spring-oxm:compileTestJava eclipse -x :eclipse"
cat <<EOM
------------------------------------------------------------------------
STEP 1: Generate subproject Eclipse metadata
The first step will be to generate Eclipse project metadata for each of
the spring-* subprojects. This happens via the built-in "Gradle wrapper"
script (./gradlew in this directory). If this is your first time using
the Gradle wrapper, this step may take a few minutes while a Gradle
distribution is downloaded for you.
The command run will be:
$COMMAND
Press enter when ready.
EOM
read
$COMMAND || exit
cat <<EOM
------------------------------------------------------------------------
STEP 2: Import subprojects into Eclipse/STS
Within Eclipse/STS, do the following:
- File > Import... > Existing Projects into Workspace
- When prompted for the 'root directory', provide $PWD.
- Press enter. You will see the modules show up under "Projects".
- All projects should be selected/checked. Click Finish.
- When the project import is complete, you should have no errors.
When the above is complete, return here and press the enter key.
EOM
read
COMMAND="./gradlew --no-daemon :eclipse"
cat <<EOM
------------------------------------------------------------------------
STEP 3: Generate root project Eclipse metadata
Unfortunately, Eclipse does not support importing project hierarchies,
so we had to skip root project metadata generation during step 1. In
this step we simply generate root project metadata so that you can
import it in the next step.
The command run will be:
$COMMAND
Press the enter key when ready.
EOM
read
$COMMAND || exit
cat <<EOM
------------------------------------------------------------------------
STEP 4: Import root project into Eclipse/STS
Follow the project import steps listed in step 2 above to import the
root "spring" project.
Press enter when complete, and move on to the final step.
EOM
read
cat <<EOM
------------------------------------------------------------------------
STEP 5: Enable Git support for all projects
- In the Eclipse/STS Package Explorer, select all spring* projects.
- Right-click to open the context menu and select Team > Share Project...
- In the Share Project dialog that appears, select Git and press Next.
- Check "Use or create repository in parent folder of project".
- Click Finish.
When complete, you'll have Git support enabled for all projects.
You're ready to code! Goodbye!
EOM
+6 -4
View File
@@ -4,7 +4,7 @@ The following has been tested against IntelliJ IDEA 2016.2.2
_Within your locally cloned spring-framework working directory:_
1. Precompile `spring-oxm` with `./gradlew cleanIdea :spring-oxm:compileTestJava`
1. Precompile `spring-oxm` with `./gradlew :spring-oxm:compileTestJava`
2. Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
3. When prompted exclude the `spring-aspects` module (or after the import via File-> Project Structure -> Modules)
4. Code away
@@ -14,12 +14,14 @@ _Within your locally cloned spring-framework working directory:_
1. `spring-core` and `spring-oxm` should be pre-compiled due to repackaged dependencies.
See `*RepackJar` tasks in the build and https://youtrack.jetbrains.com/issue/IDEA-160605).
2. `spring-aspects` does not compile due to references to aspect types unknown to
IntelliJ IDEA. See http://youtrack.jetbrains.com/issue/IDEA-64446 for details. In the meantime, the
IntelliJ IDEA. See https://youtrack.jetbrains.com/issue/IDEA-64446 for details. In the meantime, the
'spring-aspects' can be excluded from the project to avoid compilation errors.
3. While JUnit tests pass from the command line with Gradle, some may fail when run from
IntelliJ IDEA. Resolving this is a work in progress. If attempting to run all JUnit tests from within
IntelliJ IDEA, you will likely need to set the following VM options to avoid out of memory errors:
-XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m
4. If you invoke "Rebuild Project" in the IDE, you'll have to generate some test
resources of the `spring-oxm` module again (`./gradlew :spring-oxm:compileTestJava`)
## Tips
@@ -29,6 +31,6 @@ You'll notice these files are already intentionally in .gitignore. The same poli
## FAQ
Q. What about IntelliJ IDEA's own [Gradle support](http://confluence.jetbrains.net/display/IDEADEV/Gradle+integration)?
Q. What about IntelliJ IDEA's own [Gradle support](https://confluence.jetbrains.net/display/IDEADEV/Gradle+integration)?
A. Keep an eye on http://youtrack.jetbrains.com/issue/IDEA-53476
A. Keep an eye on https://youtrack.jetbrains.com/issue/IDEA-53476
+6 -3
View File
@@ -1,13 +1,11 @@
rootProject.name = "spring"
include "spring-aop"
include "spring-aspects"
include "spring-beans"
include "spring-beans-groovy"
include "spring-context"
include "spring-context-support"
include "spring-context-indexer"
include "spring-core"
include "spring-core-coroutines"
include "spring-expression"
include "spring-instrument"
include "spring-jcl"
@@ -27,3 +25,8 @@ include "spring-framework-bom"
// Exposes gradle buildSrc for IDE support
include "buildSrc"
rootProject.children.find{ it.name == "buildSrc" }.name = "spring-build-src"
rootProject.name = "spring"
rootProject.children.each {project ->
project.buildFileName = "${project.name}.gradle"
}
+9
View File
@@ -0,0 +1,9 @@
description = "Spring AOP"
dependencies {
compile(project(":spring-beans"))
compile(project(":spring-core"))
optional("org.aspectj:aspectjweaver:${aspectjVersion}")
optional("org.apache.commons:commons-pool2:2.6.0")
optional("com.jamonapi:jamon:2.81")
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -20,7 +20,7 @@ package org.aopalliance.aop;
* Superclass for all AOP infrastructure exceptions.
* Unchecked, as such exceptions are fatal and end user
* code shouldn't be forced to catch them.
*
*
* @author Rod Johnson
* @author Bob Lee
* @author Juergen Hoeller
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -19,7 +19,7 @@ package org.aopalliance.intercept;
import java.lang.reflect.Constructor;
/**
* Description of an invocation to a constuctor, given to an
* Description of an invocation to a constructor, given to an
* interceptor upon constructor-call.
*
* <p>A constructor invocation is a joinpoint and can be intercepted
@@ -30,12 +30,12 @@ import java.lang.reflect.Constructor;
*/
public interface ConstructorInvocation extends Invocation {
/**
* Get the constructor being called.
* <p>This method is a friendly implementation of the
* {@link Joinpoint#getStaticPart()} method (same result).
* @return the constructor being called
*/
Constructor<?> getConstructor();
/**
* Get the constructor being called.
* <p>This method is a friendly implementation of the
* {@link Joinpoint#getStaticPart()} method (same result).
* @return the constructor being called
*/
Constructor<?> getConstructor();
}
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2019 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,7 +24,7 @@ import org.aopalliance.aop.Advice;
* <p>A generic interceptor can intercept runtime events that occur
* within a base program. Those events are materialized by (reified
* in) joinpoints. Runtime joinpoints can be invocations, field
* access, exceptions...
* access, exceptions...
*
* <p>This interface is not used directly. Use the sub-interfaces
* to intercept specific events. For instance, the following class
@@ -32,8 +32,8 @@ import org.aopalliance.aop.Advice;
* debugger:
*
* <pre class=code>
* class DebuggingInterceptor implements MethodInterceptor,
* ConstructorInterceptor, FieldInterceptor {
* class DebuggingInterceptor implements MethodInterceptor,
* ConstructorInterceptor {
*
* Object invoke(MethodInvocation i) throws Throwable {
* debug(i.getMethod(), i.getThis(), i.getArgs());
@@ -44,16 +44,6 @@ import org.aopalliance.aop.Advice;
* debug(i.getConstructor(), i.getThis(), i.getArgs());
* return i.proceed();
* }
*
* Object get(FieldAccess fa) throws Throwable {
* debug(fa.getField(), fa.getThis(), null);
* return fa.proceed();
* }
*
* Object set(FieldAccess fa) throws Throwable {
* debug(fa.getField(), fa.getThis(), fa.getValueToSet());
* return fa.proceed();
* }
*
* void debug(AccessibleObject ao, Object this, Object value) {
* ...
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -41,7 +41,7 @@ package org.aopalliance.intercept;
*/
@FunctionalInterface
public interface MethodInterceptor extends Interceptor {
/**
* Implement this method to perform extra treatments before and
* after the invocation. Polite implementations would certainly
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -32,7 +32,7 @@ public interface MethodInvocation extends Invocation {
/**
* Get the method being called.
* <p>This method is a frienly implementation of the
* <p>This method is a friendly implementation of the
* {@link Joinpoint#getStaticPart()} method (same result).
* @return the method being called
*/
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2017 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -31,9 +31,18 @@ import org.aopalliance.aop.Advice;
* implemented using interception.
*
* @author Rod Johnson
* @author Juergen Hoeller
*/
public interface Advisor {
/**
* Common placeholder for an empty {@code Advice} to be returned from
* {@link #getAdvice()} if no proper advice has been configured (yet).
* @since 5.0
*/
Advice EMPTY_ADVICE = new Advice() {};
/**
* Return the advice part of this aspect. An advice may be an
* interceptor, a before advice, a throws advice, etc.
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -18,6 +18,8 @@ package org.springframework.aop;
import java.lang.reflect.Method;
import org.springframework.lang.Nullable;
/**
* After returning advice is invoked only on normal method return, not if an
* exception is thrown. Such advice can see the return value, but cannot change it.
@@ -39,6 +41,6 @@ public interface AfterReturningAdvice extends AfterAdvice {
* allowed by the method signature. Otherwise the exception
* will be wrapped as a runtime exception.
*/
void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable;
void afterReturning(@Nullable Object returnValue, Method method, Object[] args, @Nullable Object target) throws Throwable;
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -33,8 +33,7 @@ public interface IntroductionAwareMethodMatcher extends MethodMatcher {
* instead of the 2-arg {@link #matches(java.lang.reflect.Method, Class)} method
* if the caller supports the extended IntroductionAwareMethodMatcher interface.
* @param method the candidate method
* @param targetClass the target class (may be {@code null}, in which case
* the candidate class must be taken to be the method's declaring class)
* @param targetClass the target class
* @param hasIntroductions {@code true} if the object on whose behalf we are
* asking is the subject on one or more introductions; {@code false} otherwise
* @return whether or not this method matches statically
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -18,14 +18,15 @@ package org.springframework.aop;
import java.lang.reflect.Method;
import org.springframework.lang.Nullable;
/**
* Advice invoked before a method is invoked. Such advices cannot
* prevent the method call proceeding, unless they throw a Throwable.
*
* @author Rod Johnson
* @see AfterReturningAdvice
* @see ThrowsAdvice
*
* @author Rod Johnson
*/
public interface MethodBeforeAdvice extends BeforeAdvice {
@@ -39,6 +40,6 @@ public interface MethodBeforeAdvice extends BeforeAdvice {
* allowed by the method signature. Otherwise the exception
* will be wrapped as a runtime exception.
*/
void before(Method method, Object[] args, Object target) throws Throwable;
void before(Method method, Object[] args, @Nullable Object target) throws Throwable;
}
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -48,13 +48,13 @@ import java.lang.reflect.Method;
public interface MethodMatcher {
/**
* Perform static checking whether the given method matches. If this
* returns {@code false} or if the {@link #isRuntime()} method
* returns {@code false}, no runtime check (i.e. no.
* {@link #matches(java.lang.reflect.Method, Class, Object[])} call) will be made.
* Perform static checking whether the given method matches.
* <p>If this returns {@code false} or if the {@link #isRuntime()}
* method returns {@code false}, no runtime check (i.e. no
* {@link #matches(java.lang.reflect.Method, Class, Object[])} call)
* will be made.
* @param method the candidate method
* @param targetClass the target class (may be {@code null}, in which case
* the candidate class must be taken to be the method's declaring class)
* @param targetClass the target class
* @return whether or not this method matches statically
*/
boolean matches(Method method, Class<?> targetClass);
@@ -80,8 +80,7 @@ public interface MethodMatcher {
* immediately before potential running of the advice, after any
* advice earlier in the advice chain has run.
* @param method the candidate method
* @param targetClass the target class (may be {@code null}, in which case
* the candidate class must be taken to be the method's declaring class)
* @param targetClass the target class
* @param args arguments to the method
* @return whether there's a runtime match
* @see MethodMatcher#matches(Method, Class)
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -18,6 +18,8 @@ package org.springframework.aop;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.lang.Nullable;
/**
* Extension of the AOP Alliance {@link org.aopalliance.intercept.MethodInvocation}
* interface, allowing access to the proxy that the method invocation was made through.
@@ -73,7 +75,7 @@ public interface ProxyMethodInvocation extends MethodInvocation {
* @param key the name of the attribute
* @param value the value of the attribute, or {@code null} to reset it
*/
void setUserAttribute(String key, Object value);
void setUserAttribute(String key, @Nullable Object value);
/**
* Return the value of the specified user attribute.
@@ -81,6 +83,7 @@ public interface ProxyMethodInvocation extends MethodInvocation {
* @return the value of the attribute, or {@code null} if not set
* @see #setUserAttribute
*/
@Nullable
Object getUserAttribute(String key);
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,6 +16,8 @@
package org.springframework.aop;
import org.springframework.lang.Nullable;
/**
* Minimal interface for exposing the target class behind a proxy.
*
@@ -34,6 +36,7 @@ public interface TargetClassAware {
* (typically a proxy configuration or an actual proxy).
* @return the target Class, or {@code null} if not known
*/
@Nullable
Class<?> getTargetClass();
}
@@ -1,11 +1,11 @@
/*<
* Copyright 2002-2012 the original author or authors.
/*
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,6 +16,8 @@
package org.springframework.aop;
import org.springframework.lang.Nullable;
/**
* A {@code TargetSource} is used to obtain the current "target" of
* an AOP invocation, which will be invoked via reflection if no around
@@ -29,24 +31,24 @@ package org.springframework.aop;
* {@code TargetSources} directly: this is an AOP framework interface.
*
* @author Rod Johnson
* @author Juergen Hoeller
*/
public interface TargetSource extends TargetClassAware {
/**
* Return the type of targets returned by this {@link TargetSource}.
* <p>Can return {@code null}, although certain usages of a
* {@code TargetSource} might just work with a predetermined
* target class.
* <p>Can return {@code null}, although certain usages of a {@code TargetSource}
* might just work with a predetermined target class.
* @return the type of targets returned by this {@link TargetSource}
*/
@Override
@Nullable
Class<?> getTargetClass();
/**
* Will all calls to {@link #getTarget()} return the same object?
* <p>In that case, there will be no need to invoke
* {@link #releaseTarget(Object)}, and the AOP framework can cache
* the return value of {@link #getTarget()}.
* <p>In that case, there will be no need to invoke {@link #releaseTarget(Object)},
* and the AOP framework can cache the return value of {@link #getTarget()}.
* @return {@code true} if the target is immutable
* @see #getTarget
*/
@@ -55,14 +57,16 @@ public interface TargetSource extends TargetClassAware {
/**
* Return a target instance. Invoked immediately before the
* AOP framework calls the "target" of an AOP method invocation.
* @return the target object, which contains the joinpoint
* @return the target object which contains the joinpoint,
* or {@code null} if there is no actual target instance
* @throws Exception if the target object can't be resolved
*/
@Nullable
Object getTarget() throws Exception;
/**
* Release the given target object obtained from the
* {@link #getTarget()} method.
* {@link #getTarget()} method, if any.
* @param target object obtained from a call to {@link #getTarget()}
* @throws Exception if the object can't be released
*/
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,7 +24,7 @@ import java.io.Serializable;
* @author Rod Johnson
*/
@SuppressWarnings("serial")
class TrueClassFilter implements ClassFilter, Serializable {
final class TrueClassFilter implements ClassFilter, Serializable {
public static final TrueClassFilter INSTANCE = new TrueClassFilter();
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -25,7 +25,7 @@ import java.lang.reflect.Method;
* @author Rod Johnson
*/
@SuppressWarnings("serial")
class TrueMethodMatcher implements MethodMatcher, Serializable {
final class TrueMethodMatcher implements MethodMatcher, Serializable {
public static final TrueMethodMatcher INSTANCE = new TrueMethodMatcher();
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,7 +24,7 @@ import java.io.Serializable;
* @author Rod Johnson
*/
@SuppressWarnings("serial")
class TruePointcut implements Pointcut, Serializable {
final class TruePointcut implements Pointcut, Serializable {
public static final TruePointcut INSTANCE = new TruePointcut();
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -42,6 +42,7 @@ import org.springframework.aop.support.MethodMatchers;
import org.springframework.aop.support.StaticMethodMatcher;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.CollectionUtils;
@@ -62,7 +63,7 @@ import org.springframework.util.StringUtils;
public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedenceInformation, Serializable {
/**
* Key used in ReflectiveMethodInvocation userAtributes map for the current joinpoint.
* Key used in ReflectiveMethodInvocation userAttributes map for the current joinpoint.
*/
protected static final String JOIN_POINT_KEY = JoinPoint.class.getName();
@@ -103,11 +104,11 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
private final AspectInstanceFactory aspectInstanceFactory;
/**
* The name of the aspect (ref bean) in which this advice was defined (used
* when determining advice precedence so that we can determine
* The name of the aspect (ref bean) in which this advice was defined
* (used when determining advice precedence so that we can determine
* whether two pieces of advice come from the same aspect).
*/
private String aspectName;
private String aspectName = "";
/**
* The order of declaration of this advice within the aspect.
@@ -116,15 +117,18 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
/**
* This will be non-null if the creator of this advice object knows the argument names
* and sets them explicitly
* and sets them explicitly.
*/
private String[] argumentNames = null;
@Nullable
private String[] argumentNames;
/** Non-null if after throwing advice binds the thrown value */
private String throwingName = null;
/** Non-null if after throwing advice binds the thrown value. */
@Nullable
private String throwingName;
/** Non-null if after returning advice binds the return value */
private String returningName = null;
/** Non-null if after returning advice binds the return value. */
@Nullable
private String returningName;
private Class<?> discoveredReturningType = Object.class;
@@ -132,20 +136,22 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
/**
* Index for thisJoinPoint argument (currently only
* supported at index 0 if present at all)
* supported at index 0 if present at all).
*/
private int joinPointArgumentIndex = -1;
/**
* Index for thisJoinPointStaticPart argument (currently only
* supported at index 0 if present at all)
* supported at index 0 if present at all).
*/
private int joinPointStaticPartArgumentIndex = -1;
@Nullable
private Map<String, Integer> argumentBindings;
private boolean argumentsIntrospected = false;
@Nullable
private Type discoveredReturningGenericType;
// Note: Unlike return type, no such generic information is needed for the throwing type,
// since Java doesn't allow exception types to be parameterized.
@@ -207,6 +213,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
/**
* Return the ClassLoader for aspect instances.
*/
@Nullable
public final ClassLoader getAspectClassLoader() {
return this.aspectInstanceFactory.getAspectClassLoader();
}
@@ -217,6 +224,9 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
}
/**
* Set the name of the aspect (bean) in which the advice was declared.
*/
public void setAspectName(String name) {
this.aspectName = name;
}
@@ -227,7 +237,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
}
/**
* Sets the <b>declaration order</b> of this advice within the aspect
* Set the declaration order of this advice within the aspect.
*/
public void setDeclarationOrder(int order) {
this.declarationOrder = order;
@@ -295,8 +305,8 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
}
catch (Throwable ex) {
throw new IllegalArgumentException("Returning name '" + name +
"' is neither a valid argument name nor the fully-qualified name of a Java type on the classpath. " +
"Root cause: " + ex);
"' is neither a valid argument name nor the fully-qualified " +
"name of a Java type on the classpath. Root cause: " + ex);
}
}
}
@@ -305,6 +315,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
return this.discoveredReturningType;
}
@Nullable
protected Type getDiscoveredReturningGenericType() {
return this.discoveredReturningGenericType;
}
@@ -329,8 +340,8 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
}
catch (Throwable ex) {
throw new IllegalArgumentException("Throwing name '" + name +
"' is neither a valid argument name nor the fully-qualified name of a Java type on the classpath. " +
"Root cause: " + ex);
"' is neither a valid argument name nor the fully-qualified " +
"name of a Java type on the classpath. Root cause: " + ex);
}
}
}
@@ -366,7 +377,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
* to which argument name. There are multiple strategies for determining
* this binding, which are arranged in a ChainOfResponsibility.
*/
public synchronized final void calculateArgumentBindings() {
public final synchronized void calculateArgumentBindings() {
// The simple case... nothing to bind.
if (this.argumentsIntrospected || this.parameterTypes.length == 0) {
return;
@@ -374,10 +385,8 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
int numUnboundArgs = this.parameterTypes.length;
Class<?>[] parameterTypes = this.aspectJAdviceMethod.getParameterTypes();
if (maybeBindJoinPoint(parameterTypes[0]) || maybeBindProceedingJoinPoint(parameterTypes[0])) {
numUnboundArgs--;
}
else if (maybeBindJoinPointStaticPart(parameterTypes[0])) {
if (maybeBindJoinPoint(parameterTypes[0]) || maybeBindProceedingJoinPoint(parameterTypes[0]) ||
maybeBindJoinPointStaticPart(parameterTypes[0])) {
numUnboundArgs--;
}
@@ -461,6 +470,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
}
private void bindExplicitArguments(int numArgumentsLeftToBind) {
Assert.state(this.argumentNames != null, "No argument names available");
this.argumentBindings = new HashMap<>();
int numExpectedArgumentNames = this.aspectJAdviceMethod.getParameterCount();
@@ -501,7 +511,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
}
// configure the pointcut expression accordingly.
configurePointcutParameters(argumentIndexOffset);
configurePointcutParameters(this.argumentNames, argumentIndexOffset);
}
/**
@@ -509,7 +519,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
* pointcut parameters - but returning and throwing vars are handled differently
* and must be removed from the list if present.
*/
private void configurePointcutParameters(int argumentIndexOffset) {
private void configurePointcutParameters(String[] argumentNames, int argumentIndexOffset) {
int numParametersToRemove = argumentIndexOffset;
if (this.returningName != null) {
numParametersToRemove++;
@@ -517,20 +527,20 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
if (this.throwingName != null) {
numParametersToRemove++;
}
String[] pointcutParameterNames = new String[this.argumentNames.length - numParametersToRemove];
String[] pointcutParameterNames = new String[argumentNames.length - numParametersToRemove];
Class<?>[] pointcutParameterTypes = new Class<?>[pointcutParameterNames.length];
Class<?>[] methodParameterTypes = this.aspectJAdviceMethod.getParameterTypes();
int index = 0;
for (int i = 0; i < this.argumentNames.length; i++) {
for (int i = 0; i < argumentNames.length; i++) {
if (i < argumentIndexOffset) {
continue;
}
if (this.argumentNames[i].equals(this.returningName) ||
this.argumentNames[i].equals(this.throwingName)) {
if (argumentNames[i].equals(this.returningName) ||
argumentNames[i].equals(this.throwingName)) {
continue;
}
pointcutParameterNames[index] = this.argumentNames[i];
pointcutParameterNames[index] = argumentNames[i];
pointcutParameterTypes[index] = methodParameterTypes[i];
index++;
}
@@ -541,14 +551,16 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
/**
* Take the arguments at the method execution join point and output a set of arguments
* to the advice method
* to the advice method.
* @param jp the current JoinPoint
* @param jpMatch the join point match that matched this execution join point
* @param returnValue the return value from the method execution (may be null)
* @param ex the exception thrown by the method execution (may be null)
* @return the empty array if there are no arguments
*/
protected Object[] argBinding(JoinPoint jp, JoinPointMatch jpMatch, Object returnValue, Throwable ex) {
protected Object[] argBinding(JoinPoint jp, @Nullable JoinPointMatch jpMatch,
@Nullable Object returnValue, @Nullable Throwable ex) {
calculateArgumentBindings();
// AMC start
@@ -607,13 +619,16 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
* @return the invocation result
* @throws Throwable in case of invocation failure
*/
protected Object invokeAdviceMethod(JoinPointMatch jpMatch, Object returnValue, Throwable ex) throws Throwable {
protected Object invokeAdviceMethod(
@Nullable JoinPointMatch jpMatch, @Nullable Object returnValue, @Nullable Throwable ex)
throws Throwable {
return invokeAdviceMethodWithGivenArgs(argBinding(getJoinPoint(), jpMatch, returnValue, ex));
}
// As above, but in this case we are given the join point.
protected Object invokeAdviceMethod(JoinPoint jp, JoinPointMatch jpMatch, Object returnValue, Throwable t)
throws Throwable {
protected Object invokeAdviceMethod(JoinPoint jp, @Nullable JoinPointMatch jpMatch,
@Nullable Object returnValue, @Nullable Throwable t) throws Throwable {
return invokeAdviceMethodWithGivenArgs(argBinding(jp, jpMatch, returnValue, t));
}
@@ -648,6 +663,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
/**
* Get the current join point match at the join point we are being dispatched on.
*/
@Nullable
protected JoinPointMatch getJoinPointMatch() {
MethodInvocation mi = ExposeInvocationInterceptor.currentInvocation();
if (!(mi instanceof ProxyMethodInvocation)) {
@@ -662,8 +678,10 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence
// 'last man wins' which is not what we want at all.
// Using the expression is guaranteed to be safe, since 2 identical expressions
// are guaranteed to bind in exactly the same way.
@Nullable
protected JoinPointMatch getJoinPointMatch(ProxyMethodInvocation pmi) {
return (JoinPointMatch) pmi.getUserAttribute(this.pointcut.getExpression());
String expression = this.pointcut.getExpression();
return (expression != null ? (JoinPointMatch) pmi.getUserAttribute(expression) : null);
}
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2017 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,6 +17,7 @@
package org.springframework.aop.aspectj;
import org.springframework.core.Ordered;
import org.springframework.lang.Nullable;
/**
* Interface implemented to provide an instance of an AspectJ aspect.
@@ -40,8 +41,10 @@ public interface AspectInstanceFactory extends Ordered {
/**
* Expose the aspect class loader that this factory uses.
* @return the aspect class loader (never {@code null})
* @return the aspect class loader (or {@code null} for the bootstrap loader)
* @see org.springframework.util.ClassUtils#getDefaultClassLoader()
*/
@Nullable
ClassLoader getAspectClassLoader();
}
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -30,6 +30,7 @@ import org.aspectj.weaver.tools.PointcutParser;
import org.aspectj.weaver.tools.PointcutPrimitive;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.lang.Nullable;
import org.springframework.util.StringUtils;
/**
@@ -113,6 +114,7 @@ import org.springframework.util.StringUtils;
* returning {@code null} in the case that the parameter names cannot be discovered.
*
* @author Adrian Colyer
* @author Juergen Hoeller
* @since 2.0
*/
public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscoverer {
@@ -154,38 +156,36 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
}
private boolean raiseExceptions;
/**
* If the advice is afterReturning, and binds the return value, this is the parameter name used.
*/
private String returningName;
/**
* If the advice is afterThrowing, and binds the thrown value, this is the parameter name used.
*/
private String throwingName;
/**
* The pointcut expression associated with the advice, as a simple String.
*/
/** The pointcut expression associated with the advice, as a simple String. */
@Nullable
private String pointcutExpression;
private Class<?>[] argumentTypes;
private boolean raiseExceptions;
private String[] parameterNameBindings;
/** If the advice is afterReturning, and binds the return value, this is the parameter name used. */
@Nullable
private String returningName;
/** If the advice is afterThrowing, and binds the thrown value, this is the parameter name used. */
@Nullable
private String throwingName;
private Class<?>[] argumentTypes = new Class<?>[0];
private String[] parameterNameBindings = new String[0];
private int numberOfRemainingUnboundArguments;
/**
* Create a new discoverer that attempts to discover parameter names
* Create a new discoverer that attempts to discover parameter names.
* from the given pointcut expression.
*/
public AspectJAdviceParameterNameDiscoverer(String pointcutExpression) {
public AspectJAdviceParameterNameDiscoverer(@Nullable String pointcutExpression) {
this.pointcutExpression = pointcutExpression;
}
/**
* Indicate whether {@link IllegalArgumentException} and {@link AmbiguousBindingException}
* must be thrown as appropriate in the case of failing to deduce advice parameter names.
@@ -200,7 +200,7 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
* returning variable name must be specified.
* @param returningName the name of the returning variable
*/
public void setReturningName(String returningName) {
public void setReturningName(@Nullable String returningName) {
this.returningName = returningName;
}
@@ -209,10 +209,11 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
* throwing variable name must be specified.
* @param throwingName the name of the throwing variable
*/
public void setThrowingName(String throwingName) {
public void setThrowingName(@Nullable String throwingName) {
this.throwingName = throwingName;
}
/**
* Deduce the parameter names for an advice method.
* <p>See the {@link AspectJAdviceParameterNameDiscoverer class level javadoc}
@@ -221,6 +222,7 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
* @return the parameter names
*/
@Override
@Nullable
public String[] getParameterNames(Method method) {
this.argumentTypes = method.getParameterTypes();
this.numberOfRemainingUnboundArguments = this.argumentTypes.length;
@@ -270,15 +272,7 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
}
}
}
catch (AmbiguousBindingException ambigEx) {
if (this.raiseExceptions) {
throw ambigEx;
}
else {
return null;
}
}
catch (IllegalArgumentException ex) {
catch (AmbiguousBindingException | IllegalArgumentException ex) {
if (this.raiseExceptions) {
throw ex;
}
@@ -309,6 +303,7 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
* {@link #setRaiseExceptions(boolean) raiseExceptions} has been set to {@code true}
*/
@Override
@Nullable
public String[] getParameterNames(Constructor<?> ctor) {
if (this.raiseExceptions) {
throw new UnsupportedOperationException("An advice method can never be a constructor");
@@ -418,7 +413,7 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
String[] tokens = StringUtils.tokenizeToStringArray(this.pointcutExpression, " ");
for (int i = 0; i < tokens.length; i++) {
String toMatch = tokens[i];
int firstParenIndex = toMatch.indexOf("(");
int firstParenIndex = toMatch.indexOf('(');
if (firstParenIndex != -1) {
toMatch = toMatch.substring(0, firstParenIndex);
}
@@ -473,8 +468,9 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
/*
* If the token starts meets Java identifier conventions, it's in.
*/
private String maybeExtractVariableName(String candidateToken) {
if (candidateToken == null || candidateToken.equals("")) {
@Nullable
private String maybeExtractVariableName(@Nullable String candidateToken) {
if (!StringUtils.hasLength(candidateToken)) {
return null;
}
if (Character.isJavaIdentifierStart(candidateToken.charAt(0)) &&
@@ -496,7 +492,7 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
* Given an args pointcut body (could be {@code args} or {@code at_args}),
* add any candidate variable names to the given list.
*/
private void maybeExtractVariableNamesFromArgs(String argsSpec, List<String> varNames) {
private void maybeExtractVariableNamesFromArgs(@Nullable String argsSpec, List<String> varNames) {
if (argsSpec == null) {
return;
}
@@ -578,7 +574,7 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
if (toMatch.startsWith("!")) {
toMatch = toMatch.substring(1);
}
int firstParenIndex = toMatch.indexOf("(");
int firstParenIndex = toMatch.indexOf('(');
if (firstParenIndex != -1) {
toMatch = toMatch.substring(0, firstParenIndex);
}
@@ -673,7 +669,7 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
}
/**
* Match up args against unbound arguments of primitive types
* Match up args against unbound arguments of primitive types.
*/
private void maybeBindPrimitiveArgsFromPointcutExpression() {
int numUnboundPrimitives = countNumberOfUnboundPrimitiveArguments();
@@ -777,9 +773,10 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov
private int numTokensConsumed;
@Nullable
private String text;
public PointcutBody(int tokens, String text) {
public PointcutBody(int tokens, @Nullable String text) {
this.numTokensConsumed = tokens;
this.text = text;
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -22,6 +22,7 @@ import java.lang.reflect.Type;
import org.springframework.aop.AfterAdvice;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.lang.Nullable;
import org.springframework.util.ClassUtils;
import org.springframework.util.TypeUtils;
@@ -60,7 +61,7 @@ public class AspectJAfterReturningAdvice extends AbstractAspectJAdvice
}
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
public void afterReturning(@Nullable Object returnValue, Method method, Object[] args, @Nullable Object target) throws Throwable {
if (shouldInvokeOnReturnValueOf(method, returnValue)) {
invokeAdviceMethod(getJoinPointMatch(), returnValue, null);
}
@@ -75,7 +76,7 @@ public class AspectJAfterReturningAdvice extends AbstractAspectJAdvice
* @param returnValue the return value of the target method
* @return whether to invoke the advice method for the given return value
*/
private boolean shouldInvokeOnReturnValueOf(Method method, Object returnValue) {
private boolean shouldInvokeOnReturnValueOf(Method method, @Nullable Object returnValue) {
Class<?> type = getDiscoveredReturningType();
Type genericType = getDiscoveredReturningGenericType();
// If we aren't dealing with a raw type, check if generic parameters are assignable.
@@ -94,7 +95,7 @@ public class AspectJAfterReturningAdvice extends AbstractAspectJAdvice
* @param returnValue the return value of the target method
* @return whether to invoke the advice method for the given return value and type
*/
private boolean matchesReturnValue(Class<?> type, Method method, Object returnValue) {
private boolean matchesReturnValue(Class<?> type, Method method, @Nullable Object returnValue) {
if (returnValue != null) {
return ClassUtils.isAssignableValue(type, returnValue);
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -21,6 +21,7 @@ import org.aopalliance.aop.Advice;
import org.springframework.aop.Advisor;
import org.springframework.aop.AfterAdvice;
import org.springframework.aop.BeforeAdvice;
import org.springframework.lang.Nullable;
/**
* Utility methods for dealing with AspectJ advisors.
@@ -58,6 +59,7 @@ public abstract class AspectJAopUtils {
* If neither the advisor nor the advice have precedence information, this method
* will return {@code null}.
*/
@Nullable
public static AspectJPrecedenceInformation getAspectJPrecedenceInformationFor(Advisor anAdvisor) {
if (anAdvisor instanceof AspectJPrecedenceInformation) {
return (AspectJPrecedenceInformation) anAdvisor;
@@ -1,11 +1,11 @@
/*
* 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");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -19,6 +19,7 @@ package org.springframework.aop.aspectj;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
@@ -56,6 +57,8 @@ import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.BeanFactoryAnnotationUtils;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
@@ -100,16 +103,20 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
private static final Log logger = LogFactory.getLog(AspectJExpressionPointcut.class);
@Nullable
private Class<?> pointcutDeclarationScope;
private String[] pointcutParameterNames = new String[0];
private Class<?>[] pointcutParameterTypes = new Class<?>[0];
@Nullable
private BeanFactory beanFactory;
@Nullable
private transient ClassLoader pointcutClassLoader;
@Nullable
private transient PointcutExpression pointcutExpression;
private transient Map<Method, ShadowMatch> shadowMatchCache = new ConcurrentHashMap<>(32);
@@ -167,13 +174,13 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
@Override
public ClassFilter getClassFilter() {
checkReadyToMatch();
obtainPointcutExpression();
return this;
}
@Override
public MethodMatcher getMethodMatcher() {
checkReadyToMatch();
obtainPointcutExpression();
return this;
}
@@ -182,7 +189,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
* Check whether this pointcut is ready to match,
* lazily building the underlying AspectJ pointcut expression.
*/
private void checkReadyToMatch() {
private PointcutExpression obtainPointcutExpression() {
if (getExpression() == null) {
throw new IllegalStateException("Must set property 'expression' before attempting to match");
}
@@ -190,11 +197,13 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
this.pointcutClassLoader = determinePointcutClassLoader();
this.pointcutExpression = buildPointcutExpression(this.pointcutClassLoader);
}
return this.pointcutExpression;
}
/**
* Determine the ClassLoader to use for pointcut evaluation.
*/
@Nullable
private ClassLoader determinePointcutClassLoader() {
if (this.beanFactory instanceof ConfigurableBeanFactory) {
return ((ConfigurableBeanFactory) this.beanFactory).getBeanClassLoader();
@@ -208,21 +217,27 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
/**
* Build the underlying AspectJ pointcut expression.
*/
private PointcutExpression buildPointcutExpression(ClassLoader classLoader) {
private PointcutExpression buildPointcutExpression(@Nullable ClassLoader classLoader) {
PointcutParser parser = initializePointcutParser(classLoader);
PointcutParameter[] pointcutParameters = new PointcutParameter[this.pointcutParameterNames.length];
for (int i = 0; i < pointcutParameters.length; i++) {
pointcutParameters[i] = parser.createPointcutParameter(
this.pointcutParameterNames[i], this.pointcutParameterTypes[i]);
}
return parser.parsePointcutExpression(replaceBooleanOperators(getExpression()),
return parser.parsePointcutExpression(replaceBooleanOperators(resolveExpression()),
this.pointcutDeclarationScope, pointcutParameters);
}
private String resolveExpression() {
String expression = getExpression();
Assert.state(expression != null, "No expression set");
return expression;
}
/**
* Initialize the underlying AspectJ pointcut parser.
*/
private PointcutParser initializePointcutParser(ClassLoader classLoader) {
private PointcutParser initializePointcutParser(@Nullable ClassLoader classLoader) {
PointcutParser parser = PointcutParser
.getPointcutParserSupportingSpecifiedPrimitivesAndUsingSpecifiedClassLoaderForResolution(
SUPPORTED_PRIMITIVES, classLoader);
@@ -249,16 +264,15 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
* Return the underlying AspectJ pointcut expression.
*/
public PointcutExpression getPointcutExpression() {
checkReadyToMatch();
return this.pointcutExpression;
return obtainPointcutExpression();
}
@Override
public boolean matches(Class<?> targetClass) {
checkReadyToMatch();
PointcutExpression pointcutExpression = obtainPointcutExpression();
try {
try {
return this.pointcutExpression.couldMatchJoinPointsInType(targetClass);
return pointcutExpression.couldMatchJoinPointsInType(targetClass);
}
catch (ReflectionWorldException ex) {
logger.debug("PointcutExpression matching rejected target class - trying fallback expression", ex);
@@ -276,10 +290,9 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
}
@Override
public boolean matches(Method method, Class<?> targetClass, boolean beanHasIntroductions) {
checkReadyToMatch();
Method targetMethod = AopUtils.getMostSpecificMethod(method, targetClass);
ShadowMatch shadowMatch = getShadowMatch(targetMethod, method);
public boolean matches(Method method, Class<?> targetClass, boolean hasIntroductions) {
obtainPointcutExpression();
ShadowMatch shadowMatch = getTargetShadowMatch(method, targetClass);
// Special handling for this, target, @this, @target, @annotation
// in Spring - we can optimize since we know we have exactly this class,
@@ -292,7 +305,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
}
else {
// the maybe case
if (beanHasIntroductions) {
if (hasIntroductions) {
return true;
}
// A match test returned maybe - if there are any subtype sensitive variables
@@ -311,15 +324,13 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
@Override
public boolean isRuntime() {
checkReadyToMatch();
return this.pointcutExpression.mayNeedDynamicTest();
return obtainPointcutExpression().mayNeedDynamicTest();
}
@Override
public boolean matches(Method method, Class<?> targetClass, Object... args) {
checkReadyToMatch();
ShadowMatch shadowMatch = getShadowMatch(AopUtils.getMostSpecificMethod(method, targetClass), method);
ShadowMatch originalShadowMatch = getShadowMatch(method, method);
obtainPointcutExpression();
ShadowMatch shadowMatch = getTargetShadowMatch(method, targetClass);
// Bind Spring AOP proxy to AspectJ "this" and Spring AOP target to AspectJ target,
// consistent with return of MethodInvocationProceedingJoinPoint
@@ -353,8 +364,8 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
* type but not 'this' (as would be the case of JDK dynamic proxies).
* <p>See SPR-2979 for the original bug.
*/
if (pmi != null) { // there is a current invocation
RuntimeTestWalker originalMethodResidueTest = getRuntimeTestWalker(originalShadowMatch);
if (pmi != null && thisObject != null) { // there is a current invocation
RuntimeTestWalker originalMethodResidueTest = getRuntimeTestWalker(getShadowMatch(method, method));
if (!originalMethodResidueTest.testThisInstanceOfResidue(thisObject.getClass())) {
return false;
}
@@ -374,6 +385,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
}
}
@Nullable
protected String getCurrentProxiedBeanName() {
return ProxyCreationContext.getCurrentProxiedBeanName();
}
@@ -382,6 +394,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
/**
* Get a new pointcut expression based on a target class's loader rather than the default.
*/
@Nullable
private PointcutExpression getFallbackPointcutExpression(Class<?> targetClass) {
try {
ClassLoader classLoader = targetClass.getClassLoader();
@@ -409,7 +422,29 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
// 'last man wins' which is not what we want at all.
// Using the expression is guaranteed to be safe, since 2 identical expressions
// are guaranteed to bind in exactly the same way.
invocation.setUserAttribute(getExpression(), jpm);
invocation.setUserAttribute(resolveExpression(), jpm);
}
private ShadowMatch getTargetShadowMatch(Method method, Class<?> targetClass) {
Method targetMethod = AopUtils.getMostSpecificMethod(method, targetClass);
if (targetMethod.getDeclaringClass().isInterface()) {
// Try to build the most specific interface possible for inherited methods to be
// considered for sub-interface matches as well, in particular for proxy classes.
// Note: AspectJ is only going to take Method.getDeclaringClass() into account.
Set<Class<?>> ifcs = ClassUtils.getAllInterfacesForClassAsSet(targetClass);
if (ifcs.size() > 1) {
try {
Class<?> compositeInterface = ClassUtils.createCompositeInterface(
ClassUtils.toClassArray(ifcs), targetClass.getClassLoader());
targetMethod = ClassUtils.getMostSpecificMethod(targetMethod, compositeInterface);
}
catch (IllegalArgumentException ex) {
// Implemented interfaces probably expose conflicting method signatures...
// Proceed with original target method.
}
}
}
return getShadowMatch(targetMethod, method);
}
private ShadowMatch getShadowMatch(Method targetMethod, Method originalMethod) {
@@ -419,12 +454,12 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
synchronized (this.shadowMatchCache) {
// Not found - now check again with full lock...
PointcutExpression fallbackExpression = null;
Method methodToMatch = targetMethod;
shadowMatch = this.shadowMatchCache.get(targetMethod);
if (shadowMatch == null) {
Method methodToMatch = targetMethod;
try {
try {
shadowMatch = this.pointcutExpression.matchesMethodExecution(methodToMatch);
shadowMatch = obtainPointcutExpression().matchesMethodExecution(methodToMatch);
}
catch (ReflectionWorldException ex) {
// Failed to introspect target method, probably because it has been loaded
@@ -439,12 +474,16 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
fallbackExpression = null;
}
}
if (shadowMatch == null && targetMethod != originalMethod) {
if (targetMethod != originalMethod && (shadowMatch == null ||
(shadowMatch.neverMatches() && Proxy.isProxyClass(targetMethod.getDeclaringClass())))) {
// Fall back to the plain original method in case of no resolvable match or a
// negative match on a proxy class (which doesn't carry any annotations on its
// redeclared methods).
methodToMatch = originalMethod;
try {
shadowMatch = this.pointcutExpression.matchesMethodExecution(methodToMatch);
shadowMatch = obtainPointcutExpression().matchesMethodExecution(methodToMatch);
}
catch (ReflectionWorldException ex3) {
catch (ReflectionWorldException ex) {
// Could neither introspect the target class nor the proxy class ->
// let's try the original method's declaring class before we give up...
try {
@@ -453,7 +492,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
shadowMatch = fallbackExpression.matchesMethodExecution(methodToMatch);
}
}
catch (ReflectionWorldException ex4) {
catch (ReflectionWorldException ex2) {
fallbackExpression = null;
}
}
@@ -507,18 +546,16 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("AspectJExpressionPointcut: ");
if (this.pointcutParameterNames != null && this.pointcutParameterTypes != null) {
sb.append("(");
for (int i = 0; i < this.pointcutParameterTypes.length; i++) {
sb.append(this.pointcutParameterTypes[i].getName());
sb.append(" ");
sb.append(this.pointcutParameterNames[i]);
if ((i+1) < this.pointcutParameterTypes.length) {
sb.append(", ");
}
sb.append("(");
for (int i = 0; i < this.pointcutParameterTypes.length; i++) {
sb.append(this.pointcutParameterTypes[i].getName());
sb.append(" ");
sb.append(this.pointcutParameterNames[i]);
if ((i+1) < this.pointcutParameterTypes.length) {
sb.append(", ");
}
sb.append(")");
}
sb.append(")");
sb.append(" ");
if (getExpression() != null) {
sb.append(getExpression());
@@ -529,6 +566,19 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
return sb.toString();
}
//---------------------------------------------------------------------
// Serialization support
//---------------------------------------------------------------------
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Rely on default serialization, just initialize state after deserialization.
ois.defaultReadObject();
// Initialize transient fields.
// pointcutExpression will be initialized lazily by checkReadyToMatch()
this.shadowMatchCache = new ConcurrentHashMap<>(32);
}
/**
* Handler for the Spring-specific {@code bean()} pointcut designator
@@ -598,7 +648,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
return false;
}
private FuzzyBoolean contextMatch(Class<?> targetType) {
private FuzzyBoolean contextMatch(@Nullable Class<?> targetType) {
String advisedBeanName = getCurrentProxiedBeanName();
if (advisedBeanName == null) { // no proxy creation in progress
// abstain; can't return YES, since that will make pointcut with negation fail
@@ -625,20 +675,6 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
}
//---------------------------------------------------------------------
// Serialization support
//---------------------------------------------------------------------
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
// Rely on default serialization, just initialize state after deserialization.
ois.defaultReadObject();
// Initialize transient fields.
// pointcutExpression will be initialized lazily by checkReadyToMatch()
this.shadowMatchCache = new ConcurrentHashMap<>(32);
}
private static class DefensiveShadowMatch implements ShadowMatch {
private final ShadowMatch primary;
@@ -1,11 +1,11 @@
/*
* 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");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -20,6 +20,7 @@ import org.springframework.aop.Pointcut;
import org.springframework.aop.support.AbstractGenericPointcutAdvisor;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.lang.Nullable;
/**
* Spring AOP Advisor that can be used for any AspectJ pointcut expression.
@@ -33,18 +34,20 @@ public class AspectJExpressionPointcutAdvisor extends AbstractGenericPointcutAdv
private final AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
public void setExpression(String expression) {
public void setExpression(@Nullable String expression) {
this.pointcut.setExpression(expression);
}
@Nullable
public String getExpression() {
return this.pointcut.getExpression();
}
public void setLocation(String location) {
public void setLocation(@Nullable String location) {
this.pointcut.setLocation(location);
}
@Nullable
public String getLocation() {
return this.pointcut.getLocation();
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -20,6 +20,7 @@ import java.io.Serializable;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.lang.Nullable;
/**
* Spring AOP advice that wraps an AspectJ before method.
@@ -39,7 +40,7 @@ public class AspectJMethodBeforeAdvice extends AbstractAspectJAdvice implements
@Override
public void before(Method method, Object[] args, Object target) throws Throwable {
public void before(Method method, Object[] args, @Nullable Object target) throws Throwable {
invokeAdviceMethod(getJoinPointMatch(), null, null);
}
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -21,8 +21,8 @@ import org.aopalliance.aop.Advice;
import org.springframework.aop.Pointcut;
import org.springframework.aop.PointcutAdvisor;
import org.springframework.core.Ordered;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
/**
* AspectJPointcutAdvisor that adapts an {@link AbstractAspectJAdvice}
@@ -38,11 +38,12 @@ public class AspectJPointcutAdvisor implements PointcutAdvisor, Ordered {
private final Pointcut pointcut;
@Nullable
private Integer order;
/**
* Create a new AspectJPointcutAdvisor for the given advice
* Create a new AspectJPointcutAdvisor for the given advice.
* @param advice the AbstractAspectJAdvice to wrap
*/
public AspectJPointcutAdvisor(AbstractAspectJAdvice advice) {
@@ -51,10 +52,20 @@ public class AspectJPointcutAdvisor implements PointcutAdvisor, Ordered {
this.pointcut = advice.buildSafePointcut();
}
public void setOrder(int order) {
this.order = order;
}
@Override
public int getOrder() {
if (this.order != null) {
return this.order;
}
else {
return this.advice.getOrder();
}
}
@Override
public boolean isPerInstance() {
@@ -71,14 +82,13 @@ public class AspectJPointcutAdvisor implements PointcutAdvisor, Ordered {
return this.pointcut;
}
@Override
public int getOrder() {
if (this.order != null) {
return this.order;
}
else {
return this.advice.getOrder();
}
/**
* Return the name of the aspect (bean) in which the advice was declared.
* @since 4.3.15
* @see AbstractAspectJAdvice#getAspectName()
*/
public String getAspectName() {
return this.advice.getAspectName();
}
@@ -91,12 +101,12 @@ public class AspectJPointcutAdvisor implements PointcutAdvisor, Ordered {
return false;
}
AspectJPointcutAdvisor otherAdvisor = (AspectJPointcutAdvisor) other;
return (ObjectUtils.nullSafeEquals(this.advice, otherAdvisor.advice));
return this.advice.equals(otherAdvisor.advice);
}
@Override
public int hashCode() {
return AspectJPointcutAdvisor.class.hashCode();
return AspectJPointcutAdvisor.class.hashCode() * 29 + this.advice.hashCode();
}
}
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2006 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -36,12 +36,12 @@ public interface AspectJPrecedenceInformation extends Ordered {
// its advice for aspects with non-singleton instantiation models.
/**
* The name of the aspect (bean) in which the advice was declared.
* Return the name of the aspect (bean) in which the advice was declared.
*/
String getAspectName();
/**
* The declaration order of the advice member within the aspect.
* Return the declaration order of the advice member within the aspect.
*/
int getDeclarationOrder();
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2019 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -27,27 +27,31 @@ import org.springframework.aop.interceptor.ExposeInvocationInterceptor;
*
* @author Rod Johnson
* @author Ramnivas Laddad
* @author Juergen Hoeller
* @since 2.0
*/
public abstract class AspectJProxyUtils {
/**
* Add special advisors if necessary to work with a proxy chain that contains AspectJ advisors.
* This will expose the current Spring AOP invocation (necessary for some AspectJ pointcut matching)
* and make available the current AspectJ JoinPoint. The call will have no effect if there are no
* AspectJ advisors in the advisor chain.
* @param advisors Advisors available
* @return {@code true} if any special {@link Advisor Advisors} were added, otherwise {@code false}.
* Add special advisors if necessary to work with a proxy chain that contains AspectJ advisors:
* concretely, {@link ExposeInvocationInterceptor} at the beginning of the list.
* <p>This will expose the current Spring AOP invocation (necessary for some AspectJ pointcut
* matching) and make available the current AspectJ JoinPoint. The call will have no effect
* if there are no AspectJ advisors in the advisor chain.
* @param advisors the advisors available
* @return {@code true} if an {@link ExposeInvocationInterceptor} was added to the list,
* otherwise {@code false}
*/
public static boolean makeAdvisorChainAspectJCapableIfNecessary(List<Advisor> advisors) {
// Don't add advisors to an empty list; may indicate that proxying is just not required
if (!advisors.isEmpty()) {
boolean foundAspectJAdvice = false;
for (Advisor advisor : advisors) {
// Be careful not to get the Advice without a guard, as
// this might eagerly instantiate a non-singleton AspectJ aspect
// Be careful not to get the Advice without a guard, as this might eagerly
// instantiate a non-singleton AspectJ aspect...
if (isAspectJAdvice(advisor)) {
foundAspectJAdvice = true;
break;
}
}
if (foundAspectJAdvice && !advisors.contains(ExposeInvocationInterceptor.ADVISOR)) {
@@ -66,7 +70,7 @@ public abstract class AspectJProxyUtils {
return (advisor instanceof InstantiationModelAwarePointcutAdvisor ||
advisor.getAdvice() instanceof AbstractAspectJAdvice ||
(advisor instanceof PointcutAdvisor &&
((PointcutAdvisor) advisor).getPointcut() instanceof AspectJExpressionPointcut));
((PointcutAdvisor) advisor).getPointcut() instanceof AspectJExpressionPointcut));
}
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -20,6 +20,7 @@ import org.aopalliance.aop.Advice;
import org.springframework.aop.ClassFilter;
import org.springframework.aop.IntroductionAdvisor;
import org.springframework.aop.IntroductionInterceptor;
import org.springframework.aop.support.ClassFilters;
import org.springframework.aop.support.DelegatePerTargetObjectIntroductionInterceptor;
import org.springframework.aop.support.DelegatingIntroductionInterceptor;
@@ -34,12 +35,12 @@ import org.springframework.aop.support.DelegatingIntroductionInterceptor;
*/
public class DeclareParentsAdvisor implements IntroductionAdvisor {
private final Advice advice;
private final Class<?> introducedInterface;
private final ClassFilter typePatternClassFilter;
private final Advice advice;
/**
* Create a new advisor for this DeclareParents field.
@@ -48,8 +49,8 @@ public class DeclareParentsAdvisor implements IntroductionAdvisor {
* @param defaultImpl the default implementation class
*/
public DeclareParentsAdvisor(Class<?> interfaceType, String typePattern, Class<?> defaultImpl) {
this(interfaceType, typePattern, defaultImpl,
new DelegatePerTargetObjectIntroductionInterceptor(defaultImpl, interfaceType));
this(interfaceType, typePattern,
new DelegatePerTargetObjectIntroductionInterceptor(defaultImpl, interfaceType));
}
/**
@@ -59,32 +60,24 @@ public class DeclareParentsAdvisor implements IntroductionAdvisor {
* @param delegateRef the delegate implementation object
*/
public DeclareParentsAdvisor(Class<?> interfaceType, String typePattern, Object delegateRef) {
this(interfaceType, typePattern, delegateRef.getClass(),
new DelegatingIntroductionInterceptor(delegateRef));
this(interfaceType, typePattern, new DelegatingIntroductionInterceptor(delegateRef));
}
/**
* Private constructor to share common code between impl-based delegate and reference-based delegate
* (cannot use method such as init() to share common code, due the use of final fields)
* (cannot use method such as init() to share common code, due the use of final fields).
* @param interfaceType static field defining the introduction
* @param typePattern type pattern the introduction is restricted to
* @param implementationClass implementation class
* @param advice delegation advice
* @param interceptor the delegation advice as {@link IntroductionInterceptor}
*/
private DeclareParentsAdvisor(Class<?> interfaceType, String typePattern, Class<?> implementationClass, Advice advice) {
private DeclareParentsAdvisor(Class<?> interfaceType, String typePattern, IntroductionInterceptor interceptor) {
this.advice = interceptor;
this.introducedInterface = interfaceType;
ClassFilter typePatternFilter = new TypePatternClassFilter(typePattern);
// Excludes methods implemented.
ClassFilter exclusion = new ClassFilter() {
@Override
public boolean matches(Class<?> clazz) {
return !(introducedInterface.isAssignableFrom(clazz));
}
};
ClassFilter typePatternFilter = new TypePatternClassFilter(typePattern);
ClassFilter exclusion = (clazz -> !this.introducedInterface.isAssignableFrom(clazz));
this.typePatternClassFilter = ClassFilters.intersection(typePatternFilter, exclusion);
this.advice = advice;
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -29,20 +29,19 @@ import org.aspectj.runtime.internal.AroundClosure;
import org.springframework.aop.ProxyMethodInvocation;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
* Implementation of AspectJ ProceedingJoinPoint interface
* wrapping an AOP Alliance MethodInvocation.
* An implementation of the AspectJ {@link ProceedingJoinPoint} interface
* wrapping an AOP Alliance {@link org.aopalliance.intercept.MethodInvocation}.
*
* <p><b>Note</b>: the {@code getThis()} method returns the current Spring AOP proxy.
* <p><b>Note</b>: The {@code getThis()} method returns the current Spring AOP proxy.
* The {@code getTarget()} method returns the current Spring AOP target (which may be
* {@code null} if there is no target), and is a plain POJO without any advice.
* <b>If you want to call the object and have the advice take effect, use
* {@code getThis()}.</b> A common example is casting the object to an
* introduced interface in the implementation of an introduction.
*
* <p>Of course there is no such distinction between target and proxy in AspectJ.
* {@code null} if there is no target instance) as a plain POJO without any advice.
* <b>If you want to call the object and have the advice take effect, use {@code getThis()}.</b>
* A common example is casting the object to an introduced interface in the implementation of
* an introduction. There is no such distinction between target and proxy in AspectJ itself.
*
* @author Rod Johnson
* @author Juergen Hoeller
@@ -56,12 +55,15 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
private final ProxyMethodInvocation methodInvocation;
private Object[] defensiveCopyOfArgs;
@Nullable
private Object[] args;
/** Lazily initialized signature object */
/** Lazily initialized signature object. */
@Nullable
private Signature signature;
/** Lazily initialized source location object */
/** Lazily initialized source location object. */
@Nullable
private SourceLocation sourceLocation;
@@ -75,6 +77,7 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
this.methodInvocation = methodInvocation;
}
@Override
public void set$AroundClosure(AroundClosure aroundClosure) {
throw new UnsupportedOperationException();
@@ -109,18 +112,17 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
* Returns the Spring AOP target. May be {@code null} if there is no target.
*/
@Override
@Nullable
public Object getTarget() {
return this.methodInvocation.getThis();
}
@Override
public Object[] getArgs() {
if (this.defensiveCopyOfArgs == null) {
Object[] argsSource = this.methodInvocation.getArguments();
this.defensiveCopyOfArgs = new Object[argsSource.length];
System.arraycopy(argsSource, 0, this.defensiveCopyOfArgs, 0, argsSource.length);
if (this.args == null) {
this.args = this.methodInvocation.getArguments().clone();
}
return this.defensiveCopyOfArgs;
return this.args;
}
@Override
@@ -128,7 +130,7 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
if (this.signature == null) {
this.signature = new MethodSignatureImpl();
}
return signature;
return this.signature;
}
@Override
@@ -176,6 +178,7 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
*/
private class MethodSignatureImpl implements MethodSignature {
@Nullable
private volatile String[] parameterNames;
@Override
@@ -214,6 +217,7 @@ public class MethodInvocationProceedingJoinPoint implements ProceedingJoinPoint,
}
@Override
@Nullable
public String[] getParameterNames() {
if (this.parameterNames == null) {
this.parameterNames = parameterNameDiscoverer.getParameterNames(getMethod());
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -37,6 +37,7 @@ import org.aspectj.weaver.reflect.ReflectionVar;
import org.aspectj.weaver.reflect.ShadowMatchImpl;
import org.aspectj.weaver.tools.ShadowMatch;
import org.springframework.lang.Nullable;
import org.springframework.util.ClassUtils;
import org.springframework.util.ReflectionUtils;
@@ -50,7 +51,7 @@ import org.springframework.util.ReflectionUtils;
* migrate to {@code ShadowMatch.getVariablesInvolvedInRuntimeTest()}
* or some similar operation.
*
* <p>See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=151593"/>Bug 151593</a>
* <p>See <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=151593">Bug 151593</a>
*
* @author Adrian Colyer
* @author Ramnivas Laddad
@@ -78,6 +79,7 @@ class RuntimeTestWalker {
}
@Nullable
private final Test runtimeTest;
@@ -173,7 +175,7 @@ class RuntimeTestWalker {
}
private static abstract class InstanceOfResidueTestVisitor extends TestVisitorAdapter {
private abstract static class InstanceOfResidueTestVisitor extends TestVisitorAdapter {
private final Class<?> matchClass;
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -20,6 +20,7 @@ import java.lang.reflect.InvocationTargetException;
import org.springframework.aop.framework.AopConfigException;
import org.springframework.core.Ordered;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;
@@ -44,6 +45,7 @@ public class SimpleAspectInstanceFactory implements AspectInstanceFactory {
this.aspectClass = aspectClass;
}
/**
* Return the specified aspect class (never {@code null}).
*/
@@ -51,7 +53,6 @@ public class SimpleAspectInstanceFactory implements AspectInstanceFactory {
return this.aspectClass;
}
@Override
public final Object getAspectInstance() {
try {
@@ -76,6 +77,7 @@ public class SimpleAspectInstanceFactory implements AspectInstanceFactory {
}
@Override
@Nullable
public ClassLoader getAspectClassLoader() {
return this.aspectClass.getClassLoader();
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -19,6 +19,7 @@ package org.springframework.aop.aspectj;
import java.io.Serializable;
import org.springframework.core.Ordered;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
@@ -53,6 +54,7 @@ public class SingletonAspectInstanceFactory implements AspectInstanceFactory, Se
}
@Override
@Nullable
public ClassLoader getAspectClassLoader() {
return this.aspectInstance.getClass().getClassLoader();
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -20,6 +20,7 @@ import org.aspectj.weaver.tools.PointcutParser;
import org.aspectj.weaver.tools.TypePatternMatcher;
import org.springframework.aop.ClassFilter;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@@ -32,8 +33,9 @@ import org.springframework.util.StringUtils;
*/
public class TypePatternClassFilter implements ClassFilter {
private String typePattern;
private String typePattern = "";
@Nullable
private TypePatternMatcher aspectJTypePatternMatcher;
@@ -51,8 +53,6 @@ public class TypePatternClassFilter implements ClassFilter {
* Create a fully configured {@link TypePatternClassFilter} using the
* given type pattern.
* @param typePattern the type pattern that AspectJ weaver should parse
* @throws IllegalArgumentException if the supplied {@code typePattern} is {@code null}
* or is recognized as invalid
*/
public TypePatternClassFilter(String typePattern) {
setTypePattern(typePattern);
@@ -73,8 +73,6 @@ public class TypePatternClassFilter implements ClassFilter {
* that implements it.
* <p>These conventions are established by AspectJ, not Spring AOP.
* @param typePattern the type pattern that AspectJ weaver should parse
* @throws IllegalArgumentException if the supplied {@code typePattern} is {@code null}
* or is recognized as invalid
*/
public void setTypePattern(String typePattern) {
Assert.notNull(typePattern, "Type pattern must not be null");
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -41,7 +41,7 @@ import org.aspectj.lang.reflect.PerClauseKind;
import org.springframework.aop.framework.AopConfigException;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.util.StringUtils;
import org.springframework.lang.Nullable;
/**
* Abstract base class for factories that can create Spring AOP Advisors
@@ -59,8 +59,11 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
private static final String AJC_MAGIC = "ajc$";
private static final Class<?>[] ASPECTJ_ANNOTATION_CLASSES = new Class<?>[] {
Pointcut.class, Around.class, Before.class, After.class, AfterReturning.class, AfterThrowing.class};
/** Logger available to subclasses */
/** Logger available to subclasses. */
protected final Log logger = LogFactory.getLog(getClass());
protected final ParameterNameDiscoverer parameterNameDiscoverer = new AspectJAnnotationParameterNameDiscoverer();
@@ -122,14 +125,13 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
/**
* Find and return the first AspectJ annotation on the given method
* (there <i>should</i> only be one anyway...)
* (there <i>should</i> only be one anyway...).
*/
@SuppressWarnings("unchecked")
@Nullable
protected static AspectJAnnotation<?> findAspectJAnnotationOnMethod(Method method) {
Class<?>[] classesToLookFor = new Class<?>[] {
Before.class, Around.class, After.class, AfterReturning.class, AfterThrowing.class, Pointcut.class};
for (Class<?> c : classesToLookFor) {
AspectJAnnotation<?> foundAnnotation = findAnnotation(method, (Class<Annotation>) c);
for (Class<?> clazz : ASPECTJ_ANNOTATION_CLASSES) {
AspectJAnnotation<?> foundAnnotation = findAnnotation(method, (Class<Annotation>) clazz);
if (foundAnnotation != null) {
return foundAnnotation;
}
@@ -137,6 +139,7 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
return null;
}
@Nullable
private static <A extends Annotation> AspectJAnnotation<A> findAnnotation(Method method, Class<A> toLookFor) {
A result = AnnotationUtils.findAnnotation(method, toLookFor);
if (result != null) {
@@ -148,34 +151,34 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
}
/**
* Enum for AspectJ annotation types.
* @see AspectJAnnotation#getAnnotationType()
*/
protected enum AspectJAnnotationType {
AtPointcut,
AtBefore,
AtAfter,
AtAfterReturning,
AtAfterThrowing,
AtAround
AtPointcut, AtAround, AtBefore, AtAfter, AtAfterReturning, AtAfterThrowing
}
/**
* Class modelling an AspectJ annotation, exposing its type enumeration and
* pointcut String.
* @param <A> the annotation type
*/
protected static class AspectJAnnotation<A extends Annotation> {
private static final String[] EXPRESSION_PROPERTIES = new String[] {"value", "pointcut"};
private static final String[] EXPRESSION_ATTRIBUTES = new String[] {"pointcut", "value"};
private static Map<Class<?>, AspectJAnnotationType> annotationTypes = new HashMap<>();
private static Map<Class<?>, AspectJAnnotationType> annotationTypeMap = new HashMap<>(8);
static {
annotationTypes.put(Pointcut.class,AspectJAnnotationType.AtPointcut);
annotationTypes.put(After.class,AspectJAnnotationType.AtAfter);
annotationTypes.put(AfterReturning.class,AspectJAnnotationType.AtAfterReturning);
annotationTypes.put(AfterThrowing.class,AspectJAnnotationType.AtAfterThrowing);
annotationTypes.put(Around.class,AspectJAnnotationType.AtAround);
annotationTypes.put(Before.class,AspectJAnnotationType.AtBefore);
annotationTypeMap.put(Pointcut.class, AspectJAnnotationType.AtPointcut);
annotationTypeMap.put(Around.class, AspectJAnnotationType.AtAround);
annotationTypeMap.put(Before.class, AspectJAnnotationType.AtBefore);
annotationTypeMap.put(After.class, AspectJAnnotationType.AtAfter);
annotationTypeMap.put(AfterReturning.class, AspectJAnnotationType.AtAfterReturning);
annotationTypeMap.put(AfterThrowing.class, AspectJAnnotationType.AtAfterThrowing);
}
private final A annotation;
@@ -189,44 +192,35 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
public AspectJAnnotation(A annotation) {
this.annotation = annotation;
this.annotationType = determineAnnotationType(annotation);
// We know these methods exist with the same name on each object,
// but need to invoke them reflectively as there isn't a common interface.
try {
this.pointcutExpression = resolveExpression(annotation);
this.argumentNames = (String) annotation.getClass().getMethod("argNames").invoke(annotation);
Object argNames = AnnotationUtils.getValue(annotation, "argNames");
this.argumentNames = (argNames instanceof String ? (String) argNames : "");
}
catch (Exception ex) {
throw new IllegalArgumentException(annotation + " cannot be an AspectJ annotation", ex);
throw new IllegalArgumentException(annotation + " is not a valid AspectJ annotation", ex);
}
}
private AspectJAnnotationType determineAnnotationType(A annotation) {
for (Class<?> type : annotationTypes.keySet()) {
if (type.isInstance(annotation)) {
return annotationTypes.get(type);
}
AspectJAnnotationType type = annotationTypeMap.get(annotation.annotationType());
if (type != null) {
return type;
}
throw new IllegalStateException("Unknown annotation type: " + annotation.toString());
throw new IllegalStateException("Unknown annotation type: " + annotation);
}
private String resolveExpression(A annotation) throws Exception {
String expression = null;
for (String methodName : EXPRESSION_PROPERTIES) {
Method method;
try {
method = annotation.getClass().getDeclaredMethod(methodName);
}
catch (NoSuchMethodException ex) {
method = null;
}
if (method != null) {
String candidate = (String) method.invoke(annotation);
if (StringUtils.hasText(candidate)) {
expression = candidate;
private String resolveExpression(A annotation) {
for (String attributeName : EXPRESSION_ATTRIBUTES) {
Object val = AnnotationUtils.getValue(annotation, attributeName);
if (val instanceof String) {
String str = (String) val;
if (!str.isEmpty()) {
return str;
}
}
}
return expression;
throw new IllegalStateException("Failed to resolve expression: " + annotation);
}
public AspectJAnnotationType getAnnotationType() {
@@ -259,6 +253,7 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
private static class AspectJAnnotationParameterNameDiscoverer implements ParameterNameDiscoverer {
@Override
@Nullable
public String[] getParameterNames(Method method) {
if (method.getParameterCount() == 0) {
return new String[0];
@@ -267,11 +262,11 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
if (annotation == null) {
return null;
}
StringTokenizer strTok = new StringTokenizer(annotation.getArgumentNames(), ",");
if (strTok.countTokens() > 0) {
String[] names = new String[strTok.countTokens()];
StringTokenizer nameTokens = new StringTokenizer(annotation.getArgumentNames(), ",");
if (nameTokens.countTokens() > 0) {
String[] names = new String[nameTokens.countTokens()];
for (int i = 0; i < names.length; i++) {
names[i] = strTok.nextToken();
names[i] = nameTokens.nextToken();
}
return names;
}
@@ -281,6 +276,7 @@ public abstract class AbstractAspectJAdvisorFactory implements AspectJAdvisorFac
}
@Override
@Nullable
public String[] getParameterNames(Constructor<?> ctor) {
throw new UnsupportedOperationException("Spring AOP cannot handle constructor advice");
}
@@ -1,11 +1,11 @@
/*
* 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");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,6 +24,7 @@ import org.springframework.aop.Advisor;
import org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
@@ -48,10 +49,13 @@ import org.springframework.util.Assert;
@SuppressWarnings("serial")
public class AnnotationAwareAspectJAutoProxyCreator extends AspectJAwareAdvisorAutoProxyCreator {
@Nullable
private List<Pattern> includePatterns;
@Nullable
private AspectJAdvisorFactory aspectJAdvisorFactory;
@Nullable
private BeanFactoryAspectJAdvisorsBuilder aspectJAdvisorsBuilder;
@@ -87,7 +91,9 @@ public class AnnotationAwareAspectJAutoProxyCreator extends AspectJAwareAdvisorA
// Add all the Spring advisors found according to superclass rules.
List<Advisor> advisors = super.findCandidateAdvisors();
// Build Advisors for all AspectJ aspects in the bean factory.
advisors.addAll(this.aspectJAdvisorsBuilder.buildAspectJAdvisors());
if (this.aspectJAdvisorsBuilder != null) {
advisors.addAll(this.aspectJAdvisorsBuilder.buildAspectJAdvisors());
}
return advisors;
}
@@ -101,7 +107,8 @@ public class AnnotationAwareAspectJAutoProxyCreator extends AspectJAwareAdvisorA
// proxied by that interface and fail at runtime as the advice method is not
// defined on the interface. We could potentially relax the restriction about
// not advising aspects in the future.
return (super.isInfrastructureClass(beanClass) || this.aspectJAdvisorFactory.isAspect(beanClass));
return (super.isInfrastructureClass(beanClass) ||
(this.aspectJAdvisorFactory != null && this.aspectJAdvisorFactory.isAspect(beanClass)));
}
/**
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,6 +24,7 @@ import org.aopalliance.aop.Advice;
import org.springframework.aop.Advisor;
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.framework.AopConfigException;
import org.springframework.lang.Nullable;
/**
* Interface for factories that can create Spring AOP Advisors from classes
@@ -79,6 +80,7 @@ public interface AspectJAdvisorFactory {
* or if it is a pointcut that will be used by other advice but will not
* create a Spring advice in its own right
*/
@Nullable
Advisor getAdvisor(Method candidateAdviceMethod, MetadataAwareAspectInstanceFactory aspectInstanceFactory,
int declarationOrder, String aspectName);
@@ -98,6 +100,7 @@ public interface AspectJAdvisorFactory {
* @see org.springframework.aop.aspectj.AspectJAfterReturningAdvice
* @see org.springframework.aop.aspectj.AspectJAfterThrowingAdvice
*/
@Nullable
Advice getAdvice(Method candidateAdviceMethod, AspectJExpressionPointcut expressionPointcut,
MetadataAwareAspectInstanceFactory aspectInstanceFactory, int declarationOrder, String aspectName);
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -49,7 +49,7 @@ import org.springframework.util.ClassUtils;
@SuppressWarnings("serial")
public class AspectJProxyFactory extends ProxyCreatorSupport {
/** Cache for singleton aspect instances */
/** Cache for singleton aspect instances. */
private static final Map<Class<?>, Object> aspectCache = new ConcurrentHashMap<>();
private final AspectJAdvisorFactory aspectFactory = new ReflectiveAspectJAdvisorFactory();
@@ -119,7 +119,9 @@ public class AspectJProxyFactory extends ProxyCreatorSupport {
*/
private void addAdvisorsFromAspectInstanceFactory(MetadataAwareAspectInstanceFactory instanceFactory) {
List<Advisor> advisors = this.aspectFactory.getAdvisors(instanceFactory);
advisors = AopUtils.findAdvisorsThatCanApply(advisors, getTargetClass());
Class<?> targetClass = getTargetClass();
Assert.state(targetClass != null, "Unresolvable target class");
advisors = AopUtils.findAdvisorsThatCanApply(advisors, targetClass);
AspectJProxyUtils.makeAdvisorChainAspectJCapableIfNecessary(advisors);
AnnotationAwareOrderComparator.sort(advisors);
addAdvisors(advisors);
@@ -168,11 +170,10 @@ public class AspectJProxyFactory extends ProxyCreatorSupport {
synchronized (aspectCache) {
// To be safe, check within full lock now...
instance = aspectCache.get(aspectClass);
if (instance != null) {
return instance;
if (instance == null) {
instance = new SimpleAspectInstanceFactory(aspectClass).getAspectInstance();
aspectCache.put(aspectClass, instance);
}
instance = new SimpleAspectInstanceFactory(aspectClass).getAspectInstance();
aspectCache.put(aspectClass, instance);
}
}
return instance;
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -127,7 +127,7 @@ public class AspectMetadata implements Serializable {
*/
private String findPerClause(Class<?> aspectClass) {
String str = aspectClass.getAnnotation(Aspect.class).value();
str = str.substring(str.indexOf("(") + 1);
str = str.substring(str.indexOf('(') + 1);
str = str.substring(0, str.length() - 1);
return str;
}
@@ -148,7 +148,7 @@ public class AspectMetadata implements Serializable {
}
/**
* Return the aspect class.
* Return the aspect name.
*/
public String getAspectName() {
return this.aspectName;
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -22,6 +22,7 @@ import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.OrderUtils;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
@@ -54,27 +55,33 @@ public class BeanFactoryAspectInstanceFactory implements MetadataAwareAspectInst
* Create a BeanFactoryAspectInstanceFactory. AspectJ will be called to
* introspect to create AJType metadata using the type returned for the
* given bean name from the BeanFactory.
* @param beanFactory BeanFactory to obtain instance(s) from
* @param beanFactory the BeanFactory to obtain instance(s) from
* @param name name of the bean
*/
public BeanFactoryAspectInstanceFactory(BeanFactory beanFactory, String name) {
this(beanFactory, name, beanFactory.getType(name));
this(beanFactory, name, null);
}
/**
* Create a BeanFactoryAspectInstanceFactory, providing a type that AspectJ should
* introspect to create AJType metadata. Use if the BeanFactory may consider the type
* to be a subclass (as when using CGLIB), and the information should relate to a superclass.
* @param beanFactory BeanFactory to obtain instance(s) from
* @param beanFactory the BeanFactory to obtain instance(s) from
* @param name the name of the bean
* @param type the type that should be introspected by AspectJ
* ({@code null} indicates resolution through {@link BeanFactory#getType} via the bean name)
*/
public BeanFactoryAspectInstanceFactory(BeanFactory beanFactory, String name, Class<?> type) {
public BeanFactoryAspectInstanceFactory(BeanFactory beanFactory, String name, @Nullable Class<?> type) {
Assert.notNull(beanFactory, "BeanFactory must not be null");
Assert.notNull(name, "Bean name must not be null");
this.beanFactory = beanFactory;
this.name = name;
this.aspectMetadata = new AspectMetadata(type, name);
Class<?> resolvedType = type;
if (type == null) {
resolvedType = beanFactory.getType(name);
Assert.notNull(resolvedType, "Unresolvable bean type - explicitly specify the aspect class");
}
this.aspectMetadata = new AspectMetadata(resolvedType, name);
}
@@ -84,6 +91,7 @@ public class BeanFactoryAspectInstanceFactory implements MetadataAwareAspectInst
}
@Override
@Nullable
public ClassLoader getAspectClassLoader() {
return (this.beanFactory instanceof ConfigurableBeanFactory ?
((ConfigurableBeanFactory) this.beanFactory).getBeanClassLoader() :
@@ -96,20 +104,21 @@ public class BeanFactoryAspectInstanceFactory implements MetadataAwareAspectInst
}
@Override
@Nullable
public Object getAspectCreationMutex() {
if (this.beanFactory != null) {
if (this.beanFactory.isSingleton(name)) {
// Rely on singleton semantics provided by the factory -> no local lock.
return null;
}
else if (this.beanFactory instanceof ConfigurableBeanFactory) {
// No singleton guarantees from the factory -> let's lock locally but
// reuse the factory's singleton lock, just in case a lazy dependency
// of our advice bean happens to trigger the singleton lock implicitly...
return ((ConfigurableBeanFactory) this.beanFactory).getSingletonMutex();
}
if (this.beanFactory.isSingleton(this.name)) {
// Rely on singleton semantics provided by the factory -> no local lock.
return null;
}
else if (this.beanFactory instanceof ConfigurableBeanFactory) {
// No singleton guarantees from the factory -> let's lock locally but
// reuse the factory's singleton lock, just in case a lazy dependency
// of our advice bean happens to trigger the singleton lock implicitly...
return ((ConfigurableBeanFactory) this.beanFactory).getSingletonMutex();
}
else {
return this;
}
return this;
}
/**
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2016 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,8 +16,8 @@
package org.springframework.aop.aspectj.annotation;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -27,6 +27,7 @@ import org.aspectj.lang.reflect.PerClauseKind;
import org.springframework.aop.Advisor;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
@@ -43,6 +44,7 @@ public class BeanFactoryAspectJAdvisorsBuilder {
private final AspectJAdvisorFactory advisorFactory;
@Nullable
private volatile List<String> aspectBeanNames;
private final Map<String, List<Advisor>> advisorsCache = new ConcurrentHashMap<>();
@@ -85,8 +87,8 @@ public class BeanFactoryAspectJAdvisorsBuilder {
synchronized (this) {
aspectNames = this.aspectBeanNames;
if (aspectNames == null) {
List<Advisor> advisors = new LinkedList<>();
aspectNames = new LinkedList<>();
List<Advisor> advisors = new ArrayList<>();
aspectNames = new ArrayList<>();
String[] beanNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(
this.beanFactory, Object.class, true, false);
for (String beanName : beanNames) {
@@ -136,7 +138,7 @@ public class BeanFactoryAspectJAdvisorsBuilder {
if (aspectNames.isEmpty()) {
return Collections.emptyList();
}
List<Advisor> advisors = new LinkedList<>();
List<Advisor> advisors = new ArrayList<>();
for (String aspectName : aspectNames) {
List<Advisor> cachedAdvisors = this.advisorsCache.get(aspectName);
if (cachedAdvisors != null) {
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -31,6 +31,7 @@ import org.springframework.aop.aspectj.InstantiationModelAwarePointcutAdvisor;
import org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.AspectJAnnotation;
import org.springframework.aop.support.DynamicMethodMatcherPointcut;
import org.springframework.aop.support.Pointcuts;
import org.springframework.lang.Nullable;
/**
* Internal implementation of AspectJPointcutAdvisor.
@@ -41,9 +42,12 @@ import org.springframework.aop.support.Pointcuts;
* @since 2.0
*/
@SuppressWarnings("serial")
class InstantiationModelAwarePointcutAdvisorImpl
final class InstantiationModelAwarePointcutAdvisorImpl
implements InstantiationModelAwarePointcutAdvisor, AspectJPrecedenceInformation, Serializable {
private static final Advice EMPTY_ADVICE = new Advice() {};
private final AspectJExpressionPointcut declaredPointcut;
private final Class<?> declaringClass;
@@ -66,10 +70,13 @@ class InstantiationModelAwarePointcutAdvisorImpl
private final boolean lazy;
@Nullable
private Advice instantiatedAdvice;
@Nullable
private Boolean isBeforeAdvice;
@Nullable
private Boolean isAfterAdvice;
@@ -109,14 +116,41 @@ class InstantiationModelAwarePointcutAdvisorImpl
/**
* The pointcut for Spring AOP to use. Actual behaviour of the pointcut will change
* depending on the state of the advice.
* The pointcut for Spring AOP to use.
* Actual behaviour of the pointcut will change depending on the state of the advice.
*/
@Override
public Pointcut getPointcut() {
return this.pointcut;
}
@Override
public boolean isLazy() {
return this.lazy;
}
@Override
public synchronized boolean isAdviceInstantiated() {
return (this.instantiatedAdvice != null);
}
/**
* Lazily instantiate advice if necessary.
*/
@Override
public synchronized Advice getAdvice() {
if (this.instantiatedAdvice == null) {
this.instantiatedAdvice = instantiateAdvice(this.declaredPointcut);
}
return this.instantiatedAdvice;
}
private Advice instantiateAdvice(AspectJExpressionPointcut pointcut) {
Advice advice = this.aspectJAdvisorFactory.getAdvice(this.aspectJAdviceMethod, pointcut,
this.aspectInstanceFactory, this.declarationOrder, this.aspectName);
return (advice != null ? advice : EMPTY_ADVICE);
}
/**
* This is only of interest for Spring AOP: AspectJ instantiation semantics
* are much richer. In AspectJ terminology, all a return of {@code true}
@@ -134,33 +168,6 @@ class InstantiationModelAwarePointcutAdvisorImpl
return this.aspectInstanceFactory.getAspectMetadata();
}
/**
* Lazily instantiate advice if necessary.
*/
@Override
public synchronized Advice getAdvice() {
if (this.instantiatedAdvice == null) {
this.instantiatedAdvice = instantiateAdvice(this.declaredPointcut);
}
return this.instantiatedAdvice;
}
@Override
public boolean isLazy() {
return this.lazy;
}
@Override
public synchronized boolean isAdviceInstantiated() {
return (this.instantiatedAdvice != null);
}
private Advice instantiateAdvice(AspectJExpressionPointcut pcut) {
return this.aspectJAdvisorFactory.getAdvice(this.aspectJAdviceMethod, pcut,
this.aspectInstanceFactory, this.declarationOrder, this.aspectName);
}
public MetadataAwareAspectInstanceFactory getAspectInstanceFactory() {
return this.aspectInstanceFactory;
}
@@ -213,33 +220,26 @@ class InstantiationModelAwarePointcutAdvisorImpl
}
else {
switch (aspectJAnnotation.getAnnotationType()) {
case AtPointcut:
case AtAround:
this.isBeforeAdvice = false;
this.isAfterAdvice = false;
break;
case AtBefore:
this.isBeforeAdvice = true;
this.isAfterAdvice = false;
break;
case AtAfter:
case AtAfterReturning:
case AtAfterThrowing:
this.isBeforeAdvice = false;
this.isAfterAdvice = true;
this.isBeforeAdvice = false;
break;
case AtAround:
case AtPointcut:
this.isAfterAdvice = false;
this.isBeforeAdvice = false;
break;
case AtBefore:
this.isAfterAdvice = false;
this.isBeforeAdvice = true;
}
}
}
@Override
public String toString() {
return "InstantiationModelAwarePointcutAdvisor: expression [" + getDeclaredPointcut().getExpression() +
"]; advice method [" + this.aspectJAdviceMethod + "]; perClauseKind=" +
this.aspectInstanceFactory.getAspectMetadata().getAjType().getPerClause().getKind();
}
private void readObject(ObjectInputStream inputStream) throws IOException, ClassNotFoundException {
inputStream.defaultReadObject();
try {
@@ -250,22 +250,31 @@ class InstantiationModelAwarePointcutAdvisorImpl
}
}
@Override
public String toString() {
return "InstantiationModelAwarePointcutAdvisor: expression [" + getDeclaredPointcut().getExpression() +
"]; advice method [" + this.aspectJAdviceMethod + "]; perClauseKind=" +
this.aspectInstanceFactory.getAspectMetadata().getAjType().getPerClause().getKind();
}
/**
* Pointcut implementation that changes its behaviour when the advice is instantiated.
* Note that this is a <i>dynamic</i> pointcut. Otherwise it might
* be optimized out if it does not at first match statically.
* Note that this is a <i>dynamic</i> pointcut; otherwise it might be optimized out
* if it does not at first match statically.
*/
private class PerTargetInstantiationModelPointcut extends DynamicMethodMatcherPointcut {
private final class PerTargetInstantiationModelPointcut extends DynamicMethodMatcherPointcut {
private final AspectJExpressionPointcut declaredPointcut;
private final Pointcut preInstantiationPointcut;
@Nullable
private LazySingletonAspectInstanceFactoryDecorator aspectInstanceFactory;
private PerTargetInstantiationModelPointcut(AspectJExpressionPointcut declaredPointcut,
public PerTargetInstantiationModelPointcut(AspectJExpressionPointcut declaredPointcut,
Pointcut preInstantiationPointcut, MetadataAwareAspectInstanceFactory aspectInstanceFactory) {
this.declaredPointcut = declaredPointcut;
this.preInstantiationPointcut = preInstantiationPointcut;
if (aspectInstanceFactory instanceof LazySingletonAspectInstanceFactoryDecorator) {
@@ -275,7 +284,8 @@ class InstantiationModelAwarePointcutAdvisorImpl
@Override
public boolean matches(Method method, Class<?> targetClass) {
// We're either instantiated and matching on declared pointcut, or uninstantiated matching on either pointcut
// We're either instantiated and matching on declared pointcut,
// or uninstantiated matching on either pointcut...
return (isAspectMaterialized() && this.declaredPointcut.matches(method, targetClass)) ||
this.preInstantiationPointcut.getMethodMatcher().matches(method, targetClass);
}
@@ -1,11 +1,11 @@
/*
* 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");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -18,6 +18,7 @@ package org.springframework.aop.aspectj.annotation;
import java.io.Serializable;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
@@ -32,6 +33,7 @@ public class LazySingletonAspectInstanceFactoryDecorator implements MetadataAwar
private final MetadataAwareAspectInstanceFactory maaif;
@Nullable
private volatile Object materialized;
@@ -47,20 +49,24 @@ public class LazySingletonAspectInstanceFactoryDecorator implements MetadataAwar
@Override
public Object getAspectInstance() {
if (this.materialized == null) {
Object aspectInstance = this.materialized;
if (aspectInstance == null) {
Object mutex = this.maaif.getAspectCreationMutex();
if (mutex == null) {
this.materialized = this.maaif.getAspectInstance();
aspectInstance = this.maaif.getAspectInstance();
this.materialized = aspectInstance;
}
else {
synchronized (mutex) {
if (this.materialized == null) {
this.materialized = this.maaif.getAspectInstance();
aspectInstance = this.materialized;
if (aspectInstance == null) {
aspectInstance = this.maaif.getAspectInstance();
this.materialized = aspectInstance;
}
}
}
}
return this.materialized;
return aspectInstance;
}
public boolean isMaterialized() {
@@ -68,6 +74,7 @@ public class LazySingletonAspectInstanceFactoryDecorator implements MetadataAwar
}
@Override
@Nullable
public ClassLoader getAspectClassLoader() {
return this.maaif.getAspectClassLoader();
}
@@ -78,6 +85,7 @@ public class LazySingletonAspectInstanceFactoryDecorator implements MetadataAwar
}
@Override
@Nullable
public Object getAspectCreationMutex() {
return this.maaif.getAspectCreationMutex();
}
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,6 +17,7 @@
package org.springframework.aop.aspectj.annotation;
import org.springframework.aop.aspectj.AspectInstanceFactory;
import org.springframework.lang.Nullable;
/**
* Subinterface of {@link org.springframework.aop.aspectj.AspectInstanceFactory}
@@ -44,6 +45,7 @@ public interface MetadataAwareAspectInstanceFactory extends AspectInstanceFactor
* @return the mutex object (may be {@code null} for no mutex to use)
* @since 4.3
*/
@Nullable
Object getAspectCreationMutex();
}
@@ -1,11 +1,11 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2018 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -29,7 +29,7 @@ import org.springframework.aop.framework.AopConfigException;
@SuppressWarnings("serial")
public class NotAnAtAspectException extends AopConfigException {
private Class<?> nonAspectClass;
private final Class<?> nonAspectClass;
/**
@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,

Some files were not shown because too many files have changed in this diff Show More