客户端调用Xfire WebService(含JavaScript)

来源:互联网 发布:软件编程就业前景 编辑:程序博客网 时间:2024/06/05 19:40

一 、通过Web服务端提供的接口来创建客户端

/**  * 通过Web服务端提供的接口来创建客户端  * @see 客户端必须提供一个与服务端完全一致的接口,包名也要一致  * @see 并且此时需要在项目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries  */  public class PortClient {public static void main(String args []){//首先使用XFire的ObjectServiceFactory从HelloService接口创建一个服务模型serviceModel          //serviceModel包含服务的说明,换句话说,就是服务的元数据          Service serviceModel = new ObjectServiceFactory().create(KingTeamService.class);              //访问的地址          String serviceURL = "http://localhost:80/xfireD/services/KingTeamService";        //为XFire获得一个代理工厂对象          XFireProxyFactory factory = new XFireProxyFactory();          try {        //通过proxyFactory,使用服务模型serviceModel和服务端点URL(用来获得WSDL)              //得到一个服务的本地代理,这个代理就是实际的客户端  KingTeamService client = (KingTeamService)factory.create(serviceModel, serviceURL);/**          * Invoke the service          * @see 调用服务的本地代理(即实际的客户端)中的方法,便得到我们需要的WebServcie          */ int serviceResponse = client.jian(12,3);       System.out.println(serviceResponse);} catch (MalformedURLException e) {e.printStackTrace();}                 }}


二、通过WSDL地址来创建动态客户端

public class KingTeamClient {public static void main(String args []){try {Client client = new Client(new URL("http://localhost:80/xfireD/services/KingTeamService?wsdl"));Object[] k = client.invoke("jia", new Object[]{12,12});System.out.println(k[0]);} catch (MalformedURLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}}

三、web页面JavaScript

 JavaScirpt 代码:

<script type="text/javascript">function invokeServerFunction(){          var xmlHttp;          try{              xmlHttp = new XMLHttpRequest();          }catch(e){              try{                  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");              }catch(e){                  try{                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");                }catch(e){                alert("很遗憾, 您的浏览器不支持AJAX, 请使用其它浏览器, 如Firefox、Safari、Opera8.0+");                return false;                  }              }          }                xmlHttp.onreadystatechange = function(){          if(4 == xmlHttp.readyState){              alert(xmlHttp.status);              if(200 == xmlHttp.status){                  //document.writeln("Web服务所返回的结果为:" + xmlHttp.responseText);                  document.getElementById("result").innerHTML = xmlHttp.responseText;              }          }      };      var data;      data = '<?xml version="1.0" encoding="UTF-8"?>';            //这里要注意,不建议写成下面这个样子,否则会报错      //data = data + '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        //                              xmlns:xsd="http://www.w3.org/2001/XMLSchema"        //                              xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';      //最好把这三个东西,写成一行      data = data + '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';      data = data + '<soap:Body>';          //这里的<sayHello>标签,对应的是客户端所要调用的服务端的方法    data = data + '<hello xmlns="com.yao.xfire.service/KingTeamServer">';          //这里的<str>标签,对应的是传递给sayHello()方法的参数      data = data + '<str>12,3</str>';      data = data + '</hello>';    data = data + '</soap:Body>';    data = data + '</soap:Envelope>';    //这是URL,即访问的地址,其格式为http://IP:端口/服务端项目/services/服务端提供的服务对外开放的名字      var url = "http://127.0.0.1/xfireD/services/KingTeamService";    xmlHttp.open("POST", url, true);    xmlHttp.setRequestHeader ("Content-Type","text/xml; charset=UTF-8");       //这里的第二个参数,是服务端在services.xml中指定的<namespace>加上所要调用的sayHello()方法名      xmlHttp.setRequestHeader ("SOAPAction","http://com.yao.xfire.service/KingTeamService/hello");    xmlHttp.send(data); }  </script>

页面HTML代码:

<body>  <input type="button" value="viewResult" onclick="invokeServerFunction()" /><br/>  <br/>Web服务所返回的结果为:<span id="result"></span>    </body>


1 0
原创粉丝点击