1

我在 tomcat 中运行我的 gwt2.4rc1 应用程序时遇到问题。当我尝试进行 requestfactory 调用时会出现问题。然后我在底部得到异常。

当我在开发模式下运行 GWT 时,一切正常。gwt 开发。jar 在我的 webapp 的 lib 文件夹中。我正在使用 Maven 进行依赖管理。我的配置可能有问题吗?我已经遇到了 gwt2.4 beta 的错误。如果需要解决此问题的任何其他信息,我很乐意提供。

问候, 阿恩

严重:意外错误 com.google.web.bindery.requestfactory.server.UnexpectedException:com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.die(ServiceLayerDecorator.java:216) 在 com.google.web 的意外检查异常.bindery.requestfactory.server.ServiceLayerCache.getOrCache(ServiceLayerCache.java:242) 在 com.google.web.bindery.requestfactory.server.ServiceLayerCache.resolveRequestFactory(ServiceLayerCache.java:198) 在 com.google.web.bindery.requestfactory .server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:201) 在 com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:125) 在 com.google.web.bindery.requestfactory.server.RequestFactoryServlet .doPost(RequestFactoryServlet.java:133) 在 javax.servlet.http.HttpServlet。service(HttpServlet.java:641) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:261) at com.google.inject .servlet.ServletDefinition.service(ServletDefinition.java:175) 在 com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91) 在 com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62 ) 在 org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) 在 org.apache.shiro 的 org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)。 web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:81) 在 com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:162) 在 com.google.inject.servlet。FilterChainInvocation.doFilter(FilterChainInvocation.java:58) at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) at org .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve .java:240) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 在 org.apache.catalina.org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203)。 Valves.ErrorReportValve.invoke(ErrorReportValve.java:108) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) 在 org.apache.coyote.http11 .Http11Processor.process(Http11Processor.java:242) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint .java:281) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run( Thread.java:636) 引起:java.lang.NoClassDefFoundError: com/google/gwt/dev/util/StringKey at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader。defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2804) at org.apache.catalina.loader .WebappClassLoader.findClass(WebappClassLoader.java:1144) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1639) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1517) 在com.google.web.bindery.requestfactory.server.RequestFactoryInterfaceValidator.validateProxy(RequestFactoryInterfaceValidator.java:1594) 在 com.google.web.bindery.requestfactory.server.RequestFactoryInterfaceValidator.validateEntityProxy(RequestFactoryInterfaceValidator.java:828) 在 com.google。 web.bindery.requestfactory.server。RequestFactoryInterfaceValidator.maybeCheckProxyType(RequestFactoryInterfaceValidator.java:1540) 在 com.google.web.bindery.requestfactory.server.RequestFactoryInterfaceValidator.getDomainType(RequestFactoryInterfaceValidator.java:1374) 在 com.google.web.bindery.requestfactory.server.RequestFactoryInterfaceValidator.createDomainMethod( RequestFactoryInterfaceValidator.java:1192) 在 com.google.web.bindery.requestfactory.server.RequestFactoryInterfaceValidator.checkClientMethodInDomain(RequestFactoryInterfaceValidator.java:1079) 在 com.google.web.bindery.requestfactory.server.RequestFactoryInterfaceValidator.validateRequestContext(RequestFactoryInterfaceValidator.java: 909) 在 com.google.web.bindery.requestfactory.server.RequestFactoryInterfaceValidator.validateRequestFactory(RequestFactoryInterfaceValidator.java:964) 在 com。com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestFactory(ServiceLayerDecorator.java:172) 上的 google.web.bindery.requestfactory.server.ResolverServiceLayer.resolveRequestFactory(ResolverServiceLayer.java:187)。 bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestFactory(ServiceLayerDecorator.java:172) 在 com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestFactory(ServiceLayerDecorator.java:172) 在 com.google.web.bindery.requestfactory。 server.ServiceLayerDecorator.resolveRequestFactory(ServiceLayerDecorator.java:172) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl。com.google.web.bindery.requestfactory.server.ServiceLayerCache.getOrCache(ServiceLayerCache.java:233) 的 java.lang.reflect.Method.invoke(Method.java:616) 的调用(DelegatingMethodAccessorImpl.java:43) .. . 32 更多原因:java.lang.ClassNotFoundException: com.google.gwt.dev.util.StringKey at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1672) at org.apache.catalina.loader .WebappClassLoader.loadClass(WebappClassLoader.java:1517) ... 57 更多1672) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1517) ... 57 更多1672) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1517) ... 57 更多

4

3 回答 3

2

在从 RC 到主干的过程中,有一个解决方案。同时,从依赖项中删除 gwt-servlet 并改用 requestfactory-servlet.jar。

于 2011-07-12T17:48:09.427 回答
0

我一直将 gwt-dev.jar 理解为编译器和其他开发工具。如果您相信这一点,那么您自己的代码不应该依赖它,也没有理由将它放在您的 war 文件的 WEB-INF/lib 文件夹中。

我从这个问题中看到,至少有一个其他贡献者对 SO 有同样的感觉,但这种信念似乎并不普遍。

如果我能在 GWT 文档中找到任何一种方式,我会更新这个答案。

更新: 我能找到的最接近的东西是Organize Projects,它将 gwt-dev 显示为 WEB-INF/lib 中不存在的引用库。我找不到任何官方说明您可以或不能将其部署到您的 Web 服务器。在一本旧书GWT In Action (Hanson, 2007) 中,第 551 页说

您永远不应该将 gwt-user.jar 和 gwt-dev.jar 文件部署到您的服务器,因为它们会干扰您的服务器;这些 JAR 文件包含它们自己的 Tomcat 服务器代码,当您在托管模式下进行测试时会使用这些代码。

这显然已经过时了,因为不再调用托管模式并且使用嵌入式 Jetty 服务器而不是 Tomcat,但这是我相信的基础。

于 2011-07-12T17:42:59.943 回答
0

好的,我让它工作了:) 我使用了从这里编译的 gwt 版本: http ://code.google.com/p/google-web-toolkit/source/browse/#svn%2Freleases%2F2.4

我确实将 gwt-servlet.jar 和 requestfactory-servlet.jar 作为我的项目中的依赖项。另一个线程中的问题发生是因为我对编译的 jar 使用了自己的 group-id,所以 gin 和 gwt-maven-plugin 没有使用这些。没有一切正常:)

感谢您的帮助!

于 2011-07-13T00:44:39.973 回答