Web Service Study(1)

Web service—不是框架,更不是一种技术,二是一种跨平台、跨语言的规范

 

为了解决这样的需求场景:
         不用平台、不同语言所编写的应用之间如何相互调用?
web service实际中的用途:

1、  同一公司的新、旧系统的整合

Linux上java应用去调用windows平台的delphi应用

2、  不同公司的业务整合

业务的整合就要带来。不同公司的系统整合

不同公司的系统可能存在平台不同、语言不同的问题

3、  内容聚合

一个应用,比如需要提供天气预报、股票行情、黄金行情、编程语言排行

这个内容聚合的应用,需要调用大量不同平台、不用语言编写的应用的方法

 

 

CFX

         Axis(Apache)---Axis2(Apache)

         XFire---CFX(XFire+Celtrix)

 

XFire(Web Service框架)

Celtrix(ESB框架)

 

SOA(面向服务的架构)

         Sercice1,Sercice2,Sercice3—所有组件都是“即插即用”的

         IBM提倡的SOA架构,希望以“组装电脑”的方式来开发软件

1.      各种提供服务的组件(Web Service)

2.      企业服务总线(Enterprise Service Bus,ESB)

 

CFX号称是SOA框架

CFX(Apache)

         CFX内置了一个JettyWeb服务器

/********************************

每个web service需要两个部分:接口是实现类

**********************************/

 

使用CFX开发web service开发服务器端:

(1)      开发一个web service业务接口

该接口要用@webservice修饰

(2)      开发一个web service实现类

实现累也需要用@webservice修饰

(3)      发布webservice

 

使用CFX开发web service开发客户端:

(1)      调用CFX提供的wsdl2java工具,根据wsdl文档生成相应的java代码

Wsdl-web service definition language

任何语言实现了web service,都需要提供、并暴露wsdl文档

(2)      找到wsdl2java所生成类中,一个继承了service的类

该类的实例可当成工厂来使用

(3)      调用service子类的实力的getXxxPort()方法,返回远程web service的代理

 

形参、返回值

1、  当形参、返回值的类型是String、基本数据类型时,CFX肯定可以轻松的处理

2、  当形参、返回值类型是JavaBean形式的复合类、List集合、数组时

CFX也可以很好的处理

3、  还有一些像Map、非JavaBean式的复合类,CFX是不可以处理的

 

/**************************

XML里的两个属性:
targetNamespace   -    相当于Java语言里的package

Xmlns:                     -          相当于Java语言里的impor

 

*************************/

Web Service的三个技术基础:
    1、WSDL Web ServiceDefinition Language  Web服务定义语言

         2、SOAP SimpleObject Access Protocol 简单对象访问协议

         3、UDDI

一次web Service的调用----其实不是方法调用,而是发送SOAP消息(即XML文档片段)

 

对于sayHi操作来说

         传入消息是:

         <sayHi>

                   <argo>字符串</arg0>

         </sayHi>

         传出消息是:

         <sayHiResponse>

                   <return>字符串</return>

 

对于getCatsByUser操作来说

         传入消息是:

         <getCatsByUser>

                   <arg0>

                            <address>字符串</address>

                            <id>整数值</id>

                            <pass>字符串</pass>

                   </arg0>

         </getCatsByUser>

         传出消息是:

         <getCatsByUserResponse>

                   <return>   ----可出现0~N次(模拟了List对象)

                            <color>字符串</color>

<id>整数型</id>

<name>字符串</name>

                   </return>

         </getCatsByUserResponse>

 

通俗的说,WSDL文档描述了web Service如下2个方面:

What:该web Service包含了几个

How:该web Service的操作应该怎样调用

Where:该web Service的服务地址。

/*******************************

只要得到web Service的WSDL文档,接下来程序就可以调用web Service

*******************************/

调用一次web service的本质:

1、  客户端把调用方法参数,转换成XML文档片段(SOAP消息)

----给文档片段必须复合WSDL定义的格式。

2、  通过网络,把XML文档片段发送给服务区

3、  服务器接收到XML文档片段

4、  服务器解析XML文档片段,提取其中的数据,并把数据转换调用web Service所需的参数值

5、  服务器执行方法

6、  把执行方法得到的返回值再次转换成为XML文档片段(SOAP消息)

---该文档片段必须符合WSDl定义的格式

7、  通过网络把XMl文档片段传给客户端

8、  客户端接收到XML文档片段

9、  客户端解析XML文档片段,提取其中的数据,并把数据转换调用web Service的返回值

 

从上面调用本质来看,要一个语言支持web Service,唯一的要求是:该语言支持XML文档的解析、生成、支持网络传输

 

在CFX开发中,如果遇到CFX无法处理的类型,就需要程序员自行处理

处理思路是:提供一个转换器,该转换器负责把CFX搞不定的类型,转换成CFX搞得定的类型

(1)      使用@xmlJavaTypeAdapter修饰CFX无法处理的类型。

使用该Annotation时,通过value属性指定一个转换器

(2)      实现自己的转换器,实现转换器时,需要开发一个CFX搞得定的类型

 

对于getAllCats操作来说。

         传入消息是:

         <getAllCats>

         </getAllCats>

         传出消息是:

         <getAllCatsResponse>

                   <return>

                            <entries>  ------可出现0~N次

                                     <key>字符串</key>

                                     <value>

                                               <color>字符串</color>

                                               <id>整数值</id>

                                               <name>字符串</name>

</vlaue>

                            </entries>

                   </return>

         </getAllCatsResponse>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值