2 Replies Latest reply on Sep 20, 2012 10:31 AM by ndoshi

    Migrating from AS4 to AS7 - Problem loading view templates

    ndoshi

      I am migrating my spring mvc web app from AS4 to AS7.

      The application is having a hard time finding my view templates (we are using velocity templates for our view).

      This currently works fine in AS4 as is.

       

      The project structure is as follows:

      /

      /src

         /com

          (etc...)

      /WebContent

        /WEB-INF

          /velocity

           /login

            /login.vm

       

      Here is an excerpt from my spring config file:

       

        <bean id="viewResolver"

          class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">

          <property name="prefix" value="/WEB-INF/velocity/" />

          <property name="suffix" value=".vm" />

          <property name="dateToolAttribute">

            <value>datetool</value>

          </property>

          <property name="exposeSpringMacroHelpers">

            <value>true</value>

          </property>

          <property name="toolboxConfigLocation"

            value="/WEB-INF/toolbox.xml" />

          <property name="layoutUrl">

            <value>/WEB-INF/velocity/layout/customer_portal_layout.vm</value>

          </property>

        </bean>

       

       

      Stack Trace:

      org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource '/WEB-INF/velocity/login/login.vm'

                org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:483)

                org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:354)

                org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1400)

                org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1380)

                org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:401)

                org.springframework.web.servlet.view.velocity.VelocityView.getTemplate(VelocityView.java:535)

                org.springframework.web.servlet.view.velocity.VelocityView.getTemplate(VelocityView.java:520)

                org.springframework.web.servlet.view.velocity.VelocityView.checkTemplate(VelocityView.java:293)

                org.springframework.web.servlet.view.velocity.VelocityLayoutView.checkTemplate(VelocityLayoutView.java:122)

                org.springframework.web.servlet.view.velocity.VelocityView.initApplicationContext(VelocityView.java:258)

                org.springframework.context.support.ApplicationObjectSupport.initApplicationContext(ApplicationObjectSupport.java:119)

                org.springframework.web.context.support.WebApplicationObjectSupport.initApplicationContext(WebApplicationObjectSupport.java:69)

                org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:73)

                org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:70)

                org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:350)

                org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1331)

                org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:341)

                org.springframework.web.servlet.view.UrlBasedViewResolver.loadView(UrlBasedViewResolver.java:413)

                org.springframework.web.servlet.view.AbstractCachingViewResolver.createView(AbstractCachingViewResolver.java:159)

                org.springframework.web.servlet.view.UrlBasedViewResolver.createView(UrlBasedViewResolver.java:378)

                org.springframework.web.servlet.view.AbstractCachingViewResolver.resolveViewName(AbstractCachingViewResolver.java:78)

                org.springframework.web.servlet.DispatcherServlet.resolveViewName(DispatcherServlet.java:1215)

                org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1164)

                org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)

                org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)

                org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)

                org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)

                javax.servlet.http.HttpServlet.service(HttpServlet.java:734)

                javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

       

       

       

      I tried a few different options for the "prefix" property

      • /WEB-INF/velocity/
      • WEB-INF/velocity/
      • customerportal.war/WEB-INF/velocity/
      • com.odc.customerportal/WEB-INF/velocity/

       

       

       

      I am able to reorganize the location of the files in the built war file if necessary.

        • 1. Re: Migrating from AS4 to AS7 - Problem loading view templates
          ctomc

          Can you upgrade spring to latest version (backward compatibilty is well taken care of)

          and upgrade velocity to some more recent version.

           

          if it still wont work we should check velocity code how it handled loading of resources.

           

           

          --

          tomaz

          • 2. Re: Migrating from AS4 to AS7 - Problem loading view templates
            ndoshi

            It turns out the problem was that in JBoss4 I was easily able to access anything under WEB-INF from the classloader.

            In JBoss7 I need to move the velocity folder from WEB-INF to WEB-INF/classes.

            I also had to update all the spring configuration and references to those files.

             

             

            Spring configuration file:

            <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">

            <property name="resourceLoaderPath" value="/WEB-INF/classes/velocity" />

            <property name="configLocation" value="/WEB-INF/classes/velocity/velocity.properties"/>

            </bean>

             

             

            <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">

            <property name="prefix" value="" />

            <property name="suffix" value=".vm" />

            ...

            ...

            ...

            </bean>

             

             

            Velocity template files:

            Before:

            #set( $layout = "WEB-INF/velocity/layout/blank_layout.vm" )

             

            After:

            #set( $layout = "velocity/layout/blank_layout.vm" )

             

             

            Velocity.properties file:

            Before:

            velocimacro.library = vm_global_library.vm

             

            After:

            velocimacro.library = velocity/vm_global_library.vm