【问题标题】:Problem with configuring servletModule with Guice injecting GWT RequestFactory使用 Guice 注入 GWT RequestFactory 配置 servletModule 的问题
【发布时间】:2011-09-02 23:34:08
【问题描述】:

我想通过 GWT 2.3 RequestFactory 在服务器端使用 GUICE。 我有我的类扩展了 ServletModule:

@Override
public void configureServlets() {
  // RequestFactory servlet
  bind(RequestFactoryServlet.class).in(Singleton.class);
  serve("/gwtRequest").with(RequestFactoryServlet.class);
}

在 web.xml 中我添加了:

<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>

并且我引用了 validation-api.XXX.jar(因为它是 GWT 的一部分)

当我运行它时(在带有 GWT 插件的 Eclipse 下),它说:

jetty-6.1.x [警告] guiceFilter 失败:com.google.inject.ProvisionException:Guice 配置错误:

1) 注入构造函数时出错,java.lang.NoClassDefFoundError: javax/validation/ValidationException 在 com.google.web.bindery.requestfactory.server.RequestFactoryServlet.(RequestFactoryServlet.java:74) 在 com.djay.eyeandtrack.server.EatServletModule.configureServlets(EatServletModule.java:13) 在定位 com.google.web.binery.requestfactory.server.RequestFactoryServlet

1 个错误 [警告] 上下文 com.google.apphosting.utils.jetty.DevAppEngineWebAppContext@17b3de2{/,C:\5_DJAY\03_EYEANDTRACK\branches\djaysbox\EyeAndTrack\war} 启动失败 com.google.inject.ProvisionException:Guice 配置错误:

1) 注入构造函数时出错,java.lang.NoClassDefFoundError: javax/validation/ValidationException 在 com.google.web.bindery.requestfactory.server.RequestFactoryServlet.(RequestFactoryServlet.java:74) 在 com.djay.eyeandtrack.server.EatServletModule.configureServlets(EatServletModule.java:13) 在定位 com.google.web.binery.requestfactory.server.RequestFactoryServlet

1 个错误 在 com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987) 在 com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009) 在 com.google.inject.servlet.ServletDefinition.init(ServletDefinition.java:108) 在 com.google.inject.servlet.ManagedServletPipeline.init(ManagedServletPipeline.java:82) 在 com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:102) 在 com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172) 在 org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662) 在 org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 在 org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) 在 org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 在 org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 在 org.mortbay.jetty.Server.doStart(Server.java:224) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 在 com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:186) 在 com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:157) 在 com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:169) 在 com.google.appengine.tools.development.gwt.AppEngineLauncher.start(AppEngineLauncher.java:119) 在 com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:500) 在 com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1055) 在 com.google.gwt.dev.DevModeBase.run(DevModeBase.java:804) 在 com.google.gwt.dev.DevMode.main(DevMode.java:309) 引起:java.lang.NoClassDefFoundError: javax/validation/ValidationException 在 com.google.web.bindery.requestfactory.server.ServiceLayer.create(ServiceLayer.java:74) 在 com.google.web.bindery.requestfactory.server.RequestFactoryServlet.(RequestFactoryServlet.java:88) 在 com.google.web.bindery.requestfactory.server.RequestFactoryServlet.(RequestFactoryServlet.java:74) 在 com.google.web.bindery.requestfactory.server.RequestFactoryServlet$$FastClassByGuice$$54253391.newInstance() 在 com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40) 在 com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:60) 在 com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85) 在 com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) 在 com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) 在 com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) 在 com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) 在 com.google.inject.Scopes$1$1.get(Scopes.java:65) 在 com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) 在 com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978) 在 com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) 在 com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974) ... 26 更多 引起:java.lang.ClassNotFoundException:javax.validation.ValidationException 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176) 在 java.lang.ClassLoader.loadClass(未知来源) ... 42 更多

我可能遗漏了一些东西,但我不知道去哪里找... 谢谢

【问题讨论】:

    标签: gwt guice requestfactory guice-servlet


    【解决方案1】:

    validation-api.jar 在您的war/WEB-INF/lib 中吗? (你说“引用”,可能还不够)

    【讨论】:

    • 谢谢托马斯,这样更好。现在我收到消息无法初始化您的博客中提到的 JSR 303 Bean Validator。但我不确定为什么我必须手动将这些文件从 GWT SDK 复制到 lib 文件夹?我不为 gwt-user.jar 文件这样做,它适用于 RequestFactory。
    • 因为有 gwt-servlet.jar(是的,GPE 负责复制它)。如果你不使用 Maven,那么 GPE 还应该复制 gwt-servlet-deps.jar,它捆绑了 javax.validation API。
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多