【发布时间】:2017-07-30 15:27:29
【问题描述】:
我正在尝试在 Google App Engine 上使用 Jersey 创建一个 RESTFul 网络服务。我正在尝试为依赖注入添加 Guice。
我在 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
【问题讨论】:
标签: java google-app-engine jersey guice