You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by wo...@apache.org on 2017/07/14 15:51:11 UTC

incubator-freemarker git commit: FREEMARKER-55: Renaming Freemarker to FreeMarker

Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 aaa100c0c -> 5b856d3a5


FREEMARKER-55: Renaming Freemarker to FreeMarker

This closes #28


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/5b856d3a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/5b856d3a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/5b856d3a

Branch: refs/heads/3
Commit: 5b856d3a5f4e437e2f83055ea1c06c8fb49f4a00
Parents: aaa100c
Author: Woonsan Ko <wo...@apache.org>
Authored: Fri Jul 14 11:27:17 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Fri Jul 14 11:49:22 2017 -0400

----------------------------------------------------------------------
 .../spring/web/view/AbstractFreeMarkerView.java | 170 ++++++++++++++++++
 .../spring/web/view/AbstractFreemarkerView.java | 170 ------------------
 .../spring/web/view/FreeMarkerView.java         | 168 ++++++++++++++++++
 .../spring/web/view/FreeMarkerViewResolver.java | 149 ++++++++++++++++
 .../spring/web/view/FreemarkerView.java         | 168 ------------------
 .../spring/web/view/FreemarkerViewResolver.java | 149 ----------------
 .../SpringResourceTemplateLoaderTest.java       |  84 +++++++++
 .../SpringResourceTemplateLoaderTest.java       |  84 ---------
 .../web/view/FreeMarkerViewResolverTest.java    |  98 +++++++++++
 .../spring/web/view/FreeMarkerViewTest.java     | 176 +++++++++++++++++++
 .../web/view/FreemarkerViewResolverTest.java    |  98 -----------
 .../spring/web/view/FreemarkerViewTest.java     | 176 -------------------
 12 files changed, 845 insertions(+), 845 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreeMarkerView.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreeMarkerView.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreeMarkerView.java
new file mode 100644
index 0000000..6d3c2ae
--- /dev/null
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreeMarkerView.java
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.freemarker.spring.web.view;
+
+import java.io.IOException;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.ParseException;
+import org.apache.freemarker.core.Template;
+import org.apache.freemarker.core.TemplateNotFoundException;
+import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
+import org.apache.freemarker.core.model.TemplateHashModel;
+import org.apache.freemarker.core.templateresolver.MalformedTemplateNameException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContextException;
+import org.springframework.web.servlet.view.AbstractTemplateView;
+
+/**
+ * Adapter base class for FreeMarker template-based views, with the ability to access {@link Configuration}
+ * and {@link ObjectWrapperAndUnwrapper}.
+ */
+public abstract class AbstractFreeMarkerView extends AbstractTemplateView {
+
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractFreeMarkerView.class);
+
+    /**
+     * FreeMarker {@link Configuration} instance.
+     */
+    private Configuration configuration;
+
+    /**
+     * {@link ObjectWrapperAndUnwrapper} instance to use in model building.
+     */
+    private ObjectWrapperAndUnwrapper objectWrapper;
+
+    /**
+     * Template {@link Locale}.
+     */
+    private Locale locale;
+
+    /**
+     * Get FreeMarker {@link Configuration} instance.
+     * @return {@link Configuration} instance
+     */
+    public Configuration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * Set FreeMarker {@link Configuration} instance.
+     * @param configuration {@link Configuration} instance
+     */
+    public void setConfiguration(Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+    /**
+     * Get {@link ObjectWrapperAndUnwrapper} that is used in model building.
+     * @return {@link ObjectWrapperAndUnwrapper} that is used in model building
+     */
+    public ObjectWrapperAndUnwrapper getObjectWrapper() {
+        return objectWrapper;
+    }
+
+    /**
+     * Set {@link ObjectWrapperAndUnwrapper} that is used in model building.
+     * @param objectWrapper {@link ObjectWrapperAndUnwrapper} that is used in model building
+     */
+    public void setObjectWrapper(ObjectWrapperAndUnwrapper objectWrapper) {
+        this.objectWrapper = objectWrapper;
+    }
+
+    /**
+     * Get template locale.
+     * @return template locale
+     */
+    public Locale getLocale() {
+        return locale;
+    }
+
+    /**
+     * Set template locale.
+     * @param locale template locale
+     */
+    public void setLocale(Locale locale) {
+        this.locale = locale;
+    }
+
+    @Override
+    public boolean checkResource(Locale locale) throws Exception {
+        if (this.locale == null) {
+            this.locale = locale;
+        }
+
+        try {
+            // Check whether the underlying resource exists by trying to get the template.
+            getTemplate();
+            return true;
+        } catch (TemplateNotFoundException e) {
+            LOG.debug("No view found for URL: {}", getUrl());
+        } catch (MalformedTemplateNameException e) {
+            throw new ApplicationContextException("Malformed template name: " + getUrl(), e);
+        } catch (ParseException e) {
+            throw new ApplicationContextException("Template parsing exception: " + getUrl(), e);
+        } catch (IOException e) {
+            throw new ApplicationContextException("Template IO exception: " + getUrl(), e);
+        }
+
+        return false;
+    }
+
+    @Override
+    protected void renderMergedTemplateModel(Map<String, Object> model, HttpServletRequest request,
+            HttpServletResponse response) throws Exception {
+        getTemplate().process(createModel(model, getObjectWrapper(), request, response), response.getWriter());
+    }
+
+    /**
+     * Get template from the FreeMarker {@link Configuration} instance.
+     * @return template from the FreeMarker {@link Configuration} instance
+     * @throws TemplateNotFoundException if template is not found
+     * @throws MalformedTemplateNameException if template name is malformed
+     * @throws ParseException if the template is syntactically bad
+     * @throws IOException if template cannot be read due to IO error
+     */
+    protected Template getTemplate()
+            throws TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException {
+        return getConfiguration().getTemplate(normalizeTemplateName(getUrl()), getLocale());
+    }
+
+    /**
+     * Create model for the template.
+     * @param map map as initial source for the template model
+     * @param objectWrapperForModel ObjectWrapper to be used in model building
+     * @param request request
+     * @param response response
+     * @return model for the template
+     */
+    protected abstract TemplateHashModel createModel(Map<String, Object> map,
+            ObjectWrapperAndUnwrapper objectWrapperForModel, HttpServletRequest request, HttpServletResponse response);
+
+    private String normalizeTemplateName(String name) {
+        if (name != null) {
+            return (name.startsWith("/")) ? name.substring(1) : name;
+        }
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java
deleted file mode 100644
index abd5e32..0000000
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/AbstractFreemarkerView.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.freemarker.spring.web.view;
-
-import java.io.IOException;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.ParseException;
-import org.apache.freemarker.core.Template;
-import org.apache.freemarker.core.TemplateNotFoundException;
-import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
-import org.apache.freemarker.core.model.TemplateHashModel;
-import org.apache.freemarker.core.templateresolver.MalformedTemplateNameException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.ApplicationContextException;
-import org.springframework.web.servlet.view.AbstractTemplateView;
-
-/**
- * Adapter base class for FreeMarker template-based views, with the ability to access {@link Configuration}
- * and {@link ObjectWrapperAndUnwrapper}.
- */
-public abstract class AbstractFreemarkerView extends AbstractTemplateView {
-
-    private static final Logger LOG = LoggerFactory.getLogger(AbstractFreemarkerView.class);
-
-    /**
-     * FreeMarker {@link Configuration} instance.
-     */
-    private Configuration configuration;
-
-    /**
-     * {@link ObjectWrapperAndUnwrapper} instance to use in model building.
-     */
-    private ObjectWrapperAndUnwrapper objectWrapper;
-
-    /**
-     * Template {@link Locale}.
-     */
-    private Locale locale;
-
-    /**
-     * Get FreeMarker {@link Configuration} instance.
-     * @return {@link Configuration} instance
-     */
-    public Configuration getConfiguration() {
-        return configuration;
-    }
-
-    /**
-     * Set FreeMarker {@link Configuration} instance.
-     * @param configuration {@link Configuration} instance
-     */
-    public void setConfiguration(Configuration configuration) {
-        this.configuration = configuration;
-    }
-
-    /**
-     * Get {@link ObjectWrapperAndUnwrapper} that is used in model building.
-     * @return {@link ObjectWrapperAndUnwrapper} that is used in model building
-     */
-    public ObjectWrapperAndUnwrapper getObjectWrapper() {
-        return objectWrapper;
-    }
-
-    /**
-     * Set {@link ObjectWrapperAndUnwrapper} that is used in model building.
-     * @param objectWrapper {@link ObjectWrapperAndUnwrapper} that is used in model building
-     */
-    public void setObjectWrapper(ObjectWrapperAndUnwrapper objectWrapper) {
-        this.objectWrapper = objectWrapper;
-    }
-
-    /**
-     * Get template locale.
-     * @return template locale
-     */
-    public Locale getLocale() {
-        return locale;
-    }
-
-    /**
-     * Set template locale.
-     * @param locale template locale
-     */
-    public void setLocale(Locale locale) {
-        this.locale = locale;
-    }
-
-    @Override
-    public boolean checkResource(Locale locale) throws Exception {
-        if (this.locale == null) {
-            this.locale = locale;
-        }
-
-        try {
-            // Check whether the underlying resource exists by trying to get the template.
-            getTemplate();
-            return true;
-        } catch (TemplateNotFoundException e) {
-            LOG.debug("No view found for URL: {}", getUrl());
-        } catch (MalformedTemplateNameException e) {
-            throw new ApplicationContextException("Malformed template name: " + getUrl(), e);
-        } catch (ParseException e) {
-            throw new ApplicationContextException("Template parsing exception: " + getUrl(), e);
-        } catch (IOException e) {
-            throw new ApplicationContextException("Template IO exception: " + getUrl(), e);
-        }
-
-        return false;
-    }
-
-    @Override
-    protected void renderMergedTemplateModel(Map<String, Object> model, HttpServletRequest request,
-            HttpServletResponse response) throws Exception {
-        getTemplate().process(createModel(model, getObjectWrapper(), request, response), response.getWriter());
-    }
-
-    /**
-     * Get template from the FreeMarker {@link Configuration} instance.
-     * @return template from the FreeMarker {@link Configuration} instance
-     * @throws TemplateNotFoundException if template is not found
-     * @throws MalformedTemplateNameException if template name is malformed
-     * @throws ParseException if the template is syntactically bad
-     * @throws IOException if template cannot be read due to IO error
-     */
-    protected Template getTemplate()
-            throws TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException {
-        return getConfiguration().getTemplate(normalizeTemplateName(getUrl()), getLocale());
-    }
-
-    /**
-     * Create model for the template.
-     * @param map map as initial source for the template model
-     * @param objectWrapperForModel ObjectWrapper to be used in model building
-     * @param request request
-     * @param response response
-     * @return model for the template
-     */
-    protected abstract TemplateHashModel createModel(Map<String, Object> map,
-            ObjectWrapperAndUnwrapper objectWrapperForModel, HttpServletRequest request, HttpServletResponse response);
-
-    private String normalizeTemplateName(String name) {
-        if (name != null) {
-            return (name.startsWith("/")) ? name.substring(1) : name;
-        }
-        return null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java
new file mode 100644
index 0000000..e827db5
--- /dev/null
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerView.java
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.freemarker.spring.web.view;
+
+import java.util.Map;
+
+import javax.servlet.GenericServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
+import org.apache.freemarker.core.model.TemplateHashModel;
+import org.apache.freemarker.servlet.AllHttpScopesHashModel;
+import org.apache.freemarker.servlet.FreemarkerServlet;
+import org.apache.freemarker.servlet.HttpRequestHashModel;
+import org.apache.freemarker.servlet.HttpRequestParametersHashModel;
+import org.apache.freemarker.servlet.HttpSessionHashModel;
+import org.apache.freemarker.servlet.ServletContextHashModel;
+import org.apache.freemarker.servlet.jsp.TaglibFactory;
+
+/**
+ * FreeMarker template based view implementation, with being able to provide a {@link ServletContextHashModel}
+ * and {@link TaglibFactory} models to the templates.
+ */
+public class FreeMarkerView extends AbstractFreeMarkerView {
+
+    /**
+     * Internal servlet instance to provide a page object in JSP tag library usages.
+     * @see {@link javax.servlet.jsp.PageContext#getPage()}
+     */
+    private GenericServlet pageContextServlet;
+
+    /**
+     * {@link ServletContextHashModel} instance for templates to access servlet context attributes.
+     */
+    private ServletContextHashModel servletContextModel;
+
+    /**
+     * {@link TaglibFactory} instance for templates to be able to use JSP tag libraries.
+     */
+    private TaglibFactory taglibFactory;
+
+    /**
+     * Get {@link GenericServlet} instance which is a page object in JSP tag library usages.
+     * @return {@link GenericServlet} instance which is a page object in JSP tag library usages
+     */
+    public GenericServlet getPageContextServlet() {
+        return pageContextServlet;
+    }
+
+    /**
+     * Set {@link GenericServlet} instance which is a page object in JSP tag library usages.
+     * @param pageContextServlet {@link GenericServlet} instance which is a page object in JSP tag library
+     * usages
+     */
+    public void setPageContextServlet(GenericServlet pageContextServlet) {
+        this.pageContextServlet = pageContextServlet;
+    }
+
+    /**
+     * Get {@link ServletContextHashModel} instance by which templates can access servlet context attributes.
+     * @return {@link ServletContextHashModel} instance by which templates can access servlet context attributes
+     */
+    public ServletContextHashModel getServletContextModel() {
+        return servletContextModel;
+    }
+
+    /**
+     * Set {@link ServletContextHashModel} instance by which templates can access servlet context attributes.
+     * @param servletContextModel {@link ServletContextHashModel} instance by which templates can access servlet
+     * context attributes
+     */
+    public void setServletContextModel(ServletContextHashModel servletContextModel) {
+        this.servletContextModel = servletContextModel;
+    }
+
+    /**
+     * Get {@link TaglibFactory} instance by which templates can use JSP tag libraries.
+     * @return {@link TaglibFactory} instance by which templates can use JSP tag libraries.
+     */
+    public TaglibFactory getTaglibFactory() {
+        return taglibFactory;
+    }
+
+    /**
+     * Set {@link TaglibFactory} instance by which templates can use JSP tag libraries.
+     * @param taglibFactory {@link TaglibFactory} instance by which templates can use JSP tag libraries.
+     */
+    public void setTaglibFactory(TaglibFactory taglibFactory) {
+        this.taglibFactory = taglibFactory;
+    }
+
+    @Override
+    protected TemplateHashModel createModel(Map<String, Object> map, ObjectWrapperAndUnwrapper objectWrapper,
+            HttpServletRequest request, HttpServletResponse response) {
+
+        AllHttpScopesHashModel model = new AllHttpScopesHashModel(objectWrapper, getServletContext(), request);
+
+        model.putUnlistedModel(FreemarkerServlet.KEY_APPLICATION, getServletContextModel());
+
+        model.putUnlistedModel(FreemarkerServlet.KEY_SESSION,
+                getHttpSessionModel(objectWrapper, request, response));
+
+        HttpRequestHashModel requestModel = (HttpRequestHashModel) request
+                .getAttribute(FreemarkerServlet.ATTR_REQUEST_MODEL);
+        HttpRequestParametersHashModel requestParametersModel = (HttpRequestParametersHashModel) request
+                .getAttribute(FreemarkerServlet.ATTR_REQUEST_PARAMETERS_MODEL);
+
+        if (requestModel == null || requestModel.getRequest() != request) {
+            requestModel = new HttpRequestHashModel(request, response, objectWrapper);
+            request.setAttribute(FreemarkerServlet.ATTR_REQUEST_MODEL, requestModel);
+            requestParametersModel = new HttpRequestParametersHashModel(request, objectWrapper);
+        }
+
+        model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST, requestModel);
+        model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST_PARAMETERS, requestParametersModel);
+
+        model.putUnlistedModel(FreemarkerServlet.KEY_JSP_TAGLIBS, getTaglibFactory());
+
+        model.putAll(map);
+
+        return model;
+    }
+
+    /**
+     * Get {@link HttpSessionHashModel} instance by which templates can access session attributes.
+     * @param objectWrapperForModel ObjectWrapper to be used in model building
+     * @param request request
+     * @param response response
+     * @return {@link HttpSessionHashModel} instance by which templates can access session attributes
+     */
+    protected HttpSessionHashModel getHttpSessionModel(ObjectWrapperAndUnwrapper objectWrapperForModel,
+            HttpServletRequest request, HttpServletResponse response) {
+        HttpSessionHashModel sessionModel;
+        HttpSession session = request.getSession(false);
+
+        if (session != null) {
+            sessionModel = (HttpSessionHashModel) session.getAttribute(FreemarkerServlet.ATTR_SESSION_MODEL);
+
+            if (sessionModel == null || sessionModel.isOrphaned(session)) {
+                sessionModel = new HttpSessionHashModel(session, objectWrapperForModel);
+                session.setAttribute(FreemarkerServlet.ATTR_SESSION_MODEL, sessionModel);
+            }
+        } else {
+            sessionModel = new HttpSessionHashModel(getPageContextServlet(), request, response, objectWrapperForModel);
+        }
+
+        return sessionModel;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java
new file mode 100644
index 0000000..101f5be
--- /dev/null
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolver.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.freemarker.spring.web.view;
+
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletException;
+
+import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
+import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
+import org.apache.freemarker.servlet.ServletContextHashModel;
+import org.apache.freemarker.servlet.jsp.TaglibFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.web.servlet.view.AbstractTemplateViewResolver;
+import org.springframework.web.servlet.view.AbstractUrlBasedView;
+import org.springframework.web.servlet.view.UrlBasedViewResolver;
+
+/**
+ * FreeMarker template view resolver implementation, extending {@link AbstractTemplateViewResolver} that extends
+ * {@link UrlBasedViewResolver}.
+ * <p>
+ * The FreeMarker {@link Configuration} property must be set at least. Otherwise this throws {@link IllegalStateException}
+ * during initialization. In the bean initialization phase, this retrieves {@link ObjectWrapperAndUnwrapper} from
+ * the {@link Configuration} and instantiate the internal page object ({@link PageContextServlet}) for JSP tag
+ * library usages, {@link ServletContextHashModel} property for servlet context attribute accesses and {@link TaglibFactory}
+ * property for JSP tag library usages.
+ * </p>
+ */
+public class FreeMarkerViewResolver extends AbstractTemplateViewResolver implements InitializingBean {
+
+    /**
+     * FreeMarker {@link Configuration} instance.
+     */
+    private Configuration configuration;
+
+    /**
+     * {@link ObjectWrapperAndUnwrapper} instance to be used in model building.
+     */
+    private ObjectWrapperAndUnwrapper objectWrapper;
+
+    /**
+     * Internal servlet instance to provide a page object in JSP tag library usages.
+     * @see {@link javax.servlet.jsp.PageContext#getPage()}
+     */
+    private GenericServlet pageContextServlet;
+
+    /**
+     * {@link ServletContextHashModel} instance for templates to access servlet context attributes.
+     */
+    private ServletContextHashModel servletContextModel;
+
+    /**
+     * {@link TaglibFactory} instance for templates to be able to use JSP tag libraries.
+     */
+    private TaglibFactory taglibFactory;
+
+    /**
+     * Constructs view resolver.
+     */
+    public FreeMarkerViewResolver() {
+        super();
+        setViewClass(FreeMarkerView.class);
+    }
+
+    /**
+     * Get FreeMarker {@link Configuration} instance.
+     * @return FreeMarker {@link Configuration} instance
+     */
+    public Configuration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * Set FreeMarker {@link Configuration} instance.
+     * @param configuration FreeMarker {@link Configuration} instance
+     */
+    public void setConfiguration(Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        if (configuration == null) {
+            throw new IllegalStateException("Configuration is not set.");
+        }
+
+        if (objectWrapper == null) {
+            if (configuration.isObjectWrapperSet()) {
+                if (!(configuration.getObjectWrapper() instanceof ObjectWrapperAndUnwrapper)) {
+                    throw new RuntimeException(
+                            FreeMarkerViewResolver.class.getSimpleName() + " requires an ObjectWrapper that "
+                                    + "implements " + ObjectWrapperAndUnwrapper.class.getName()
+                                    + ", but the Configuration's ObjectWrapper doesn't do that: "
+                                    + configuration.getObjectWrapper().getClass().getName());
+                }
+
+                objectWrapper = (ObjectWrapperAndUnwrapper) configuration.getObjectWrapper();
+            } else {
+                objectWrapper = new DefaultObjectWrapper.Builder(configuration.getIncompatibleImprovements()).build();
+            }
+        }
+
+        pageContextServlet = new PageContextServlet();
+
+        try {
+            pageContextServlet
+                    .init(new PageContextServletConfig(getServletContext(), PageContextServlet.class.getSimpleName()));
+        } catch (ServletException e) {
+            // never happens...
+        }
+
+        servletContextModel = new ServletContextHashModel(pageContextServlet, objectWrapper);
+
+        taglibFactory = new TaglibFactory.Builder(getServletContext(), objectWrapper).build();
+    }
+
+    @Override
+    protected Class<?> requiredViewClass() {
+        return FreeMarkerView.class;
+    }
+
+    @Override
+    protected AbstractUrlBasedView buildView(String viewName) throws Exception {
+        FreeMarkerView view = (FreeMarkerView) super.buildView(viewName);
+        view.setConfiguration(configuration);
+        view.setObjectWrapper(objectWrapper);
+        view.setPageContextServlet(pageContextServlet);
+        view.setServletContextModel(servletContextModel);
+        view.setTaglibFactory(taglibFactory);
+        return view;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
deleted file mode 100644
index f3ac63b..0000000
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.freemarker.spring.web.view;
-
-import java.util.Map;
-
-import javax.servlet.GenericServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
-import org.apache.freemarker.core.model.TemplateHashModel;
-import org.apache.freemarker.servlet.AllHttpScopesHashModel;
-import org.apache.freemarker.servlet.FreemarkerServlet;
-import org.apache.freemarker.servlet.HttpRequestHashModel;
-import org.apache.freemarker.servlet.HttpRequestParametersHashModel;
-import org.apache.freemarker.servlet.HttpSessionHashModel;
-import org.apache.freemarker.servlet.ServletContextHashModel;
-import org.apache.freemarker.servlet.jsp.TaglibFactory;
-
-/**
- * FreeMarker template based view implementation, with being able to provide a {@link ServletContextHashModel}
- * and {@link TaglibFactory} models to the templates.
- */
-public class FreemarkerView extends AbstractFreemarkerView {
-
-    /**
-     * Internal servlet instance to provide a page object in JSP tag library usages.
-     * @see {@link javax.servlet.jsp.PageContext#getPage()}
-     */
-    private GenericServlet pageContextServlet;
-
-    /**
-     * {@link ServletContextHashModel} instance for templates to access servlet context attributes.
-     */
-    private ServletContextHashModel servletContextModel;
-
-    /**
-     * {@link TaglibFactory} instance for templates to be able to use JSP tag libraries.
-     */
-    private TaglibFactory taglibFactory;
-
-    /**
-     * Get {@link GenericServlet} instance which is a page object in JSP tag library usages.
-     * @return {@link GenericServlet} instance which is a page object in JSP tag library usages
-     */
-    public GenericServlet getPageContextServlet() {
-        return pageContextServlet;
-    }
-
-    /**
-     * Set {@link GenericServlet} instance which is a page object in JSP tag library usages.
-     * @param pageContextServlet {@link GenericServlet} instance which is a page object in JSP tag library
-     * usages
-     */
-    public void setPageContextServlet(GenericServlet pageContextServlet) {
-        this.pageContextServlet = pageContextServlet;
-    }
-
-    /**
-     * Get {@link ServletContextHashModel} instance by which templates can access servlet context attributes.
-     * @return {@link ServletContextHashModel} instance by which templates can access servlet context attributes
-     */
-    public ServletContextHashModel getServletContextModel() {
-        return servletContextModel;
-    }
-
-    /**
-     * Set {@link ServletContextHashModel} instance by which templates can access servlet context attributes.
-     * @param servletContextModel {@link ServletContextHashModel} instance by which templates can access servlet
-     * context attributes
-     */
-    public void setServletContextModel(ServletContextHashModel servletContextModel) {
-        this.servletContextModel = servletContextModel;
-    }
-
-    /**
-     * Get {@link TaglibFactory} instance by which templates can use JSP tag libraries.
-     * @return {@link TaglibFactory} instance by which templates can use JSP tag libraries.
-     */
-    public TaglibFactory getTaglibFactory() {
-        return taglibFactory;
-    }
-
-    /**
-     * Set {@link TaglibFactory} instance by which templates can use JSP tag libraries.
-     * @param taglibFactory {@link TaglibFactory} instance by which templates can use JSP tag libraries.
-     */
-    public void setTaglibFactory(TaglibFactory taglibFactory) {
-        this.taglibFactory = taglibFactory;
-    }
-
-    @Override
-    protected TemplateHashModel createModel(Map<String, Object> map, ObjectWrapperAndUnwrapper objectWrapper,
-            HttpServletRequest request, HttpServletResponse response) {
-
-        AllHttpScopesHashModel model = new AllHttpScopesHashModel(objectWrapper, getServletContext(), request);
-
-        model.putUnlistedModel(FreemarkerServlet.KEY_APPLICATION, getServletContextModel());
-
-        model.putUnlistedModel(FreemarkerServlet.KEY_SESSION,
-                getHttpSessionModel(objectWrapper, request, response));
-
-        HttpRequestHashModel requestModel = (HttpRequestHashModel) request
-                .getAttribute(FreemarkerServlet.ATTR_REQUEST_MODEL);
-        HttpRequestParametersHashModel requestParametersModel = (HttpRequestParametersHashModel) request
-                .getAttribute(FreemarkerServlet.ATTR_REQUEST_PARAMETERS_MODEL);
-
-        if (requestModel == null || requestModel.getRequest() != request) {
-            requestModel = new HttpRequestHashModel(request, response, objectWrapper);
-            request.setAttribute(FreemarkerServlet.ATTR_REQUEST_MODEL, requestModel);
-            requestParametersModel = new HttpRequestParametersHashModel(request, objectWrapper);
-        }
-
-        model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST, requestModel);
-        model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST_PARAMETERS, requestParametersModel);
-
-        model.putUnlistedModel(FreemarkerServlet.KEY_JSP_TAGLIBS, getTaglibFactory());
-
-        model.putAll(map);
-
-        return model;
-    }
-
-    /**
-     * Get {@link HttpSessionHashModel} instance by which templates can access session attributes.
-     * @param objectWrapperForModel ObjectWrapper to be used in model building
-     * @param request request
-     * @param response response
-     * @return {@link HttpSessionHashModel} instance by which templates can access session attributes
-     */
-    protected HttpSessionHashModel getHttpSessionModel(ObjectWrapperAndUnwrapper objectWrapperForModel,
-            HttpServletRequest request, HttpServletResponse response) {
-        HttpSessionHashModel sessionModel;
-        HttpSession session = request.getSession(false);
-
-        if (session != null) {
-            sessionModel = (HttpSessionHashModel) session.getAttribute(FreemarkerServlet.ATTR_SESSION_MODEL);
-
-            if (sessionModel == null || sessionModel.isOrphaned(session)) {
-                sessionModel = new HttpSessionHashModel(session, objectWrapperForModel);
-                session.setAttribute(FreemarkerServlet.ATTR_SESSION_MODEL, sessionModel);
-            }
-        } else {
-            sessionModel = new HttpSessionHashModel(getPageContextServlet(), request, response, objectWrapperForModel);
-        }
-
-        return sessionModel;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java
deleted file mode 100644
index 7969b56..0000000
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.freemarker.spring.web.view;
-
-import javax.servlet.GenericServlet;
-import javax.servlet.ServletException;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
-import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
-import org.apache.freemarker.servlet.ServletContextHashModel;
-import org.apache.freemarker.servlet.jsp.TaglibFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.web.servlet.view.AbstractTemplateViewResolver;
-import org.springframework.web.servlet.view.AbstractUrlBasedView;
-import org.springframework.web.servlet.view.UrlBasedViewResolver;
-
-/**
- * FreeMarker template view resolver implementation, extending {@link AbstractTemplateViewResolver} that extends
- * {@link UrlBasedViewResolver}.
- * <p>
- * The FreeMarker {@link Configuration} property must be set at least. Otherwise this throws {@link IllegalStateException}
- * during initialization. In the bean initialization phase, this retrieves {@link ObjectWrapperAndUnwrapper} from
- * the {@link Configuration} and instantiate the internal page object ({@link PageContextServlet}) for JSP tag
- * library usages, {@link ServletContextHashModel} property for servlet context attribute accesses and {@link TaglibFactory}
- * property for JSP tag library usages.
- * </p>
- */
-public class FreemarkerViewResolver extends AbstractTemplateViewResolver implements InitializingBean {
-
-    /**
-     * FreeMarker {@link Configuration} instance.
-     */
-    private Configuration configuration;
-
-    /**
-     * {@link ObjectWrapperAndUnwrapper} instance to be used in model building.
-     */
-    private ObjectWrapperAndUnwrapper objectWrapper;
-
-    /**
-     * Internal servlet instance to provide a page object in JSP tag library usages.
-     * @see {@link javax.servlet.jsp.PageContext#getPage()}
-     */
-    private GenericServlet pageContextServlet;
-
-    /**
-     * {@link ServletContextHashModel} instance for templates to access servlet context attributes.
-     */
-    private ServletContextHashModel servletContextModel;
-
-    /**
-     * {@link TaglibFactory} instance for templates to be able to use JSP tag libraries.
-     */
-    private TaglibFactory taglibFactory;
-
-    /**
-     * Constructs view resolver.
-     */
-    public FreemarkerViewResolver() {
-        super();
-        setViewClass(FreemarkerView.class);
-    }
-
-    /**
-     * Get FreeMarker {@link Configuration} instance.
-     * @return FreeMarker {@link Configuration} instance
-     */
-    public Configuration getConfiguration() {
-        return configuration;
-    }
-
-    /**
-     * Set FreeMarker {@link Configuration} instance.
-     * @param configuration FreeMarker {@link Configuration} instance
-     */
-    public void setConfiguration(Configuration configuration) {
-        this.configuration = configuration;
-    }
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        if (configuration == null) {
-            throw new IllegalStateException("Configuration is not set.");
-        }
-
-        if (objectWrapper == null) {
-            if (configuration.isObjectWrapperSet()) {
-                if (!(configuration.getObjectWrapper() instanceof ObjectWrapperAndUnwrapper)) {
-                    throw new RuntimeException(
-                            FreemarkerViewResolver.class.getSimpleName() + " requires an ObjectWrapper that "
-                                    + "implements " + ObjectWrapperAndUnwrapper.class.getName()
-                                    + ", but the Configuration's ObjectWrapper doesn't do that: "
-                                    + configuration.getObjectWrapper().getClass().getName());
-                }
-
-                objectWrapper = (ObjectWrapperAndUnwrapper) configuration.getObjectWrapper();
-            } else {
-                objectWrapper = new DefaultObjectWrapper.Builder(configuration.getIncompatibleImprovements()).build();
-            }
-        }
-
-        pageContextServlet = new PageContextServlet();
-
-        try {
-            pageContextServlet
-                    .init(new PageContextServletConfig(getServletContext(), PageContextServlet.class.getSimpleName()));
-        } catch (ServletException e) {
-            // never happens...
-        }
-
-        servletContextModel = new ServletContextHashModel(pageContextServlet, objectWrapper);
-
-        taglibFactory = new TaglibFactory.Builder(getServletContext(), objectWrapper).build();
-    }
-
-    @Override
-    protected Class<?> requiredViewClass() {
-        return FreemarkerView.class;
-    }
-
-    @Override
-    protected AbstractUrlBasedView buildView(String viewName) throws Exception {
-        FreemarkerView view = (FreemarkerView) super.buildView(viewName);
-        view.setConfiguration(configuration);
-        view.setObjectWrapper(objectWrapper);
-        view.setPageContextServlet(pageContextServlet);
-        view.setServletContextModel(servletContextModel);
-        view.setTaglibFactory(taglibFactory);
-        return view;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/test/java/org/apache/freemarker/spring/SpringResourceTemplateLoaderTest.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/SpringResourceTemplateLoaderTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/SpringResourceTemplateLoaderTest.java
new file mode 100644
index 0000000..4fc59ee
--- /dev/null
+++ b/freemarker-spring/src/test/java/org/apache/freemarker/spring/SpringResourceTemplateLoaderTest.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.freemarker.spring;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
+import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.TemplateNotFoundException;
+import org.apache.freemarker.spring.SpringResourceTemplateLoader;
+import org.apache.freemarker.test.TestConfigurationBuilder;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.context.support.GenericApplicationContext;
+
+public class SpringResourceTemplateLoaderTest {
+
+    private static final String TEMPLATE_BASE_PATH = "classpath:META-INF/templates/";
+
+    private GenericApplicationContext appContext;
+    private SpringResourceTemplateLoader templateLoader;
+    private Configuration cfg;
+
+    @Before
+    public void setUp() throws IOException {
+        appContext = new GenericApplicationContext();
+        templateLoader = new SpringResourceTemplateLoader();
+        templateLoader.setBaseLocation(TEMPLATE_BASE_PATH);
+        templateLoader.setResourceLoader(appContext);
+        cfg = new TestConfigurationBuilder().templateLoader(templateLoader).build();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        if (appContext.isActive()) {
+            appContext.stop();
+            appContext.destroy();
+            appContext.close();
+        }
+    }
+
+    @Test
+    public void testSuccessful() throws Exception {
+        for (int i = 0; i < 2; i++) {
+            assertEquals("foo", cfg.getTemplate("sub1/sub2/t.ftl").toString());
+        }
+    }
+
+    @Test
+    public void testNotFound() throws Exception {
+        for (int i = 0; i < 2; i++) {
+            try {
+                cfg.getTemplate("sub1X/sub2/t.ftl");
+                fail();
+            } catch (TemplateNotFoundException e) {
+                assertThat(e.getMessage(), containsString("sub1X"));
+                assertNull(e.getCause());
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java
deleted file mode 100644
index 30c7ed7..0000000
--- a/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.freemarker.spring.templateresolver;
-
-import static org.hamcrest.Matchers.containsString;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.TemplateNotFoundException;
-import org.apache.freemarker.spring.SpringResourceTemplateLoader;
-import org.apache.freemarker.test.TestConfigurationBuilder;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.context.support.GenericApplicationContext;
-
-public class SpringResourceTemplateLoaderTest {
-
-    private static final String TEMPLATE_BASE_PATH = "classpath:META-INF/templates/";
-
-    private GenericApplicationContext appContext;
-    private SpringResourceTemplateLoader templateLoader;
-    private Configuration cfg;
-
-    @Before
-    public void setUp() throws IOException {
-        appContext = new GenericApplicationContext();
-        templateLoader = new SpringResourceTemplateLoader();
-        templateLoader.setBaseLocation(TEMPLATE_BASE_PATH);
-        templateLoader.setResourceLoader(appContext);
-        cfg = new TestConfigurationBuilder().templateLoader(templateLoader).build();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        if (appContext.isActive()) {
-            appContext.stop();
-            appContext.destroy();
-            appContext.close();
-        }
-    }
-
-    @Test
-    public void testSuccessful() throws Exception {
-        for (int i = 0; i < 2; i++) {
-            assertEquals("foo", cfg.getTemplate("sub1/sub2/t.ftl").toString());
-        }
-    }
-
-    @Test
-    public void testNotFound() throws Exception {
-        for (int i = 0; i < 2; i++) {
-            try {
-                cfg.getTemplate("sub1X/sub2/t.ftl");
-                fail();
-            } catch (TemplateNotFoundException e) {
-                assertThat(e.getMessage(), containsString("sub1X"));
-                assertNull(e.getCause());
-            }
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolverTest.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolverTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolverTest.java
new file mode 100644
index 0000000..e75155e
--- /dev/null
+++ b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreeMarkerViewResolverTest.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.freemarker.spring.web.view;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.mock.web.MockServletContext;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.GenericWebApplicationContext;
+
+public class FreeMarkerViewResolverTest {
+
+    private ServletContext servletContext;
+    private GenericWebApplicationContext applicationContext;
+
+    private StringTemplateLoader templateLoader;
+    private Configuration configuration;
+
+    private FreeMarkerViewResolver viewResolver;
+
+    private String prefix = "/WEB-INF/freemarker/";
+    private String normalizedPrefix = "WEB-INF/freemarker/";
+    private String suffix = ".ftl";
+
+    @Before
+    public void setUp() throws Exception {
+        servletContext = new MockServletContext();
+
+        applicationContext = new GenericWebApplicationContext(servletContext);
+        applicationContext.refresh();
+        servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
+
+        templateLoader = new StringTemplateLoader();
+        templateLoader.putTemplate(normalizedPrefix + "hello" + suffix, "Hello, World!");
+
+        configuration = new Configuration.Builder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS)
+                .templateLoader(templateLoader).build();
+
+        viewResolver = new FreeMarkerViewResolver();
+        viewResolver.setServletContext(servletContext);
+        viewResolver.setApplicationContext(applicationContext);
+        viewResolver.setConfiguration(configuration);
+        viewResolver.setPrefix(prefix);
+        viewResolver.setSuffix(suffix);
+        viewResolver.afterPropertiesSet();
+    }
+
+    @Test
+    public void testViewResolver() throws Exception {
+        MockHttpServletRequest request = new MockHttpServletRequest("GET", "/mytest.do");
+        request.setContextPath("/mycontext");
+        request.setServletPath("/myservlet");
+
+        MockHttpServletResponse response = new MockHttpServletResponse();
+
+        FreeMarkerView view = resolveFreemarkerView("hello", null);//Locale.ENGLISH);
+        Map<String, Object> model = new HashMap<String, Object>();
+        view.render(model, request, response);
+
+        assertEquals("Hello, World!", response.getContentAsString());
+    }
+
+    private FreeMarkerView resolveFreemarkerView(final String name, final Locale locale) throws Exception {
+        FreeMarkerView view = (FreeMarkerView) viewResolver.resolveViewName(name, locale);
+        view.setServletContext(servletContext);
+        view.setApplicationContext(applicationContext);
+        return view;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreeMarkerViewTest.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreeMarkerViewTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreeMarkerViewTest.java
new file mode 100644
index 0000000..078bfa0
--- /dev/null
+++ b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreeMarkerViewTest.java
@@ -0,0 +1,176 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.freemarker.spring.web.view;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletContext;
+
+import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
+import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
+import org.apache.freemarker.servlet.ServletContextHashModel;
+import org.apache.freemarker.servlet.jsp.TaglibFactory;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.mock.web.MockHttpSession;
+import org.springframework.mock.web.MockServletContext;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.GenericWebApplicationContext;
+
+public class FreeMarkerViewTest {
+
+    private ServletContext servletContext;
+    private GenericWebApplicationContext applicationContext;
+
+    private StringTemplateLoader templateLoader;
+    private Configuration configuration;
+    private ObjectWrapperAndUnwrapper objectWrapper;
+
+    private GenericServlet pageContextServlet;
+    private TaglibFactory taglibFactory;
+
+    private FreeMarkerViewResolver viewResolver;
+
+    private AtomicLong visitorCount;
+
+    @Before
+    public void setUp() throws Exception {
+        servletContext = new MockServletContext();
+
+        applicationContext = new GenericWebApplicationContext(servletContext);
+        applicationContext.refresh();
+        servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
+
+        templateLoader = new StringTemplateLoader();
+        configuration = new Configuration.Builder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS)
+                .templateLoader(templateLoader).build();
+        objectWrapper = (ObjectWrapperAndUnwrapper) configuration.getObjectWrapper();
+
+        pageContextServlet = new PageContextServlet();
+        pageContextServlet.init(new PageContextServletConfig(servletContext, PageContextServlet.class.getSimpleName()));
+        taglibFactory = new TaglibFactory.Builder(servletContext, objectWrapper).build();
+
+        viewResolver = new FreeMarkerViewResolver();
+        viewResolver.setServletContext(servletContext);
+        viewResolver.setApplicationContext(applicationContext);
+        viewResolver.setConfiguration(configuration);
+        viewResolver.afterPropertiesSet();
+
+        visitorCount = new AtomicLong();
+        servletContext.setAttribute("visitorCount", visitorCount);
+    }
+
+    @Test
+    public void testViewWithBasicModel() throws Exception {
+        MockHttpServletRequest request = new MockHttpServletRequest("GET", "/mytest.do");
+        request.setContextPath("/mycontext");
+        request.setServletPath("/myservlet");
+
+        templateLoader.putTemplate("hello.ftl", "Hello, ${name!\"World\"}! Visit count: ${visitCount!0}");
+
+        FreeMarkerView view = createFreemarkerView("hello.ftl");
+
+        int visitCount = 0;
+        Map<String, Object> model = new HashMap<String, Object>();
+
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        view.render(model, request, response);
+        assertEquals("Hello, World! Visit count: 0", response.getContentAsString());
+
+        response = new MockHttpServletResponse();
+        model.put("name", "Dan");
+        model.put("visitCount", ++visitCount);
+        view.render(model, request, response);
+        assertEquals("Hello, Dan! Visit count: 1", response.getContentAsString());
+    }
+
+    @Test
+    public void testViewWithDefaultServletModel() throws Exception {
+        MockHttpSession session = new MockHttpSession(servletContext);
+        session.setAttribute("itemCountInCart", 3);
+
+        MockHttpServletRequest request = new MockHttpServletRequest("GET", "/mytest.do");
+        request.setContextPath("/mycontext");
+        request.setServletPath("/myservlet");
+        request.setPathInfo(";mypathinfo");
+        request.addParameter("token1", "value1");
+        request.setSession(session);
+        request.setAttribute("promotion", "Fresh blue berries");
+
+        templateLoader.putTemplate("default-model.ftl",
+                "${name!}, you have ${Session.itemCountInCart!0} items in cart. " + "Hot deal: ${Request.promotion}. "
+                        + "BTW, you're ${Application.visitorCount}th visitor. "
+                        + "(token1: ${RequestParameters['token1']!})");
+
+        FreeMarkerView view = createFreemarkerView("default-model.ftl");
+
+        Map<String, Object> model = new HashMap<String, Object>();
+        model.put("name", "Dan");
+
+        final long count = visitorCount.incrementAndGet();
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        view.render(model, request, response);
+        assertEquals("Dan, you have 3 items in cart. Hot deal: Fresh blue berries. BTW, you're " + count
+                + "th visitor. (token1: value1)", response.getContentAsString());
+    }
+
+    @Test
+    public void testViewWithTaglibs() throws Exception {
+        MockHttpServletRequest request = new MockHttpServletRequest("GET", "/mytest.do");
+        request.setContextPath("/mycontext");
+        request.setServletPath("/myservlet");
+
+        templateLoader.putTemplate("taglibs.ftl",
+                "<#assign e=JspTaglibs ['http://freemarker.org/jsp/example/echo'] >"
+                + "<#assign msg=\"Hello!\" />"
+                + "<@e.echo message=msg />");
+
+        FreeMarkerView view = createFreemarkerView("taglibs.ftl");
+
+        Map<String, Object> model = new HashMap<String, Object>();
+        MockHttpServletResponse response = new MockHttpServletResponse();
+        view.render(model, request, response);
+        assertEquals("Hello!", response.getContentAsString());
+    }
+
+    private FreeMarkerView createFreemarkerView(final String name) throws Exception {
+        FreeMarkerView view = new FreeMarkerView();
+
+        view.setServletContext(servletContext);
+        view.setApplicationContext(applicationContext);
+        view.setConfiguration(configuration);
+        view.setObjectWrapper(objectWrapper);
+
+        view.setPageContextServlet(pageContextServlet);
+        view.setServletContextModel(new ServletContextHashModel(pageContextServlet, objectWrapper));
+        view.setTaglibFactory(taglibFactory);
+
+        view.setUrl(name);
+
+        return view;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolverTest.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolverTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolverTest.java
deleted file mode 100644
index 7baf7f2..0000000
--- a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolverTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.freemarker.spring.web.view;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockServletContext;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.GenericWebApplicationContext;
-
-public class FreemarkerViewResolverTest {
-
-    private ServletContext servletContext;
-    private GenericWebApplicationContext applicationContext;
-
-    private StringTemplateLoader templateLoader;
-    private Configuration configuration;
-
-    private FreemarkerViewResolver viewResolver;
-
-    private String prefix = "/WEB-INF/freemarker/";
-    private String normalizedPrefix = "WEB-INF/freemarker/";
-    private String suffix = ".ftl";
-
-    @Before
-    public void setUp() throws Exception {
-        servletContext = new MockServletContext();
-
-        applicationContext = new GenericWebApplicationContext(servletContext);
-        applicationContext.refresh();
-        servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
-
-        templateLoader = new StringTemplateLoader();
-        templateLoader.putTemplate(normalizedPrefix + "hello" + suffix, "Hello, World!");
-
-        configuration = new Configuration.Builder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS)
-                .templateLoader(templateLoader).build();
-
-        viewResolver = new FreemarkerViewResolver();
-        viewResolver.setServletContext(servletContext);
-        viewResolver.setApplicationContext(applicationContext);
-        viewResolver.setConfiguration(configuration);
-        viewResolver.setPrefix(prefix);
-        viewResolver.setSuffix(suffix);
-        viewResolver.afterPropertiesSet();
-    }
-
-    @Test
-    public void testViewResolver() throws Exception {
-        MockHttpServletRequest request = new MockHttpServletRequest("GET", "/mytest.do");
-        request.setContextPath("/mycontext");
-        request.setServletPath("/myservlet");
-
-        MockHttpServletResponse response = new MockHttpServletResponse();
-
-        FreemarkerView view = resolveFreemarkerView("hello", null);//Locale.ENGLISH);
-        Map<String, Object> model = new HashMap<String, Object>();
-        view.render(model, request, response);
-
-        assertEquals("Hello, World!", response.getContentAsString());
-    }
-
-    private FreemarkerView resolveFreemarkerView(final String name, final Locale locale) throws Exception {
-        FreemarkerView view = (FreemarkerView) viewResolver.resolveViewName(name, locale);
-        view.setServletContext(servletContext);
-        view.setApplicationContext(applicationContext);
-        return view;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5b856d3a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
deleted file mode 100644
index 1ed2831..0000000
--- a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.freemarker.spring.web.view;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicLong;
-
-import javax.servlet.GenericServlet;
-import javax.servlet.ServletContext;
-
-import org.apache.freemarker.core.Configuration;
-import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
-import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader;
-import org.apache.freemarker.servlet.ServletContextHashModel;
-import org.apache.freemarker.servlet.jsp.TaglibFactory;
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockHttpSession;
-import org.springframework.mock.web.MockServletContext;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.GenericWebApplicationContext;
-
-public class FreemarkerViewTest {
-
-    private ServletContext servletContext;
-    private GenericWebApplicationContext applicationContext;
-
-    private StringTemplateLoader templateLoader;
-    private Configuration configuration;
-    private ObjectWrapperAndUnwrapper objectWrapper;
-
-    private GenericServlet pageContextServlet;
-    private TaglibFactory taglibFactory;
-
-    private FreemarkerViewResolver viewResolver;
-
-    private AtomicLong visitorCount;
-
-    @Before
-    public void setUp() throws Exception {
-        servletContext = new MockServletContext();
-
-        applicationContext = new GenericWebApplicationContext(servletContext);
-        applicationContext.refresh();
-        servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
-
-        templateLoader = new StringTemplateLoader();
-        configuration = new Configuration.Builder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS)
-                .templateLoader(templateLoader).build();
-        objectWrapper = (ObjectWrapperAndUnwrapper) configuration.getObjectWrapper();
-
-        pageContextServlet = new PageContextServlet();
-        pageContextServlet.init(new PageContextServletConfig(servletContext, PageContextServlet.class.getSimpleName()));
-        taglibFactory = new TaglibFactory.Builder(servletContext, objectWrapper).build();
-
-        viewResolver = new FreemarkerViewResolver();
-        viewResolver.setServletContext(servletContext);
-        viewResolver.setApplicationContext(applicationContext);
-        viewResolver.setConfiguration(configuration);
-        viewResolver.afterPropertiesSet();
-
-        visitorCount = new AtomicLong();
-        servletContext.setAttribute("visitorCount", visitorCount);
-    }
-
-    @Test
-    public void testViewWithBasicModel() throws Exception {
-        MockHttpServletRequest request = new MockHttpServletRequest("GET", "/mytest.do");
-        request.setContextPath("/mycontext");
-        request.setServletPath("/myservlet");
-
-        templateLoader.putTemplate("hello.ftl", "Hello, ${name!\"World\"}! Visit count: ${visitCount!0}");
-
-        FreemarkerView view = createFreemarkerView("hello.ftl");
-
-        int visitCount = 0;
-        Map<String, Object> model = new HashMap<String, Object>();
-
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        view.render(model, request, response);
-        assertEquals("Hello, World! Visit count: 0", response.getContentAsString());
-
-        response = new MockHttpServletResponse();
-        model.put("name", "Dan");
-        model.put("visitCount", ++visitCount);
-        view.render(model, request, response);
-        assertEquals("Hello, Dan! Visit count: 1", response.getContentAsString());
-    }
-
-    @Test
-    public void testViewWithDefaultServletModel() throws Exception {
-        MockHttpSession session = new MockHttpSession(servletContext);
-        session.setAttribute("itemCountInCart", 3);
-
-        MockHttpServletRequest request = new MockHttpServletRequest("GET", "/mytest.do");
-        request.setContextPath("/mycontext");
-        request.setServletPath("/myservlet");
-        request.setPathInfo(";mypathinfo");
-        request.addParameter("token1", "value1");
-        request.setSession(session);
-        request.setAttribute("promotion", "Fresh blue berries");
-
-        templateLoader.putTemplate("default-model.ftl",
-                "${name!}, you have ${Session.itemCountInCart!0} items in cart. " + "Hot deal: ${Request.promotion}. "
-                        + "BTW, you're ${Application.visitorCount}th visitor. "
-                        + "(token1: ${RequestParameters['token1']!})");
-
-        FreemarkerView view = createFreemarkerView("default-model.ftl");
-
-        Map<String, Object> model = new HashMap<String, Object>();
-        model.put("name", "Dan");
-
-        final long count = visitorCount.incrementAndGet();
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        view.render(model, request, response);
-        assertEquals("Dan, you have 3 items in cart. Hot deal: Fresh blue berries. BTW, you're " + count
-                + "th visitor. (token1: value1)", response.getContentAsString());
-    }
-
-    @Test
-    public void testViewWithTaglibs() throws Exception {
-        MockHttpServletRequest request = new MockHttpServletRequest("GET", "/mytest.do");
-        request.setContextPath("/mycontext");
-        request.setServletPath("/myservlet");
-
-        templateLoader.putTemplate("taglibs.ftl",
-                "<#assign e=JspTaglibs ['http://freemarker.org/jsp/example/echo'] >"
-                + "<#assign msg=\"Hello!\" />"
-                + "<@e.echo message=msg />");
-
-        FreemarkerView view = createFreemarkerView("taglibs.ftl");
-
-        Map<String, Object> model = new HashMap<String, Object>();
-        MockHttpServletResponse response = new MockHttpServletResponse();
-        view.render(model, request, response);
-        assertEquals("Hello!", response.getContentAsString());
-    }
-
-    private FreemarkerView createFreemarkerView(final String name) throws Exception {
-        FreemarkerView view = new FreemarkerView();
-
-        view.setServletContext(servletContext);
-        view.setApplicationContext(applicationContext);
-        view.setConfiguration(configuration);
-        view.setObjectWrapper(objectWrapper);
-
-        view.setPageContextServlet(pageContextServlet);
-        view.setServletContextModel(new ServletContextHashModel(pageContextServlet, objectWrapper));
-        view.setTaglibFactory(taglibFactory);
-
-        view.setUrl(name);
-
-        return view;
-    }
-}