From ca17edd5ac32c3936fdb8289ae52433fd37b46e2 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 18 Sep 2016 21:04:37 +0200 Subject: [PATCH] Revised checkResource implementation Issue: SPR-14729 --- .../view/script/ScriptTemplateView.java | 41 +++++++++---------- .../view/script/ScriptTemplateViewTests.java | 2 +- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java index 66a60040437..73f4fbed2b0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java @@ -16,7 +16,6 @@ package org.springframework.web.servlet.view.script; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; @@ -193,19 +192,6 @@ public class ScriptTemplateView extends AbstractUrlBasedView { } } - @Override - public boolean checkResource(Locale locale) throws Exception { - try { - getTemplate(getUrl()); - return true; - } - catch (IllegalStateException exc) { - if (logger.isDebugEnabled()) { - logger.debug("No ScriptTemplate view found for URL: " + getUrl()); - } - return false; - } - } @Override protected void initApplicationContext(ApplicationContext context) { @@ -264,7 +250,6 @@ public class ScriptTemplateView extends AbstractUrlBasedView { Assert.isTrue(this.renderFunction != null, "The 'renderFunction' property must be defined."); } - protected ScriptEngine getEngine() { if (Boolean.FALSE.equals(this.sharedEngine)) { Map engines = enginesHolder.get(); @@ -299,14 +284,17 @@ public class ScriptTemplateView extends AbstractUrlBasedView { protected void loadScripts(ScriptEngine engine) { if (!ObjectUtils.isEmpty(this.scripts)) { - try { - for (String script : this.scripts) { - Resource resource = getResource(script); + for (String script : this.scripts) { + Resource resource = getResource(script); + if (resource == null) { + throw new IllegalStateException("Script resource [" + script + "] not found"); + } + try { engine.eval(new InputStreamReader(resource.getInputStream())); } - } - catch (Exception ex) { - throw new IllegalStateException("Failed to load script", ex); + catch (Throwable ex) { + throw new IllegalStateException("Failed to evaluate script [" + script + "]", ex); + } } } } @@ -318,7 +306,7 @@ public class ScriptTemplateView extends AbstractUrlBasedView { return resource; } } - throw new IllegalStateException("Resource [" + location + "] not found"); + return null; } protected ScriptTemplateConfig autodetectViewConfig() throws BeansException { @@ -333,6 +321,12 @@ public class ScriptTemplateView extends AbstractUrlBasedView { } } + + @Override + public boolean checkResource(Locale locale) throws Exception { + return (getResource(getUrl()) != null); + } + @Override protected void prepareResponse(HttpServletRequest request, HttpServletResponse response) { super.prepareResponse(request, response); @@ -369,6 +363,9 @@ public class ScriptTemplateView extends AbstractUrlBasedView { protected String getTemplate(String path) throws IOException { Resource resource = getResource(path); + if (resource == null) { + throw new IllegalStateException("Template resource [" + path + "] not found"); + } InputStreamReader reader = new InputStreamReader(resource.getInputStream(), this.charset); return FileCopyUtils.copyToString(reader); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/ScriptTemplateViewTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/ScriptTemplateViewTests.java index d15531260f6..5e1e7726266 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/ScriptTemplateViewTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/script/ScriptTemplateViewTests.java @@ -44,7 +44,6 @@ import org.springframework.mock.web.test.MockServletContext; import org.springframework.web.context.support.StaticWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; -import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import static org.mockito.BDDMockito.*; @@ -64,6 +63,7 @@ public class ScriptTemplateViewTests { @Rule public ExpectedException expectedException = ExpectedException.none(); + @Before public void setup() { this.configurer = new ScriptTemplateConfigurer();