hello =function(){ var xmlrpc=null; try{ var xmlrpc = importModule("xmlrpc"); }catch(e){ reportException(e); throw"importing of xmlrpc module failed."; } var addr ="http://localhost:8080/Rpc/RpcServer"; var methods = ["HelloService.sayHello"]; var rslt; try{ var service =new xmlrpc.ServiceProxy(addr, methods); rslt = service.HelloService.sayHello("MTY"); }catch(e){ var em; if(e.toTraceString){ em = e.toTraceString(); }else{ em = e.message; } rslt ="Error trace: \n\n"+ em; } document.getElementById("result").value=rslt; } add =function(){ var xmlrpc=null; var a = document.getElementById("a").value; var b = document.getElementById("b").value; var params =new Array(); params[0] = a; params[1] = b; try{ var xmlrpc = importModule("xmlrpc"); }catch(e){ reportException(e); throw"importing of xmlrpc module failed."; } var addr ="http://localhost:8080/Rpc/RpcServer"; var methods = ["HelloService.sayHello","MathService.add"]; var rslt; try{ var service =new xmlrpc.ServiceProxy(addr, methods); rslt = service.MathService.add(params); }catch(e){ var em; if(e.toTraceString){ em = e.toTraceString(); }else{ em = e.message; } rslt ="Error trace: \n\n"+ em; } document.getElementById("result").value=rslt; }
这个js文件中有两个函数,一个负责从sayhello,一个负责加法运算。 这里需要一些解释的地方: 1、 var xmlrpc=null; try{ var xmlrpc = importModule("xmlrpc"); }catch(e){ reportException(e); throw "importing of xmlrpc module failed."; } 这里是把xmlrpc模块引进来,你也就这么写吧,我也不知道为什么。 2、 var addr = "http://localhost:8080/Rpc/RpcServer"; var methods = ["HelloService.sayHello"]; 定义服务地址和要用的方法名。规则大概你也能看懂:Handler名.方法名。这里的Handler名就是你在xmlrpcServer中注册名,就是我上面让你记住的那个。方法名就是那个类自己的方法名。注意,methods是一个数组,所以可以写多个方法,如第二个例子。var methods = ["HelloService.sayHello","MathService.add"]; 3、 try{ var service = new xmlrpc.ServiceProxy(addr, methods); rslt = service.HelloService.sayHello("MTY"); }catch(e){ var em; if(e.toTraceString){ em = e.toTraceString(); }else{ em = e.message; } rslt = "Error trace: \n\n" + em; } 通过new xmlrpc.ServiceProxy(addr, methods);得到服务代理。 然后调用服务的方法就行了,方法就是代理.Handler名.方法名(参数)。好像参数只能有一个,在第二个例子中我开始有两个参数a,b会发生错误。怎么办?没办法,在javascript用Array传参数,在java用Vector接参数(为什么用Vector,因为xml-rpc规范中的Array,apache使用Vector实现的,为什么javascript不用Vector,因为js没有Vector,且js的的Array是可变长的)。当然这就需要很多java端类型转换工作,js是弱类型的就不用转换了。