Skip to content

Commit c8b8dc5

Browse files
committed
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 (cherry picked from commit cb86036)
1 parent aa82da8 commit c8b8dc5

File tree

4 files changed

+32
-20
lines changed

4 files changed

+32
-20
lines changed

spring-webmvc-tiles3/src/main/java/org/springframework/web/servlet/view/tiles3/SpringWildcardServletTilesApplicationContext.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2013 the original author or authors.
2+
* Copyright 2002-2014 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -37,6 +37,7 @@
3737
* Spring-specific subclass of the Tiles ServletApplicationContext.
3838
*
3939
* @author Rossen Stoyanchev
40+
* @author Juergen Hoeller
4041
* @since 3.2
4142
*/
4243
public class SpringWildcardServletTilesApplicationContext extends ServletApplicationContext {
@@ -77,24 +78,26 @@ public Collection<ApplicationResource> getResources(String path) {
7778
resources = this.resolver.getResources(path);
7879
}
7980
catch (IOException ex) {
80-
return Collections.<ApplicationResource> emptyList();
81+
((ServletContext) getContext()).log("Resource retrieval failed for path: " + path, ex);
82+
return Collections.emptyList();
8183
}
82-
Collection<ApplicationResource> resourceList = new ArrayList<ApplicationResource>();
83-
if (!ObjectUtils.isEmpty(resources)) {
84-
for (Resource resource : resources) {
85-
URL url;
86-
try {
87-
url = resource.getURL();
88-
resourceList.add(new URLApplicationResource(url.toExternalForm(), url));
89-
}
90-
catch (IOException ex) {
91-
// shouldn't happen with the kind of resources we're using
92-
throw new IllegalArgumentException("No URL for " + resource.toString(), ex);
93-
}
84+
if (ObjectUtils.isEmpty(resources)) {
85+
((ServletContext) getContext()).log("No resources found for path pattern: " + path);
86+
return Collections.emptyList();
87+
}
88+
89+
Collection<ApplicationResource> resourceList = new ArrayList<ApplicationResource>(resources.length);
90+
for (Resource resource : resources) {
91+
try {
92+
URL url = resource.getURL();
93+
resourceList.add(new URLApplicationResource(url.toExternalForm(), url));
94+
}
95+
catch (IOException ex) {
96+
// Shouldn't happen with the kind of resources we're using
97+
throw new IllegalArgumentException("No URL for " + resource, ex);
9498
}
9599
}
96100
return resourceList;
97101
}
98102

99103
}
100-

spring-webmvc-tiles3/src/main/java/org/springframework/web/servlet/view/tiles3/TilesConfigurer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.web.servlet.view.tiles3;
1818

19+
import java.util.Collection;
1920
import java.util.LinkedList;
2021
import java.util.List;
2122
import javax.el.ArrayELResolver;
@@ -302,7 +303,10 @@ protected List<ApplicationResource> getSources(ApplicationContext applicationCon
302303
if (definitions != null) {
303304
List<ApplicationResource> result = new LinkedList<ApplicationResource>();
304305
for (String definition : definitions) {
305-
result.addAll(applicationContext.getResources(definition));
306+
Collection<ApplicationResource> resources = applicationContext.getResources(definition);
307+
if (resources != null) {
308+
result.addAll(resources);
309+
}
306310
}
307311
return result;
308312
}

spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles2/SpringWildcardServletTilesApplicationContext.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@
1818

1919
import java.io.IOException;
2020
import java.net.URL;
21-
import java.util.HashSet;
21+
import java.util.LinkedHashSet;
2222
import java.util.Set;
2323
import javax.servlet.ServletContext;
2424

2525
import org.apache.tiles.servlet.context.ServletTilesApplicationContext;
2626

2727
import org.springframework.core.io.Resource;
2828
import org.springframework.core.io.support.ResourcePatternResolver;
29+
import org.springframework.util.ObjectUtils;
2930
import org.springframework.web.context.support.ServletContextResourcePatternResolver;
3031

3132
/**
@@ -59,8 +60,8 @@ public URL getResource(String path) throws IOException {
5960
public Set<URL> getResources(String path) throws IOException {
6061
Set<URL> urlSet = null;
6162
Resource[] resources = this.resolver.getResources(path);
62-
if (resources != null && resources.length > 0) {
63-
urlSet = new HashSet<URL>();
63+
if (!ObjectUtils.isEmpty(resources)) {
64+
urlSet = new LinkedHashSet<URL>(resources.length);
6465
for (Resource resource : resources) {
6566
urlSet.add(resource.getURL());
6667
}

spring-webmvc/src/main/java/org/springframework/web/servlet/view/tiles2/TilesConfigurer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.LinkedList;
2424
import java.util.List;
2525
import java.util.Map;
26+
import java.util.Set;
2627
import javax.servlet.ServletContext;
2728
import javax.servlet.jsp.JspFactory;
2829

@@ -307,7 +308,10 @@ protected List<URL> getSourceURLs(TilesApplicationContext applicationContext,
307308
try {
308309
List<URL> result = new LinkedList<URL>();
309310
for (String definition : definitions) {
310-
result.addAll(applicationContext.getResources(definition));
311+
Set<URL> resources = applicationContext.getResources(definition);
312+
if (resources != null) {
313+
result.addAll(resources);
314+
}
311315
}
312316
return result;
313317
}

0 commit comments

Comments
 (0)