分派传入 RPC 调用时出现异常 java.lang.NoSuchMethodError: com.google.gwt.user.server.rpc.RPCRequest

Posted

技术标签:

【中文标题】分派传入 RPC 调用时出现异常 java.lang.NoSuchMethodError: com.google.gwt.user.server.rpc.RPCRequest【英文标题】:Exception while dispatching incoming RPC call java.lang.NoSuchMethodError: com.google.gwt.user.server.rpc.RPCRequest 【发布时间】:2016-01-22 15:17:48 【问题描述】:

我已经有带有 Hibernate 和 mysql 设置的 GWT 页面。我在 SuperDev 模式下运行它,这是我在编译页面后得到的错误:

 [WARN] Exception while dispatching incoming RPC call
java.lang.NoSuchMethodError: com.google.gwt.user.server.rpc.RPCRequest.<init>(Ljava/lang/reflect/Method;[Ljava/lang/Object;Lcom/google/gwt/user/server/rpc/SerializationPolicy;)V
    at com.google.gwt.user.server.rpc.RPCCopy_GWT15.decodeRequest(RPCCopy_GWT15.java:278)
    at com.google.gwt.user.server.rpc.RPCCopy.decodeRequest(RPCCopy.java:136)
    at net.sf.gilead.gwt.PersistentRemoteService.processCall(PersistentRemoteService.java:143)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:68)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:370)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
    at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Unknown Source)
[ERROR] 500 - POST /atlas_emergency_status_page/DBService (127.0.0.1) 57 bytes
   Request headers
      Host: 127.0.0.1:8888
      Connection: keep-alive
      Content-Length: 162
      X-GWT-Module-Base: http://127.0.0.1:8888/atlas_emergency_status_page/
      X-GWT-Permutation: BE75887428AD071A73976B7011B26FBF
      Origin: http://127.0.0.1:8888
      User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/47.0.2526.111 Safari/537.36
      Content-Type: text/x-gwt-rpc; charset=UTF-8
      Accept: */*
      Referer: http://127.0.0.1:8888/ATLAS_Emergency_Status_Page.html
      Accept-Encoding: gzip, deflate
      Accept-Language: en-US,en;q=0.8,fr-CH;q=0.6,fr;q=0.4,ka;q=0.2,ru;q=0.2
   Response headers
      Content-Type: text/plain

这可能是什么原因造成的?

编辑:

这是我的 web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <!-- Servlets -->
  <servlet>
    <servlet-name>greetServlet</servlet-name>
    <servlet-class>ch.cern.atlas.emergency.status.server.GreetingServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>greetServlet</servlet-name>
    <url-pattern>/atlas_emergency_status_page/greet</url-pattern>
  </servlet-mapping>

  <!-- Default page to serve -->
  <welcome-file-list>
    <welcome-file>ATLAS_Emergency_Status_Page.html</welcome-file>
  </welcome-file-list>

  <!-- Servlets -->
  <servlet>
    <servlet-name>LoginService</servlet-name>
    <servlet-class>ch.cern.atlas.emergency.status.server.LoginServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>LoginService</servlet-name>
    <url-pattern>/atlas_emergency_status_page/LoginService</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>DBService</servlet-name>
    <servlet-class>ch.cern.atlas.emergency.status.server.DBServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>DBService</servlet-name>
    <url-pattern>/atlas_emergency_status_page/DBService</url-pattern>
  </servlet-mapping>

</web-app>

【问题讨论】:

【参考方案1】:

这与您的 gwt 版本和您正在使用的库有冲突。在您的堆栈跟踪中,您使用的是“gilead”和旧版本的“hibernate4gwt”。此版本需要 GWT1.5。

您应该升级这些库以与您拥有的 gwt 版本兼容

【讨论】:

感谢您的回复。我在构建路径中找不到这些库,它们的确切名称是什么? gilead 和“PersistentRemoteService”不包含在 GWT 中。它是一个开源软件,可帮助将 hibernate 集成到 gwt 应用程序中。你必须在某个地方依赖这个项目:-) 我会说停止使用吉利德,因为它不再维护。 ***.com/questions/11683838/… @ElHoss,现在我收到此错误(在尝试更改构建路径中的库后)初始 SessionFactory 创建失败。org.hibernate.HibernateException:无法获取默认的 Bean 验证工厂。我在构建路径中有 hibernate-validator-4.0.2.jar 和 javax-validation.jar 库,但仍然无法正常工作... 好吧,通过在属性中禁用验证器解决:-)【参考方案2】:

如果不查看您的 web.xml 和 RPC 类,很难判断

可能你在 web.xml RPC servlet 声明中有错误或者 RPC 服务没有正确实现

【讨论】:

我添加了 web.xml 文件。您究竟需要查看哪个 RPC 文件? DBService.java、DBServiceAsync.java 和 DBServiceImpl.java? 我认为问题与 web.xml 无关。如果您遇到与 web.xml 相关的问题,您将收到 404 或服务器无法启动 (ClassNotFounException)。您收到错误代码 500。我将调试服务器实现。好像出了点问题。 @ElHoss,服务器实现到底是什么意思?像 DBServiceImpl 类?感谢您至少缩小研究领域 您使用的是哪个版本的 GWT? @ElHoss,GWT SDK 2.6.0

以上是关于分派传入 RPC 调用时出现异常 java.lang.NoSuchMethodError: com.google.gwt.user.server.rpc.RPCRequest的主要内容,如果未能解决你的问题,请参考以下文章

GWT:为 com.extjs.gxt.ui.client.data.BaseListLoadResult 分派传入 RPC 调用时出现异常

调度传入 RPC 调用时出现异常

使用dubbo引用和发布服务时出现的异常:HTTP状态500 - 请求处理失败; 嵌套异常是com.alibaba.dubbo.rpc.RpcException:无法在服务cn.e3mall.serv

在 GWT 中使用 RPC 时出现 IncompatibleRemoteServiceException

Perl -- 使用 JSON::RPC::Client 时出现“不是 HASH 引用”错误

运行 GWT 应用程序时出现异常