客户端调用Xfire WebService(含JavaScript)

一 、通过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>

时间: 2024-11-13 10:42:58

客户端调用Xfire WebService(含JavaScript)的相关文章

Apache cxf暴露接口以及客户端调用之WebService初步理解

在我们真实的项目中,经常会调用别人提供给我们的接口,或者在自己的团队中, restful风格的前后端分离也经常会提供一个后端接口暴露出去供app,或者.net/C/C++程序员去调用,此时就需要使用到一个工具或者一套程序来调用暴露的接口. 而今天我要说的就是其中的一个方式,使用apache的cxf调用以及暴露接口,让我们直接开始代码 1.首先我们需要去下载cxf,cxf是apache的一个产品,下载链接附上:http://www.apache.org/dyn/closer.lua/cxf/3.2

java调用CXF WebService接口的两种方式

通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();        // 判断是否抛出异常        factory.getOutInterceptors().add(new LoggingInIntercept

java程序调用xfire发布的webService服务(二)

在上一篇的调用xfire发布的webService服务中,我只是从服务端返回了一个字符串给客户端,却没有测试从客户端传递数据给服务端.而实际应用中一般是不太可能只出现这样的应用场景的,因此我便更进一步测试了客户端传递数据给服务端. 因为相关的jar包在上一篇已经说过,因此便不再重复说明,这次的测试步骤如下: 一.测试向服务端传递字符串(重点在第二个): 为了进一步理解服务搭建,我重新写了一个服务端服务类: 接口: package xfireTest; public interface XFire

自定义WebService和客户端调用《二》

问题?自定义WebService和客户端调用<二>,客户端调用有几种方式 一.JDK创建WebService服务和使用 Oracle前身sun公司,早就意识到WebService的强大,和它的未来前景,所以在JDK中早就封装了这样的创建WebService服务. 查看DJK-API文档: 1.新建Java或web工程,建一个类(这个类作为服务端): <span style="font-family:Microsoft YaHei;font-size:18px;">

C#创建webservice并发布,部署到iis,客户端调用

1.新建一个web空项目: 2.添加web服务: 3.在添加的web服务中添加一个求和的方法:(注:必须在方法上面添加 [WebMethod]才会在网页上显示出来,其中(description为方法的描述)) using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; namespace WebServiceDemo { /// <s

webservice -- cxf客户端调用axis2服务端

背景: 有个项目, 需要由第三方提供用户信息, 实现用户同步操作, 对方给提供webservice接口(axis2实现)并也使用axis2作主客户端调用我方提供的webservice接口 起初, 由于项目使用了spring, 且spring可与cxf较好的集成, 所以也就选用了cxf, 可问题随之出现, 接口可以调用到, 接口的具体方法也可以调用到, 但是, 1. cxf作为客户端, 获取服务端返回值时均为null. 2. cxf作为服务端, 获取axis2客户端传来的参数时, 也均为null.

CXF soup webservice 动态客户端调用工具类

在尝试了多种webservice客户端调用方法之后,还是觉得这种方法靠谱点儿,此方法用到了Apache的CXF框架,工具类源码如下: import java.lang.reflect.Method; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; public class WsReq{     private String wsUrl;     private Class<?> interfaceClz;          pulbic W

WebService学习之旅(六)使用Apache Axis2实现WebService客户端调用

上节介绍了如何使用Axis2 发布一个WebService,Axis2除了为我们编写WebService应用带来了便利,也同样简化的客户端调用的过程,本节在上节的基础上使用Axis2自带的工具生成客户端调用辅助类,并实现客户端调用代码的编写. 1.將前面下载的axis2-1.7.1-bin.zip解压,新建一个环境变量AXIS2_HOME,值为解压后目录路径.接着在path变量中添加%AXIS2_HOME%/bin;. 2.Eclipse中新建一个Java Project,打开Windows控制

cxf客户端调用webservice报错:NoSuchMethod org.apache.commons.xml.XmlSchema.read

cxf客户端项目部署在weblogic中的时候,调用cxf webservice服务端接口时,出现如下错误: 在网上搜索过很多资料,说是jar 包版本过低,将XmlSchema-1.4.5.jar 包换成XmlSchema-2.0.1.jar 之后,还是不行. 原因是:weblogic在服务器上运行时使用的是jrokit的JDK,jrokit中已经有相关的jar包, 会优先加载jrokit/jre/lib目录下的jar包, 解决办法: 在weblogic的使用的JRockit的jre/lib目录