2017-07-30 64 views
0

我想在Google App Engine上使用Jersey创建一个RESTFul Web服务。我正在尝试添加Guice进行依赖注入。不能实例化侦听器guiceListner,ClassNotFoundException

我已addeded在web.xml

<listener> 
     <listener-class>com.archit.guice.GuiceListener</listener-class> 
    </listener>  

    <filter> 
     <filter-name>guiceFilter</filter-name> 
     <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>guiceFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

下面我还定义在包com.archit.guice类GuiceListener。

在类GuiceListener的代码是:

public class GuiceListener extends GuiceServletContextListener { 

    private ServletContext servletContext = null; 

    @Override 
    public void contextInitialized(ServletContextEvent servletContextEvent) { 
     servletContext = servletContextEvent.getServletContext(); 

     super.contextInitialized(servletContextEvent); 
    } 


    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(new GuiceServletModule(), 
       new MainShiroWebModule(servletContext), ShiroWebModule.guiceFilterModule()); 
    } 
} 

当我部署应用的AppEngine和调用任何REST API,我得到404错误和AppEngine上提供的错误日志:

Could not instantiate listener com.archit.guice.GuiceListener 
java.lang.ClassNotFoundException: com.archit.guice.GuiceListener 
    at com.google.appengine.runtime.Request.process-08b248c3657c5fb3(Request.java) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:375) 
    at org.mortbay.jetty.handler.ContextHandler.loadClass(ContextHandler.java:1101) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initListener(WebXmlConfiguration.java:630) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initWebXmlElement(WebXmlConfiguration.java:368) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.initialize(WebXmlConfiguration.java:289) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.configure(WebXmlConfiguration.java:222) 
    at org.mortbay.jetty.webapp.WebXmlConfiguration.configureWebApp(WebXmlConfiguration.java:180) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1247) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:453) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:460) 
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:293) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:319) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:311) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:457) 
    at java.lang.Thread.run(Thread.java:745) 

即使我定义了类,ClassNotFoundException的原因可能是什么。 我已尝试使用干净版本

mvn clean package 

回答

0

好吧,这是一个非常愚蠢的错误。 GuiceListener类没有什么问题,但是在我的包中的其他类中,包名称不正确,因为maven实际上并没有建立.class文件(尽管它在构建时没有提供任何错误)。在更正其他类中的包名后,它工作正常。