一、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一般
  • 用于输入参数为复杂类型的因为该模式对每个输入参数都进行封装。

(一)WebService基础的更多相关文章

  1. WebService基础学习

    参考 WebService基础学习(一)—基础知识:http://www.cnblogs.com/yangang2013/p/5708647.html WebService基础学习(二)—三要素:ht ...

  2. WebService 基础知识点和用Postman调试

    阅读连接:Retrofit 用Soap协议访问WebService 详解 参考 1.java发HTTP POST请求(内容为xml格式) 2. android解析XML总结(SAX.Pull.Dom三 ...

  3. WebService基础学习(二)—三要素

    一.Java中WebService规范      JAVA 中共有三种WebService 规范,分别是JAX-WS.JAX-RS.JAXM&SAAJ(废弃).   1.JAX-WS规范    ...

  4. webService基础知识--认识WebService

    之前在找工作的时候,有面试官问到WebService,当时没有接触过,正好现在做的项目中有用到WebService,所以就趁着业余时间来学习了. 一.简介 先来看看百度百科对WebService的解释 ...

  5. WebService基础入门(转)

    一.概念: 1.WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用. 2.我们可以调用互联网上查询天气信息Web服务,然后 ...

  6. 一、WebService基础概念

    一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intrane ...

  7. WebService 基础使用&cxf第三方Service使用

    1.通过Jax-ws自己发布一个webservice 解析:用webservice发布HelloWorld JAX-WS本质就是通过Socket来实现的.2.WSDL文档描述如何直接变成java代码 ...

  8. C# WebService 基础实例

    1.整个Demo结构:如下图: 2.新建项目--选择asp.net web服务应用程序TestWebService 3.重新命名Service1.asmx为MyService.asmx 4.右键MyS ...

  9. WebService基础学习(三)—CXF

    一.什么是CXF?      Apache CXF = Celtix + Xfire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.Apache ...

随机推荐

  1. python 简化数据结构的初始化一

    写在前面 在it行业混了差不多十年了,懊悔自己开始写博客的时间太晚.有那么一天就开始写了,也不知道自己会不会坚持写下去.不知不觉日子过到了今天,回头看看,也算是坚持写了.现在写博客的感觉好奇怪,一天天 ...

  2. Oracle数据库的坑

    Oracle数据库爬过的坑 ORA-00918 未定义明确列 ORA-01861: 文字与格式字符串不匹配 DPI-1005 : unable to acquire Oracle environmen ...

  3. 【转载】 迁移学习简介(tranfer learning)

    原文地址: https://blog.csdn.net/qq_33414271/article/details/78756366 土豆洋芋山药蛋 --------------------------- ...

  4. 阶段5 3.微服务项目【学成在线】_day18 用户授权_15-细粒度授权-我的课程细粒度授权-实现

    先定义接口 实现接口 service 需要通过conpanyId去查询课程的列表 定义dao 要查课程的图片 名称 等相关信息.所以使用Mybatis来实现 定义Mapper 看这个dao里面方法在哪 ...

  5. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_02-用户认证-认证服务查询数据库-需求分析&搭建环境

    1.2 认证服务查询数据库 1.2.1 需求分析 认证服务根据数据库中的用户信息去校验用户的身份,即校验账号和密码是否匹配. 认证服务不直接连接数据库,而是通过用户中心服务去查询用户中心数据库. 完整 ...

  6. Mysql读写分离(Mycat版)

    (1).读写分离概述 1)工作原理 读写分离是让主数据库处理事务性增删改操作(insert.delete.update),让从数据库处理查询查询操作(select). 2)作用 1.分担负载 2.主从 ...

  7. iOS 点击空白处收回键盘的几个简单代码

    //收回键盘1 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view.subviews enumer ...

  8. 浏览器最小显示12px字体的解决方法

    今天做打印标签,发现浏览器最小字体限制了12px,标签那么小,12px随便几个字就给占满了: 最后通过  transform:scale(1,0.8) 搞定: 这个属性允许将元素移动.压缩.旋转:这里 ...

  9. Mysql coalesce()函数认识和用法

    Mysql coalesce()函数认识和用法   coalesce()解释:返回参数中的第一个非空表达式(从左向右):    鉴于在mysql中没有nvl()函数, 我们用coalesce()来代替 ...

  10. docker安装并持久化postgresql数据库

    安装docker步骤略过 1.拉取postgresql镜像 docker pull postgresql 2.创建本地卷,数据卷可以在容器之间共享和重用, 默认会一直存在,即使容器被删除(docker ...