分派传入 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 调用时出现异常
使用dubbo引用和发布服务时出现的异常:HTTP状态500 - 请求处理失败; 嵌套异常是com.alibaba.dubbo.rpc.RpcException:无法在服务cn.e3mall.serv
在 GWT 中使用 RPC 时出现 IncompatibleRemoteServiceException