(一)WebService基础

一、SOA架构

  •     先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构,
            既然说是一种架构的话,所以一般认为 SOA 是包含了运行环境,编程模型,
            架构风格和相关方法论等在内的一整套新的分布式软件系统构造方法和环境,
            涵盖服务的整个生命周期。而在 SOA 的架构风格中,服务是最核心的抽象手段。
            SOA 中的服务是构建在一些列基于开放标准的基础之上的,

            Web 服务定义了如何在异构系统之间实现通信的标准化方法,
            从而就使得 Web 服务可以跨越运行平台和实现语言,
            同时也使得 Web 服务成为了实现 SOA 中服务的主要技术。

 

二、WebService简介

  • WebServices  提供一个建立分布式应用的平台,使得运行在不同操作系统和不同设备上的软件,
  •         或者是用不同的程序语言和不同厂商的软件开发工具开发的软件,所有可能的已开发和部署的软件,
  •         能够利用这一平台实现分布式计算的目的。
  •         WebServices的思想是:使得应用程序也具有 Web 分布式编程模型的松散耦合性。

        2.1  WebServices的特点:      

   (1),WebServices 是自包含的。即在客户端不需要附加任何软件,只要客户机支持 HTTP 和XML 就 OK 了。

        (2),WebServices 是自我描述的。在客户端和服务端都不需要知道除了请求和响应消息的格式和内容外的任何事。

        (3),WebServices 是跨平台和跨语言的。客户端和服务端均可以在不同的平台和语言环境中实现,同时,不必为了支持 WebServices 而更改现有的代码。

        (4),WebServices 是基于开放和标准的。XML 和 HTTP 是WebServices 的主要技术基础,而 XML 和HTTP 早就成了业内标准了。

        (5),WebServices 是动态的。

        (6),WebServices 是可以组合的。也就是通过一个 WebService 访问另外一个 WebService 来达到组合的目的。通过组合 WebServices 便可以将简单的 WebServices 聚合成为实现更多复杂功能的复杂的服务。

        (7),WebServices 是松散耦合的。它完全解耦了客户端和服务端。

        (8),WebServices 提供编程访问的能力。换句话说,就是可以通过编写程序来访问Web 服务。

        (9),WebServices 是基于经过考验的成熟技术上构建的。比如 XML 和 HTTP。

        (10),WebServices 提供打包现有应用程序的能力。

        (11),WebServices 通过网络进行发布,查找和使用。

 

   2.2:  webservice的作用

        Web Service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。
        要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。

        Web Service平台也必须提供一种标准来描述Web Service,
            让客户可以得到足够的信息来调用这个Web Service。

 

   2.3:  webservice中的名词介绍

  •     与WebServices 相关的 J2EE 技术称为 JWS(Java WebServices),
  •     其中含有 JAX-WS、JAX-RS、JAXB、JAXR、SAAJ、StAX等技术。


    xml:   可扩展性标记语言。

    xsd
            XSD是指XML结构定义 ( XML Schemas Definition )
            XML Schema 是DTD的替代品。XML Schema语言也就是XSD。
            XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。
              一个XML Schema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值。
              XSD是DTD替代者的原因,一是据将来的条件可扩展,二是比DTD丰富和有用,三是用XML书写,四是支持数据类型,五是支持命名空间。
              XSD文件的后缀名为.xsd。
              XML Schema的优点:
              1) XML Schema基于XML,没有专门的语法
              2) XML可以象其他XML文件一样解析和处理
              3) XML Schema支持一系列的数据类型(int、float、Boolean、date等)
              4) XML Schema提供可扩充的数据模型。
              5) XML Schema支持综合命名空间
              6) XML Schema支持属性组。
    soap
            SOAP  即 Simple Object AccessProtocol 也就是简单对象访问协议。

            SOAP 呢,其指导理念是“唯一一个没有发明任何新技术的技术”,

            是一种用于访问 Web 服务的协议。

            因为 SOAP基于XML和HTTP ,其通过XML 来实现消息描述,然后再通过 HTTP 实现消息传输

SOAP 是用于在应用程序之间进行通信的一种通信协议。

            因为是基于 XML 和HTTP 的,所以其独立于语言,独立于平台,并且因为 XML 的扩展性很好,

            所以基于 XML 的 SOAP 自然扩展性也不差。

            通过 SOAP 可以非常方便的解决互联网中消息互联互通的需求,

    wsdl
            WSDL 即Web Services Description Language也就是 Web 服务描述语言。

            是基于 XML的用于描述 Web 服务以及如何访问 Web 服务的语言。

            服务提供者通过服务描述将所有用于访问 Web服务的规范传送给服务请求者,

            要实现 Web服务体系结构的松散耦合,服务描述是一个关键,

            不管是请求者还是服务提供者,通过服务描述便可以不必了解对方的底层平台,编程语言等,

            服务描述与底层的 SOAP  基础结构相结合,

            足以封装服务请求者的应用程序和服务提供者的 Web服务之间的这个细节。

            WSDL 描述了 Web服务的三个基本属性:

            (1)服务所提供的操作

            (2)如何访问服务

            (3)服务位于何处(通过 URL 来确定就 OK 了)

    jaxb/jaxp/jaxm
        在XML领域里,对XML文件的校验有两种方式:DTD校验、Schema校验。在Java中,
        对于XML的解析,有多种方式:DOM解析、SAX解析、StAX解析。
        结合XML和Java后,就产生了Bind技术,将XML和Java Bean进行相互转化。

1、JAXP,Java API for XML Processing。包括了对XML的解析、校验、查询、变换。

        1)解析,将XML解析成对应的内存对象,典型的如DOM解析中的Document。Java Se中目前提供的解析技术有:DOM、SAX、STAX。

        2)校验,Java Se目前支持DTD、Schema校验。

        3)查询,这里说的查询是指采用XPath方式查询。这部分有独立的API。至于DOM解析中根据节点的上下级关系的查找,不作为查询技术。由于XPath是W3c定义的关于XML的查询技术,所以XPath是针对DOM解析方式的。


 2、JAXB(Java API for XML Binding)

 XML元素跟Java对象之间的绑定。

3、  jaxm/saaj
 JAXM(Java API for XML Messaging简称JAXM)是为Java平台上的应用程序定义的API,
            用以通过XML(以及SOAP)发送和接收消息,支持同步消息和异步消息

 SAAJ(SOAP with Attachments API for JAVA) SAAJ是在松散耦合软件系统中利用SOAP协议实现的基于XML消息传递的API规范。
            顾名思义,SAAJ支持带附件的SOAP消息。

            JAXM 1.0的理念是通过提供消息传递和SOAP API,允许开发人员根据SOAP编写支持消息传递标准的业务应用程序。
            随着JAXM 1.1版的推出,SOAP API (javax.xml.soap)被分割成了SAAJ1.1规范和JAXM1.1,
            JAXM1.1只包含基于消息传递的API(javax.xml.messaging)。目前,正在使用的SAAJ版本是1.2。

 SAAJ是JAXM下的一个分支。

    jax-rpc/jax-ws/jax-rs

        支持 SOAP 的是JAX-RPC/JAX-WS方式,支持REST的是JAX-RS

 

  2.5  webservice的实现方式

 

  •     jax-ws/xfire/cxf/axis2等,本人使用的是jax-ws框架。

 

 

  2.5:分析rpc/document_ware/document_bare的不同的参数交互方式。


    rpc:@SOAPBinding(style = SOAPBinding.Style.RPC)

        RPC模式下,方法中的参数与返回值,直接定义在message元素中。
 <message name="add">
            <part name="x" type="xsd:int"/>
            <part name="y" type="xsd:int"/>
        </message>
        <message name="addResponse">
            <part name="addResult" type="xsd:int"/>
        </message>
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>

document_bare@SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
                 parameterStyle = SOAPBinding.ParameterStyle.BARE)

        注意点:bare模式下,webservice的方法只能有一个参数。

        Bare模式下,方法中的参数与返回值,直接在xsd文件中使用type来做声明。

        <message name="divide">
            //name为方法参数的名称   element为直接引用xsd中定义的元素。
            <part name="x" element="tns:x"/>
        </message>
        <message name="divideResponse">
            <part name="divideResult" element="tns:divideResult"/>
        </message>


        <xs:element name="divideResult" type="xs:int"/>
        <xs:element name="x" type="xs:int"/>


 document_warpper封装格式。message方法中可以传递多个参数。
        每一个参数都使用了封装类型。
        <xs:element name="add" type="tns:add" /> //tns:add又引用下面定义的complexType类型。
          <xs:element name="addResponse" type="tns:addResponse" />
          <xs:element name="divide" type="tns:divide" />
          <xs:element name="divideResponse" type="tns:divideResponse" />

         <xs:complexType name="add">
            <xs:sequence>
                <xs:element name="x" type="xs:int" />
                <xs:element name="y" type="xs:int" />
            </xs:sequence>
         </xs:complexType>

  • 简而言之,开发中普遍使用的rpc模式和document_wrapper模式,而rpc模式一般用于输入参数为基本类型,而document_wrapper一般
  • 用于输入参数为复杂类型的因为该模式对每个输入参数都进行封装。

 

posted @ 2017-10-10 16:07  shyroke、  阅读(250)  评论(0编辑  收藏  举报
作者:shyroke 博客地址:http://www.cnblogs.com/shyroke/ 转载注明来源~