gwt的rpc调用函数加入泛型后报错!!高手请进啊

问题描述

我在做gwt的rpc调用时,在接口函数中加入了泛型,形如:public interface GenericsRpcService<T,K> extends RemoteService{T callServer(List<K> id);T callServer(K id);}@RemoteServiceRelativePath("greet")public interface RpcService extends GenericsRpcService<String, String>{}页面分别调用两个接口函数的结果是:T callServer(List<K> id) 调用正常!T callServer(K id) 调用失败!第二个函数调用出错的异常如下所示:Starting Jetty on port 8888 [WARN] testServlet: An IncompatibleRemoteServiceException was thrown while processing this call.com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: java.lang.ClassNotFoundException: aaaaaaat com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:315)at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:206)at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)at org.mortbay.jetty.Server.handle(Server.java:324)at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)Caused by: com.google.gwt.user.client.rpc.SerializationException: java.lang.ClassNotFoundException: aaaaaaat com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserialize(ServerSerializationStreamReader.java:572)at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader$ValueReader$8.readValue(ServerSerializationStreamReader.java:137)at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeValue(ServerSerializationStreamReader.java:381)at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:303)... 22 moreCaused by: java.lang.ClassNotFoundException: aaaaaaat java.lang.ClassLoader.findClass(ClassLoader.java:359)at java.lang.ClassLoader.loadClass(ClassLoader.java:307)at java.lang.ClassLoader.loadClass(ClassLoader.java:252)at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:352)at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337)at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:247)at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserialize(ServerSerializationStreamReader.java:542)... 26 more 我之前以为是gwt的编译器会把泛型都认为是Object类型(就像java的编译器一样),但后边测试到第一个函数(是泛型,只是是集合作为参数)调用是正确的。 到此,我就纳闷了,gwt的rpc调用时,把泛型是怎么处理的?另外,像上边的两个函数接口对gwt的rpc来说,有什么区别?谢谢! 附件是相关的测试工程源代码,是根据gwt的Hello World工程改的。 问题补充:AngelAndAngel 写道

解决方案

我不是说了吗 首先,泛型是什么,泛型是运行时对你的参数进行后绑定,但是其实不是真正的类型,程序在使用它的时候会擦除掉,就相当于object,但是List这样的本身属于某个类型,并且也实现序列化,当然就可以。
解决方案二:
报类没有找到,很显然没有把你的参数当作String来看,所以更谈不上序列化了。
解决方案三:
我看你异常信息我觉得是这样,aaaaaa这里的参数类型应该是实现implements java.io.Serializable接口的序列化对象才行,不然不行的。因为得远程传输。
解决方案四:
我没gwt环境啊
解决方案五:
引用aaaaaa是传向后台的参数值,gwt认为该参数值对应的java类型是Object。问题下边有工程的代码,你可以下载下来运行一下,应该就明白问题怎么回事了。你现在的状况是 明白没有啊 哈哈我第一感觉是泛型擦除啊 我正在看你例子。
解决方案六:
正在弄。五个字汗
解决方案七:
java.lang.ClassNotFoundException: aaaaaa 这个aaaaaa你编译正确吗。
解决方案八:
不是说gwt是怎么处理泛型的,泛型擦除后都没有本质的区别,lz建议你把调用的代码贴一下,应该是你调用的问题。

时间: 2024-10-18 10:22:55

gwt的rpc调用函数加入泛型后报错!!高手请进啊的相关文章

C# 编写的com(按照C#高级编程中的方法写了所谓的连接点) c++如何将函数与事件关联起来 ?? 高手请进..........

问题描述 C#代码:是按照<C#高级编程>中的方法写的下面的IEvent接口里的方法名与后面的Class1中的事件名相同...而且Class1有特性[ComSourceInterfaces(typeof(IEvent))]据书上说这样就可以供C++来连接了.我想的就是C++写好一个函数然后这个函数就是Class1中的事件LoginOk的处理函数就和C#里用LoginOk+=....一样.但是我就是不明白怎么把C++的方法和这个Class1的事件联系起来而且这个IEvent也完全没用到...us

servlet-form表单提交后报错,具体内容进来看.

问题描述 form表单提交后报错,具体内容进来看. form提交报错 严重: Servlet.service() for servlet jsp threw exception tag 'select', field 'list', name 'personcost.pid': The requested list key 'polist' could not be resolved as a collection/array/map/enumeration/iterator type. Exa

java-Java中利用jawin技术调用第三方dll文件,其中 invoke的参数问题 ,高手请进

问题描述 Java中利用jawin技术调用第三方dll文件,其中 invoke的参数问题 ,高手请进 各位大神: dll中的被调用方法如下: long WINAPI AutoOpenComPort(long* Port, unsigned char *ComAdr, unsigned char Baud,long *FrmHandle); 其中: Port:输出变量, ComAdr:输入/输出变量 Baud:输入变量 FrmHandle:输出变量 请问它的 msgBox.invoke(instr

怎样用C#调用XML中的函数或变量,高手请进

问题描述 我想用C#调用XML中的一个变量或函数,可我怎么做也不行,哪位高手能说一下么,谢谢.<Ui><Scriptfile="a.lua"/><Scripts><bookid="bk101">floats=aadd();<authortt="$#t"xx="4444">t</author><title>XMLDeveloper'sGuide&

C#调用联通短信平台SGIP.DLL如何接收短信?有经验高手请进

问题描述 本人最近在做一个联通短信平台,用于发送和接收短信,现发送模块OK,但接收的总搞不定,请各位高手帮忙并指教!本程序参考于http://topic.csdn.net/t/20040416/10/2972009.htmlhttp://bbs.spforum.net/viewthread.php?tid=173763&extra=page%3D23发送的程序调用Startup()连接成功后直接调用Submit()进行发送OK问题1:如何做能接收到短信?对于FProcessDeliver,FPr

【高手请进】:怎样解决调用迅雷组件弹出窗口

问题描述 我现调用迅雷组件下载文件,问题是要弹出那个确认窗口.问: 怎样解决或者取消这个窗口? 有什么办法可以模拟? 解决方案 解决方案二:再看一下

for-关于 += 在被调用函数中时的问题。

问题描述 关于 += 在被调用函数中时的问题. int add(int a){int b = 0: b += 1;}int main (void){int a =0;int i = 0;for(i = 0;i<= 5;i++){printf(""%dn""add(a));}return 0;}如果通过循环调用函数的话, b += 1;怎么进行赋值? 解决方案 使用指针或引用都可以达到要求,一般教科书上会使用指针. void add(int *a){ *a =

回车键调用-这个按Enter调用函数的代码为什么在猎豹上不执行?而且在ie上执行的也不正常

问题描述 这个按Enter调用函数的代码为什么在猎豹上不执行?而且在ie上执行的也不正常 <!DOCTYPE html> Document<br> function leyLogin(){<br> if(event.keyCode==13){<br> document.getElementById("input1").click();<br> }<br> }<br> 解决方案 放chrome上执行试试

调用函数-echart的 title相关问题

问题描述 echart的 title相关问题 echart怎么给title的link属性怎么调用函数,最后实现页面跳转