上下文com.google.appengine.tools.development.DevAppEngineWebAppContext启动失败

时间:2015-02-25 10:48:15

标签: spring google-app-engine spring-mvc servlet-filters

我正在使用Spring MVC,谷歌应用引擎,管理员sdk,云sql。 我想访问(preferncesDao)dao类进入Filter。 下面是我的过滤器

public class NameSpaceGoogleSecurityFilter implements Filter
{
    @Autowired
    IPreferencesDao preferncesDao;

    public void init( FilterConfig filterConfig ) throws ServletException{
          SpringUtils.init(filterConfig.getServletContext());
          preferncesDao = SpringUtils.getPreferncesDao();
   }
}

下面是我的SpringUtils类。

public class SpringUtils {

   private static ApplicationContext appContext;

   private static IPreferencesDao preferncesDao = null;

   public static void init(final ServletConfig config) {
       init(config.getServletContext());
   }
   public static void init(final ServletContext context) {
      if(appContext==null){
        appContext =
            (ApplicationContext) context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
      }
   }

   public static IPreferencesDao getPreferncesDao() {
      if(preferncesDao==null){
        preferncesDao=(IPreferencesDao) appContext.getBean("preferncesDao");
      }
     return preferncesDao;
   }

   protected SpringUtils() {
        throw new UnsupportedOperationException();
   }
}

当我开始构建过程时,它抛出异常

Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext
  java.lang.NullPointerException.  
  Nullpointer at line  preferncesDao=(IPreferencesDao) appContext.getBean("preferncesDao");

我如何解决上述错误?将dao对象放入过滤器是正确的方法吗?如果不是正确的方法。?

2 个答案:

答案 0 :(得分:2)

需要在web.xml中添加以下标记

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

答案 1 :(得分:1)

这纯粹表示ContextLoaderListener缺失。

所以在web.xml中添加以下代码

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>applicationContext.xml</param-value>
</context-param>

  <listener>
    <listener-class>
          org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>

有关详细信息,请参阅this link