Commit Graph

482 Commits

Author SHA1 Message Date
Brian Clozel
a0c210457b Use response encoding when escaping HTML
With SPR-9293, it is now possible to HTML escape text while taking into
account the current response encoding. When using UTF-* encodings, only
XML markup significant characters are escaped, since UTF-* natively
support those characters.

This commit adds a new servlet context parameter to enable this fix by
default in a Spring MVC application:

    <context-param>
      <param-name>responseEncodedHtmlEscape</param-name>
      <param-value>true</param-value>
    </context-param>

Issue: SPR-12350, SPR-12132
2014-10-24 11:53:47 +02:00
Juergen Hoeller
cb860364dd TilesConfigurer defensively expects null from getResources in case of no resources found
Also includes order preservation for resource results with Tiles 2 as well as retrieval failure logging with Tiles 3.

Issue: SPR-12362
2014-10-23 17:23:52 +02:00
Rossen Stoyanchev
051c5fb66a Update javadoc 2014-10-22 22:28:21 -04:00
Sam Brannen
4412bc68aa Polish Javadoc 2014-10-23 01:06:12 +02:00
Brian Clozel
a011b360d1 Polish SPR-12286
Issue: SPR-12286
2014-10-22 21:15:34 +02:00
Brian Clozel
86d97baf65 Allow defining default content negotiation strategy
During the HTTP Content Negotiation phase, the ContentNegotiationManager
uses configured ContentNegotiationStrategy(ies) to define the list of
content types accepted by the client.

When HTTP clients don't send Accept headers, nor use a configured
file extension in the request, nor a request param, developers can
define a default content type using the
ContentNegotiationConfigurer.defaultContentType() method.

This change adds a new overloaded defaultContentType method that takes a
ContentNegotiationStrategy as an argument. This strategy will take the
current request as an argument and return a default content type.

Issue: SPR-12286
2014-10-22 16:32:12 +02:00
Sam Brannen
6e5907ff39 Add missing text to CachingResourceTransformer Javadoc 2014-10-21 16:11:15 +02:00
Juergen Hoeller
8325b10080 Consistent formatting of license headers, package javadocs, and import declarations 2014-10-21 01:44:07 +02:00
Rossen Stoyanchev
c5e360d886 Fix regression with raw ResponseEntity type
This fix addresses a 4.1.1 regression where a raw ResponseEntity return
value (used to return potentially a different kind of body) caused an
exception.

The regression came from the fact we now try to render a null body in
order to give ResponseBodyAdvice a chance to substitute a different
value. That in turn means we have to try to determine the body type
from the method signature.

This change improves the logic for extracting the generic parameter
type to accommodate a raw ResponseEntity class. Also we avoid raising
HttpMediaTypeNotAcceptableException if the value to be rendered is
null.

Issue: SPR-12287
2014-10-17 13:21:08 -04:00
Rossen Stoyanchev
3d96c883d1 Cache lookup path in ResourceUrlEncodingFilter
Commit https://github.com/spring-projects/spring-framework/commit/2b97d6
introduced a change where the path within the DispatcherServlet is
determined with each call to ResourceUrlProvider.getForRequestUrl.

To avoid repeating that every time a URL is encoded through the
response, we now cache the result of the lookupPath determination in
ResourceUrlEncodingFilter.

Issue: SPR-12332
2014-10-16 22:01:26 -04:00
Rossen Stoyanchev
f353a28ff4 Polish ResourceUrlEncodingFilter 2014-10-16 22:01:26 -04:00
Rossen Stoyanchev
97441d054d Avoid HandlerMapping attribute in ResourceUrlProvider
The use of the HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE
in ResourceUrlProvider (as a way of saving lookup path determination)
leads to incorrect results. For example when the request is forwarded
the current requestUri may no longer be compariable to the value of the
PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE. Also where the request is mapped
using a pattern, the value of PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE is
not the same as the lookup path.

This change removes the use of the attribute from ResourceUrlProvider
and instead always determines the lookup path when getForRequestUrl
is called.

Issue: SPR-12332
2014-10-16 22:01:26 -04:00
Rossen Stoyanchev
8cce404696 Add check for ResponseEntity<void> with null return value
Issue: SPR-12287
2014-10-15 17:06:12 -04:00
Rossen Stoyanchev
a3dc5e0491 Polish 2014-10-15 16:56:29 -04:00
Rossen Stoyanchev
956b66bbd4 Fix issue with async return value type determination
Before this change, the type of asynchronously produced return values
(e.g. Callable, DeferredResult, ListenableFuture) could not be
properly determined with an actual resulting value of null. Or even
with an actual value returned, the generic type could not be properly
determined. This change fixes both of those issues.

Issue: SPR-12287
2014-10-15 16:39:03 -04:00
Rossen Stoyanchev
24d77f3272 Prepend leading slash in ResourceUrlProvider
The getForRequestUrl method of ResourceUrlProvider uses the
HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE attribute to
determine the relevant portion of the resource URL path.

However there are cases when that attribute may not have a leading
(e.g. when the current URL was matched to a prefix-based pattern
and hence extracted via PathMatcher#extractPathWithinPattern), which
interferes with the matching of resource URL paths to patterns.

This change ensures a leading slash is present

Issue: SPR-12281
2014-10-14 14:25:33 -04:00
Rossen Stoyanchev
fa4ba2a82b Polish resource handling tests 2014-10-14 14:25:32 -04:00
Rossen Stoyanchev
2df03d6316 Add interceptor to resourceHandlerMapping
The resourceHandlerMapping in the MVC Java config is not configured
with any interceptors, and in particular those added through the
InterceptorRegistry, which are otherwise added to all other handler
mapping beans created by the config. This means that the
ResourceUrlProviderExposingInterceptor (added in 4.0) is also not
used for resource requests.

This change ensures the ResourceUrlProviderExposingInterceptor is
configured on the resourceHandlerMapping.

Issue: SPR-12279
2014-10-13 16:21:31 -04:00
Juergen Hoeller
0fb8f0b469 Polishing 2014-10-13 17:58:15 +02:00
Rossen Stoyanchev
909156e1b6 Fix test failure 2014-09-30 10:57:40 -04:00
Rossen Stoyanchev
77bbfb6e7e Add order attribute to MVC ViewResolver config
The ViewResolverComposite that contains the ViewResolver's registered
throug the MVC Java config and namespace can now be assigned an
explicit order.
2014-09-30 10:38:23 -04:00
Rossen Stoyanchev
3b1d3257d5 Consistent default order for composite ViewResolver
The MVC Java config and namespace now have a consistent default order
or lowest precedence.
2014-09-30 10:38:23 -04:00
Rossen Stoyanchev
27f58db320 Polish ViewResolversBeanDefinitionParser 2014-09-30 10:38:23 -04:00
Sebastien Deleuze
4e24d66ff7 Create a builder for Jackson ObjectMapper
Jackson2ObjectMapperBuilder now allows to create ObjectMapper and XmlMapper
instances easily thanks to its fluent API.

This builder is used in Jackson message converters and views to instantiate default
ObjectMapper and XmlMapper.

This commit also add a createXmlMapper property to
Jackson2ObjectMapperFactoryBean in order to allow to create easily a XmlMapper
instance.

Issue: SPR-12243
2014-09-30 05:18:15 +02:00
Rossen Stoyanchev
803fc20019 Correct check for ViewResolver beans
Check for bean names of type rather than actual beans.

Issue: SPR-12267
2014-09-29 17:59:46 -04:00
Rossen Stoyanchev
49cf30e964 Update default view resolver in MVC Java config
When not ViewResolver's have been registered, detect if the context
contains any other ViewResolver beans. If not, add InternalResourceVR
to match default DispatcherServlet behavior.

Issue: SPR-12267
2014-09-29 17:22:00 -04:00
Juergen Hoeller
ae43b17fa0 JsonViewResponseBodyAdvice throws IllegalArgumentException in case of >1 view class specified
Issue: SPR-12270
2014-09-29 22:45:10 +02:00
Juergen Hoeller
1f3e195dac Polishing 2014-09-25 17:00:45 +02:00
Juergen Hoeller
281b243b88 HttpEntityMethodProcessor supports custom HttpEntity subclasses again
Issue: SPR-12242
2014-09-24 17:56:07 +02:00
Rossen Stoyanchev
a9b2a12491 Allow ResponseBodyAdvice to modify null return values
This change defers determination of whether to invoke a message
converter in case of a null @ResponseBody value (or ResponseEntity with
a null body) until after the invocation of the ResponseBodyAdvice
chain. This allows a ResponseBodyAdvice to handle null values
potentially turning them into non-null value.s

Issue: SPR-12152
2014-09-19 14:57:56 -04:00
Juergen Hoeller
d3ea242085 Polishing 2014-09-17 15:01:39 +02:00
Juergen Hoeller
15320db414 Polishing 2014-09-17 02:35:41 +02:00
Juergen Hoeller
c778868d66 WebMvcConfigurationSupport uses static NoOpValidator instead of anonymous inner class 2014-09-16 23:43:25 +02:00
Juergen Hoeller
5790fc904a Consistent support for java.util.Optional for all applicable handler method arguments
Issue: SPR-12171
2014-09-10 01:27:46 +02:00
Brian Clozel
6aef1a1d17 Fix ResourceUrlProvider path check in getForRequestUrl
Prior to this change, getForRequestUrl implementation would only work
for applications with a non-empty servlet path. So web applications
mapped to "/" would trigger a IllegalStateException while checking the
current request against the request path within the current mapping.

This change relaxes this and only check that the path within mapping is
within the request URL.

Issue: SPR-12158
2014-09-05 22:46:13 +02:00
Sebastien Deleuze
1c2857d15e Add tests for Jackson @JSONView when using XML serialization
This commit also fixes the AbstractMappingJacksonResponseBodyAdvice Javadoc.

Issue: SPR-12149
2014-09-05 17:13:27 +02:00
Juergen Hoeller
7953c5fd88 FrameworkServlet skips HttpServletResponse.getStatus() call on Servlet 2.5
Issue: SPR-12151
2014-09-05 00:37:13 +02:00
Sebastien Deleuze
a29e41b9fa Fix Jackson @JSONView when using XML serialization
Issue: SPR-12149
2014-09-04 11:57:54 +02:00
Brian Clozel
7b93cefe64 Fix resource-chain XML syntax for cache
This change moves the resource-cache configuration to the
<resource-chain/> tag, since enabling/disabling resource cache should
be driven by a property or a SpEL expression.

So now that configuration can be set with XML attributes:

  <mvc:resource-chain resource-cache="true"
  cache-manager="resourceCache" cache-name="test-resource-cache">

In order to mirror the JavaConfig behavior, the "resource-cache"
attribute is required.

Issue: SPR-12129
2014-09-04 10:05:33 +02:00
Rossen Stoyanchev
d85c1fbdd5 Fix initialization issue in ResourceUrlProvider
Before this change ResourceUrlProvider used getUrlMap to detect
ResourceHttpRequestHandler instances, however the map may contain bean
names as is the case when using <mvc:resources>. Instead it now uses
getHandlerMap.
2014-09-04 00:16:48 -04:00
Rossen Stoyanchev
3e390d1f7f Declare ResourceUrlProvider in MVC namespace
This change adds a ResourceUrlProvider bean to the
ResourceBeanDefinitionParser to match the same in the Java config.
For consistency the name of the bean in the Java config is renamed.

Also a ResourceUrlProviderExposingInterceptor is declares as a global
MappedInterceptor.
2014-09-04 00:16:48 -04:00
Juergen Hoeller
d75f128752 Polishing 2014-09-04 03:03:12 +02:00
Juergen Hoeller
86b7118da8 Polishing 2014-09-04 02:30:25 +02:00
Brian Clozel
125ae99035 Transform absolute links in ResourceTransformers
Prior to this change, ResourceTransformers that transformed resources by
updating the links to other resources, worked only if links were
relative to the resource being transformed.
For example, when the CssLinkResourceTransformer rewrote links within
a "main.css" resource, only links such as "../css/other.css" were
rewritten.

Using relative links is a recommended approach, because it's totally
independent from the application servlet path, context path, mappings...

This change allows absolute links to be rewritten by those Transformers,
provided those links are accurate and point to existing resources.

Issue: SPR-12137
2014-09-03 12:06:12 +02:00
Brian Clozel
2ef20f63bc Remove assertion making locations mandatory
This change finishes work started in SPR-12133.

Issue: SPR-12133
2014-09-02 10:44:08 +02:00
Sebastien Deleuze
36542549fa Add HTTP status to ServletRequestHandledEvent
Issue: SPR-12119
2014-08-29 21:47:03 -04:00
Brian Clozel
76c46fdbe3 Change resource handler XML Namespace
This commit changes the way a <mvc:resource-cache> can be configured
with a user defined Cache instance.

Now a reference to a CacheManager Bean and a Cache name must be
provided. This is a more flexible configuration for typical XML setups.

  <mvc:resource-cache
    cache-manager="resourceCache"
    cache-name="test-resource-cache"/>

Issue: SPR-12129
2014-08-29 18:55:39 +02:00
Rossen Stoyanchev
4df05d1f98 Remove assertion on number of resource locations
With the new ResourceResolver abstraction and resource resolver chain
in 4.1, the assumption that resources are found by checking for the URL
path under the configured locations is no longer accurate.

A custom ResourceResolver could find resources in ways that don't
depend on a list of locations.

Issuse: SPR-12133
2014-08-29 11:29:49 -04:00
Brian Clozel
d9f4016c35 Update resource handler XML Namespace
This change introduces a new <mvc:resource-chain/> tag that mirrors
the ResourceChainRegistration java config counterpart.

Resolvers and Transformers can be registered with bean/ref tags, and
specific tags have been created for <mvc:version-resovlver> and
<mvc:resource-cache> in order to make common configurations easier.

Note that a specific "auto-configuration" attribute on the
resource-chain allows to completely disable default registration of
Resolvers and Transformers (sane defaults considered by the Framework).

  <mvc:resources mapping="/resources/**" location="/, classpath:/META-INF/">
      <mvc:resource-chain>
        <mvc:resource-cache cache="resourceCache"/>
        <mvc:resolvers>
          <mvc:version-resolver>
            <mvc:fixed-version-strategy version="abc" patterns="/**/*.js"/>
            <mvc:content-version-strategy patterns="/**"/>
          </mvc:version-resolver>
        </mvc:resolvers>
        <mvc:transformers>
          <bean class="org.springframework.web.servlet.resource.AppCacheManifestTransformer"/>
        </mvc:transformers>
      </mvc:resource-chain>
  </mvc:resources>

This also fixes a typo in the class name of
AppCacheManifestResourceTransfo*r*mer.

Issue: SPR-12129
2014-08-29 16:02:49 +02:00
Rossen Stoyanchev
0b02551e2f Update resource handler Java config
This change separates out resource chain related methods previously in
ResourceHandlerRegistration into a new class ResourceChainRegistration
with the goal of improving readability.

Along with that, the registration of caching resolver and transformer
is now explicitly controled with a boolean flag (on the method used
to obtain the ResourceChainRegistration) and an overloaded method
also allows providing a Cache instance.

Issue: SPR-12124
2014-08-28 22:32:38 -04:00