您的位置:首页 > 运维架构 > Apache

用Apache Axis 实现Web Service(三)

2007-03-23 17:27 246 查看
三. Web Servie的客户端使用

一个Web Service部署到服务器上之后,就可以提供给其他应用程序调用。调用一个Web Service其实很简单,并不需要进行特别的设置。比如,我们前面用http://localhost:8080/axis/HelloWorld.jws?wsdl访问,就是就Web Servicede 的一种调用。当然,这种说法不够严格。调用Web Service应该是调用其提供的方法,我们用这种方式调用:http://localhost:8080/axis/HelloWorld?method=sayHello&userName=brookes,结果我们得到下面的页面:


<?xml version="1.0" encoding="UTF-8" ?>


<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


<soapenv:Body>


<sayHelloResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">


<sayHelloReturn xsi:type="xsd:string">Hello brookes,Welcome to my Web Service.</sayHelloReturn>


</sayHelloResponse>


</soapenv:Body>


</soapenv:Envelope>

这是一个标准的的SOAP协议的XML回复,其中关键是<sayHelloReturn>元素,这就是Web Servcie对sayHello方法的响应!我们只需要解析这个XML文件,就可以得到想要的响应。(可参考XMLHttpRequest相关文档)

Apache Axis支持三种客户端访问Web Service的方式:

1. Dynamic Invocation Interface(DII) 动态调用接口
2. Dynamic Proxy 动态代理
3. Stubs 桩

【注】我看到有的资料上将上面三种方式列为Web Servcie的三种“开发部署方法”,我认为说法欠妥。开发如果包含了客户端开发尚且说的过去,部署似乎更应专指服务器端。我的理解也是一家之言,欢迎指正。

我们先来看DII方法,核心代码如下(我们使用了前面的HelloWorld Web服务):


import org.apache.axis.client.Call;


import org.apache.axis.client.Service;


import javax.xml.namespace.QName;




public class WsTest...{




public static void main(String[] args)...{




try...{


String endpoint = "http://localhost:8080/axis/HelloWorld.jws";


Service service = new Service();


Call call = null;


call = (Call) service.createCall();


call.setOperationName(new QName( "http://localhost:8080/axis/HelloWorld.jws","sayHello"));


call.setTargetEndpointAddress(new java.net.URL(endpoint));




String response = (String) call.invoke(new Object[]...{"Brookes"});


System.out.println("return value is: " + response);




}catch (Exception ex)...{ ex.printStackTrace();}


}


}



运行程序,得到如下输出信息:

return value is: Hello Brookes,Welcome to my Web Service.

用DII方式访问Web Service就是这么简单!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: