现在的位置: 首页 > 综合 > 正文

用Apache Axis 实现Web Service(三)

2013年05月18日 ⁄ 综合 ⁄ 共 2180字 ⁄ 字号 评论关闭

 

三. 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就是这么简单!

 

抱歉!评论已关闭.