用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就是这么简单!
一个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就是这么简单!
相关文章推荐
- 用Apache Axis实现Web Service(二)
- 用Apache Axis实现Web Service(五)
- 用Apache Axis实现Web Service(一)
- 用Apache Axis实现Web Service(四)
- .NET调用Apache Axis实现的Web Service
- 利用Axis实现基于SOAP的Web Service(II)
- [转]Java RPC通信机制之SOAP:应用Apache Axis进行Web Service开发
- 使用Apache Axis实现Web服务
- 利用Axis实现基于SOAP的Web Service
- 配置与实现简单的基于Axis的Web Service
- 利用Axis实现基于SOAP的Web Service(III)
- Web Service之Axis实现
- (引用)Java RPC通信机制之SOAP:应用Apache Axis进行Web Service开发
- Java RPC通信机制之SOAP:应用Apache Axis进行Web Service开发
- 应用Apache Axis进行Web Service开发
- Java RPC 通信机制之 SOAP:应用 Apache Axis进行 Web Service开发
- 利用Axis实现基于SOAP的Web Service(I)
- 传智播客Web Service学习,用于web service实现的两个主要的框架axis和xfire.
- Apache Axis1.4 Web Service客户端、服务端生成及服务部署(备忘)
- Java RPC通信机制之SOAP:应用Apache Axis进行Web Service开发