Проблема с настройкой servletModule с Guice, внедряющим GWT RequestFactory

Я хочу использовать GUICE на стороне сервера с GWT 2.3 RequestFactory. У меня есть класс, расширяющий 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)

Когда я запускаю его (в Eclipse с плагином GWT), он говорит:

jetty-6.1.x [WARN] не удалось guiceFilter: com.google.inject.ProvisionException: ошибки подготовки Guice:

1) Ошибка при внедрении конструктора, java.lang.NoClassDefFoundError: javax / validation / ValidationException в com.google.web.bindery.requestfactory.server.RequestFactoryServlet. (RequestFactoryServlet.java:74) в com.djayservélet.MoatServlet. configureServlets (EatServletModule.java:13) при поиске com.google.web.bindery.requestfactory.server.RequestFactoryServlet

1 ошибка [WARN] Не удалось запустить контекст com.google.apphosting.utils.jetty.DevAppEngineWebAppContext@17b3de2 {/, C: \ 5_DJAY \ 03_EYEANDTRACK \ branch \ djaysbox \ EyeAndTrack \ war} com.google.inject.ProvisionException: Guice provision ошибки:

1) Ошибка при внедрении конструктора, java.lang.NoClassDefFoundError: javax / validation / ValidationException в com.google.web.bindery.requestfactory.server.RequestFactoryServlet. (RequestFactoryServlet.java:74) в com.djayservélet.MoatServlet. configureServlets (EatServletModule.java:13) при поиске com.google.web.bindery.requestfactory.server.RequestFactoryServlet

Я, наверное, что-то упускаю, но не знаю, где искать ... Спасибо

Есть ли в вашем

@Override
public void configureServlets() {
  // RequestFactory servlet
  bind(RequestFactoryServlet.class).in(Singleton.class);
  serve("/gwtRequest").with(RequestFactoryServlet.class);
}
validation-api.jar? (вы говорите "ссылка", что может быть недостаточно)


person Gerald    schedule 26.05.2011    source источник


Ответы (1)


Мерси Томас, так лучше. Теперь у меня есть сообщение «Невозможно инициализировать валидатор компонентов JSR 303», о котором упоминается в вашем блоге. Но я не уверен, что понимаю, почему мне нужно вручную копировать эти файлы из GWT SDK в папку lib? Я не делаю этого для файла gwt-user.jar, он работает для RequestFactory.

person Thomas Broyer    schedule 26.05.2011
comment
Потому что есть gwt-servlet.jar (и да, GPE позаботится о его копировании). Если вы не используете Maven, GPE также должен скопировать gwt-servlet-deps.jar, который объединяет _1_ API. - person Gerald; 27.05.2011
comment
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: com.google.initPipeline: com.google.com .google.inject.servlet.GuiceFilter.init (GuiceFilter.java:172) на org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:97) на org.mortbay.component.AbstractLifeCycle.start (AbstractjavaCycle.start (AbstractjavaCycle.start (AbstractjavaCycle.start) : 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 (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.google.appengine.tools.development.google. AppEngineLauncher.start (AppEngineLauncher.java:119) в com.google.gwt.dev.DevMode.doStartUp Сервер (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 ($ FastConstance. FastConstructor.java:40) в com.google.inject.internal.DefaultConstructionProxyFactory $ 1.newInstance (DefaultConstructorProxyFactory.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.InjectorConallImpl.call .java: 1031) на com.google.inject.internal.ProviderToInternalFactoryAdapter.get (ProviderToInternalFactoryAdapter.java:40) на com.google.inject.Scopes $ 1 $ 1.get (Scopes.java:65) на com.google.inject. внутренний. внутренний FactoryToProviderAdapter.get (InternalFactoryToProviderAdapter.java:40) в com.google.inject.internal.InjectorImpl $ 4 $ 1.call (InjectorImpl.java:978) в com.google.inject.internal.InjectorImpl.callInContext (InjectorImpl.java:1024) at 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 (Unknown Source) ... еще 42 - person Thomas Broyer; 27.05.2011