<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: velocity code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Mon, 13 Oct 2008 02:57:28 GMT</pubDate>
    <description>DZone Snippets: velocity code</description>
    <item>
      <title>WebAppResourceLoader</title>
      <link>http://snippets.dzone.com/posts/show/186</link>
      <description>The following code is for loading Velocity resources (i.e. Velocity files) from a web application's ServletContext.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;&lt;br /&gt;import javax.servlet.ServletContext;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.collections.ExtendedProperties;&lt;br /&gt;import org.apache.velocity.exception.ResourceNotFoundException;&lt;br /&gt;import org.apache.velocity.runtime.resource.Resource;&lt;br /&gt;import org.apache.velocity.runtime.resource.loader.ResourceLoader;&lt;br /&gt;&lt;br /&gt;public class WebAppResourceLoader extends ResourceLoader {&lt;br /&gt;&lt;br /&gt;    private static ServletContext context = null;&lt;br /&gt;&lt;br /&gt;    public void init(ExtendedProperties extendedProperties) {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private static ServletContext getServletContext() {&lt;br /&gt;        return context;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void setServletContext(ServletContext context) {&lt;br /&gt;        WebAppResourceLoader.context = context;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#getResourceStream(java.lang.String)&lt;br /&gt;     */&lt;br /&gt;    public InputStream getResourceStream(String name)&lt;br /&gt;            throws ResourceNotFoundException {&lt;br /&gt;        InputStream result = null;&lt;br /&gt;&lt;br /&gt;        if (name == null || name.length() == 0) {&lt;br /&gt;            throw new ResourceNotFoundException("No template name provided");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            if (!name.startsWith("/"))&lt;br /&gt;                name = "/" + name;&lt;br /&gt;&lt;br /&gt;            result = getServletContext().getResourceAsStream(name);&lt;br /&gt;        } catch (NullPointerException npe) {&lt;br /&gt;            throw new ResourceNotFoundException("ServletContext not found");&lt;br /&gt;        } catch (Exception fnfe) {&lt;br /&gt;            throw new ResourceNotFoundException(fnfe.getMessage());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public boolean isSourceModified(Resource arg0) {&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public long getLastModified(Resource arg0) {&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then to initialize Velocity:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    WebAppResourceLoader.setServletContext(servletContext);&lt;br /&gt;    Properties props = new Properties();&lt;br /&gt;    props.setProperty("resource.loader", "webapp");&lt;br /&gt;    props.setProperty("webapp.resource.loader.description", &lt;br /&gt;        "Load from the ServletContext");&lt;br /&gt;    props.setProperty("webapp.resource.loader.class",&lt;br /&gt;        "package.WebAppResourceLoader");&lt;br /&gt;    Velocity.init(props);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;From then on out you can use #parse directives such as:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#parse("/WEB-INF/something.vm")&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 17 Apr 2005 07:41:59 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/186</guid>
      <author>aeden (Anthony Eden)</author>
    </item>
  </channel>
</rss>
