WEB服务及实现(二)
2013-11-11 20:52
253 查看
一、如何实现WEB服务
WEB服务是实现分布式系统的一种技术。在考虑实现的时候分Client端、Web服务器端和消息通信协议三部分考虑。WEB服务的标准如下图所示:
二、Web服务实现功能的描述
服务提供端(Web服务Server端)
--------支持远程通信协议(HTTP,JMS…)
--------接收和处理SOAP消息(解析SOAP消息…)
--------将SOAP消息描述的数据类型、对象、方法、参数转换为对应的实现语言( type=“xsd:int“ 转换为 int …)
--------调用组件或者对象的方法
服务调用过程(服务端)
1.接受并预处理SOAP请求消息(包括SOAP消息校验、处理SOAP消息报文头(Header))
2.从消息中获取消息希望调用的接口和具体操作;
3.找到具体的实现对象,并调用该对象的接口;
4.将SOAP请求消息中的服务请求参数;
5.目标Java对象执行相应的操作,将计算结果以对象形式返回;
6.根据WSDL中的定义,将计算结果序列化为XML元素,并封装到SOAP回复消息中;
7.将SOAP回复消息发送回服务调用端。
服务调用端(Web服务Client端)
--------支持远程通信协议(HTTP,JMS…)
--------接收和处理SOAP消息
服务调用过程(客户端)
1.首先创建服务端点接口对象SEI(Service Endpoint Interface);
2.客户端通过SEI调用其中服装的Web服务接口;
3.根据WSDL的定义,将客户端的调用接口的参数转化成XML元素,再将该元素封装在SOAP请求消息里;
4.在同步调用模式下,在SOAP请求消息发出后,客户端会等待SOAP应答消息;异步模式下,客户端顺序执行后续代码;
5.解析从服务器端获得SOAP应答消息,将SOAP应答消息中的数据转化为客户端对象,该对象的值就是被调用服务的返回值。
三、web服务实现
使用axis2实现一个简单计算服务程序
1. 服务程序:
2. 部署:编译CalculateService类后,将CalculateService.class文件放到<Tomcat安装目录>webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录)
3. 客户端调用webservice的程序:
4. 返回结果:
这说明webservice发布成功,返回了正确结果。
WEB服务是实现分布式系统的一种技术。在考虑实现的时候分Client端、Web服务器端和消息通信协议三部分考虑。WEB服务的标准如下图所示:
二、Web服务实现功能的描述
服务提供端(Web服务Server端)
--------支持远程通信协议(HTTP,JMS…)
--------接收和处理SOAP消息(解析SOAP消息…)
--------将SOAP消息描述的数据类型、对象、方法、参数转换为对应的实现语言( type=“xsd:int“ 转换为 int …)
--------调用组件或者对象的方法
服务调用过程(服务端)
1.接受并预处理SOAP请求消息(包括SOAP消息校验、处理SOAP消息报文头(Header))
2.从消息中获取消息希望调用的接口和具体操作;
3.找到具体的实现对象,并调用该对象的接口;
4.将SOAP请求消息中的服务请求参数;
5.目标Java对象执行相应的操作,将计算结果以对象形式返回;
6.根据WSDL中的定义,将计算结果序列化为XML元素,并封装到SOAP回复消息中;
7.将SOAP回复消息发送回服务调用端。
服务调用端(Web服务Client端)
--------支持远程通信协议(HTTP,JMS…)
--------接收和处理SOAP消息
服务调用过程(客户端)
1.首先创建服务端点接口对象SEI(Service Endpoint Interface);
2.客户端通过SEI调用其中服装的Web服务接口;
3.根据WSDL的定义,将客户端的调用接口的参数转化成XML元素,再将该元素封装在SOAP请求消息里;
4.在同步调用模式下,在SOAP请求消息发出后,客户端会等待SOAP应答消息;异步模式下,客户端顺序执行后续代码;
5.解析从服务器端获得SOAP应答消息,将SOAP应答消息中的数据转化为客户端对象,该对象的值就是被调用服务的返回值。
三、web服务实现
使用axis2实现一个简单计算服务程序
1. 服务程序:
public class CalculateService { public double plus(double x,double y){ return x+y; } public double minus(double x,double y){ return x-y; } public double multiply(double x,double y){ return x*y; } public double divide(double x,double y){ return x/y; } }
2. 部署:编译CalculateService类后,将CalculateService.class文件放到<Tomcat安装目录>webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录)
3. 客户端调用webservice的程序:
package ming.testClient; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class TestClient { public static void main(String[] args) throws Exception { // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); // 指定调用WebService的URL EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/axis2/services/CalculateService"); options.setTo(targetEPR); // 指定加法方法的参数值 Object[] opAddEntryArgs = new Object[] {10.0,12.0}; // 指定plus方法返回值的数据类型的Class对象 Class[] classes = new Class[] {double.class}; // 指定要调用的plus方法及WSDL文件的命名空间 QName opAddEntry = new QName("http://ws.apache.org/axis2", "plus"); // 调用plus方法并输出该方法的返回值 System.out.println("the result of "+opAddEntryArgs[0]+" plus "+opAddEntryArgs[1]+" is :"); System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]); // 下面是调用减法方法的代码,这些代码与调用plus方法的代码类似 Object[] opAddEntryArgs2 = new Object[] {12.0,10.0}; classes = new Class[] {double.class}; opAddEntry = new QName("http://ws.apache.org/axis2", "minus"); System.out.println("the result of "+opAddEntryArgs2[0]+" minus "+opAddEntryArgs2[1]+" is :"); System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs2, classes)[0]); } }
4. 返回结果:
这说明webservice发布成功,返回了正确结果。
相关文章推荐
- nagios监控linux主机、web等各种服务,并实现飞信自动报警
- 利用微软WebService技术实现远程数据库存取 利用web服务在不同站点间共享同一数据库
- loner_li AJax 实现数据的 无刷新分页 实例(引用web服务文件和存储过程)
- (二)Java EE 5实现Web服务(Web Services)及多种客户端实例-实现Web服务
- jQuery AJAX实现调用页面后台方法和web服务定义的方法
- Jquery结合Ajax和Web服务使用三层架构实现无刷新分页
- Web服务入门之三:通过XFire调用远程Web Service,实现QQ在线服务功能
- 利用微软WebService技术实现远程数据库存取 利用web服务在不同站点间共享同一数据库
- [学习日记]对SOAP头内添加信息的验证,可实现对请求WEB服务进行身份验证。
- (四)Java EE 5实现Web服务(Web Services)及多种客户端实例-胖客户端
- WebMethod框架:实现Web服务的更高效方法
- 高可用集群之heartbeat配置,实现web服务的高可用以及Mariadb高可用 推荐
- 三种主流web服务实现
- (四)Java EE 5实现Web服务(Web Services)及多种客户端实例-胖客户端
- python 使用httplib模块实现监测web服务
- (四)Java EE 5实现Web服务(Web Services)及多种客户端实例-胖客户端
- web集群服务的负载均衡方案选择与实现
- 高性能Web服务之Httpd+Tomcat实现负债均衡反向代理实现
- Linux集群服务知识点总结及通过案例介绍如何实现高性能web服务
- (六)Java Ee平台上实现Web服务及多种客户端实例-小结