Web Service&Soa&Esb入门介绍

  • 2,620 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • good !
    Are you sure you want to
    Your message goes here
  • thanks
    Are you sure you want to
    Your message goes here
  • thanks!
    Are you sure you want to
    Your message goes here
    Be the first to like this
No Downloads

Views

Total Views
2,620
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
110
Comments
3
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • So now that we’ve talked about the need for flexibility and reuse, let’s look at some of the barriers that sometimes prevent companies from getting to where they want to be. Again, let’s emphasize that the business can only be as flexible as the IT systems that support it. On the right, you’ll see an actual application architecture for a consumer electronics company. Current approaches to IT architecture do not support these drivers The text on the left all has to do with IT infrastructure that has grown bit by bit, over the years to handle focused issues with no recognizable roadmap. Linkages between pieces of this infrastructure tend to be inflexible and very difficult, expensive, and time-consuming to change.
  • If all your applications conform to the Web Services standards, you may only need an ESB focused on the integration of these standards-based interfaces. However, if not all your applications conform to the SOA standards, you may need something more advanced that can mediate between the SOA standards and everything else.

Transcript

  • 1. Web Service
  • 2. TOC
    • Web Service 的概念
      • SOAP
      • WSDL
      • REST vs XML-RPC vs SOAP vs …
      • DATA BINDING
      • WS-security
      • WS-Notification
      • WS-Transaction…..
    • 开发一个 WebService
      • XFire 1.x
      • Axis 1.x/2.x
      • 开发一个 Web Service 实例
    • WebService 相关技术
      • AJAX
      • JMS
      • BPEL
      • Grid
    • SOA
  • 3. 需要知道的知识
    • XML
    • HTTP/HTTPS
    • SCHEMA/DTD
  • 4. Web Service 的概念
  • 5. Web Service
    • Web 服务 (Web Service) 提供了一个在不同的应用和平台之间的交互操作标准。
    • 这个交互操作通过一系列基于 XML 的开放标准实现,包括 WSDL 、 SOAP 和 UDDI 等。这些标准提供了一系列通用方法来定义、发布和使用 Web Service 。
  • 6. Web Service 的基本层次结构 基础连接 : Internet 统一数据格式 : XML 服务操作协议 : SOAP 服务描述协议 : WSDL Simple, Open, Broad Industry Support 简单、开放、工业界广泛支持 服务发布协议 : UDDI UDDI : U niversal D escription D iscovery and I ntegration WSDL: W eb S ervice D escription L anguage SOAP : S imple O bject A ccess P rotocol
  • 7. 为什么需要 WebService Data Services Business Logic Services Presentation Services Data Services Web Services Presentation & Process Services browser browser 之前 之后 Client AP Mobile Device Legacy DBMS DBMS Name No. Zip State OK Cancel DBMS DBMS Name No. Zip State OK Cancel Name No. Zip State OK Cancel
  • 8. SOAP & WSDL
  • 9. SOAP 是什么?
    • SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。
    • SOAP 的概念最初来自于 Microsoft and Userland software ,它已经演化了好几代 ; 当前最新的规范是 SOAP 2.0 。由 W3C 组织制定。
  • 10. SOAP
    • SOAP 被广泛地认为是新一代跨平台和跨语言的分布式计算机应用的基础框架。
    • SOAP 1.1 只支持 HTTP POST 方式向终端提交请求。
    • SOAP 1.2 支持 HTTP POST 和 GET 两种方式。
  • 11. 四个主要组成部分
    • SOAP 是一个基于 XML 的轻量级规范,其主要使用在分布式系统中,由下面几个部分组成 :
      • SOAP 封装结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。
      • SOAP 编码规则定义了用以交换应用程序定义的数据类型的实例的一系列机制。
      • SOAP RPC 表示定义了一个用来表示远程过程调用和应答的协定。
      • 虽然这三个部分都作为 SOAP 的一部分一起描述,但它们在功能上是相交的。特别的,封装和编码规则是在不同的名域中定义的。规范定义了 SOAP 封装、 SOAP 编码规则和 SOAP-RPC 协定之外,这个规范还定义了 SOAP 和其他协议的绑定,描述了在有或没有 HTTP 扩展框架的情况下, SOAP 消息如何包含在消息中被传送。
  • 12. SOAP 消息结构
  • 13. SOAP 消息处理框架
    • SOAP 规范的核心部分就是消息处理框架。 SOAP 消息处理框架定义了一整套 XML 元素,用以“封装”任意 XML 消息以便在系统之间传输。
    • 该框架包括以下核心 XML 元素: Envelope 、 Header 、 Body 和 Fault ,所有这些都来自 SOAP 1.1 中的 http://schemas.xmlsoap.org/soap/envelope/ 命名空间。 以下代码中提供了 SOAP 1.1 的完整 XML 架构定义,以供在阅读下文时参考。
    • SOAP 1.1 XML 架构定义 : SOAP.xml
  • 14. SOAP Envelope 的结构
    • <soap:Envelope
    • xmlns:soap=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;>
    • <soap:Header> <!-- optional -->
    • <!-- header blocks go here... -->
    • </soap:Header>
    • <soap:Body>
    • <!-- payload or Fault element goes here... -->
    • </soap:Body>
    • </soap:Envelope>
  • 15. SOAP Envelope 的结构
    • 所有的 SOAP 消息都使用 XML 形式编码 , 一个 SOAP 应用程序产生的消息中,所有由 SOAP 定义的元素和属性中必须包括正确的域名。 SOAP 应用程序必须能够处理它接收到的消息中的 SOAP 域名,并且它可以处理没有 SOAP 域名的 SOAP 消息,就象它们有正确的名域一样。 SOAP 定义了两个名域 :
    • SOAP 封装的名域标志符是 &quot;http://schemas.xmlsoap.org/soap/envelope/&quot;
    • SOAP 的编码规则的名域标志符是 &quot;http://schemas.xmlsoap.org/soap/encoding/&quot;
  • 16. SOAP encodingStyle 属性
    • EncodingStyle 全局属性用来表示 SOAP 消息的序列化规则。这个属性可以在任何元素中出现,作用范围与域名声明的作用范围很相似,为这个元素的内容和它的所有没有重载此属性的子元素。 SOAP 消息没有定义缺省编码。属性值是一个或多个 URI 的顺序列表,每个 URI 确定了一种或多种序列化规则,用来不同程度反序列化 SOAP 消息,举例如下:
    • &quot;http://schemas.xmlsoap.org/soap/encoding/&quot;
    • &quot;http://my.host/encoding/restricted http://my.host/encoding/&quot;
    • &quot;&quot;
  • 17. 封装版本模型
    • SOAP 没有定义常规的基于主版本号和辅版本号的版本形式。 SOAP 消息必须有一个封装元
    • 素与名域 &quot;http://schemas.xmlsoap.org/soap/envelope/&quot; 关联。如果 SOAP 应用程序接收到的 SOAP 消息中的 SOAP 封装元素与其他的名域关联,则视为版本错误,应用程序必须丢弃这个消息。如果消息是通过 HTTP 之类的请求 / 应答协议收到的,应用程序必须回答一个 SOAP VersionMismatch 错误信息。
  • 18. Envelope 元素
    • Envelope 元素始终是 SOAP 消息的根元素。 这就便于应用程序识别“ SOAP 消息” — 只要检查一下根元素的名称即可。 通过检查 Envelope 元素的命名空间,应用程序也可确定所使用的 SOAP 版本。
    • Envelope 元素包含一个 可选的 Header 元素 , 后跟一个必要的 Body 元素。 Body 元素代表了该消息的有效内容。 它是一种通用容器,因为它可包含来自任何命名空间的任意数量的元素。 这就是试图发送数据的最终目的地。
  • 19. 例子 :
    • 在银行帐户之间转帐的请求信息 : request.xml
    • 相应的响应信息 : response.xml
  • 20. Fault 元素
    • 该消息处理框架还定义了一个名为 Fault 的元素,用于在发生错误时在 Body 元素中表示错误。 这是不可缺少的,因为如果没有一种标准的错误表示方法,每个应用程序将不得不自己创建,从而使得通用基础结构不可能区分成功和失败。 以下示例 SOAP 消息中包含了一个 Fault 元素,指明在处理该请求时发生了“ Insufficient Funds (资金不足)”错误: fault.xml
  • 21. Fault 元素
    • Fault 元素必须包含一个 faultcode ,后跟一个 faultstring 元素。 faultcode 元素使用一种符合命名空间的名称对错误进行分类,而 faultstring 元素提供一种对错误可读的解释(类似于 HTTP 的工作方式)。 表 2 简要地说明了 SOAP 1.1 所定义的各种错误码(所有这些代码都包含在 http://schemas.xmlsoap.org/soap/envelope/ 命名空间中)。
    • Fault 元素也可能包含一个 detail 元素,以便提供该错误的细节,这样可以帮助客户端诊断问题,特别是在 Client 和 Server 错误码的情况下。
  • 22. SOAP 1.1 错误码
    • VersionMismatch
    • 处理方发现 SOAP Envelope 元素的命名空间是无效的
    • MustUnderstand
    • 处理方没有理解或服从 SOAP Header 元素的某个直接子元素,而该子元素包含一个值为 “ 1” 的 SOAP mustUnderstand 属性。
    • Client
    • 表明消息的格式错误或者不包含适当的信息,因而不能成功。 这通常表明,如果不对该消息做出更改,就不应该重发该消息。
    • Server
    • 表明该消息未能得到处理的原因与消息的内容并没有直接关系,而是跟该消息的处理有关。 例如,处理过程可能包括与某个上游处理器的通信,但该处理器没有响应。 如果在稍后重发,该消息可能会成功。
  • 23. Soap Header
    • 大多数现有的协议都区分控制信息(例如,标头)和消息有效负载。 在这方面, SOAP 也不例外。 SOAP Header 和 Body 元素在易于处理的 XML 世界中也进行同样的区分。 除了易用性之外,可扩展 Envelope 的关键优势在于它可用于任何通讯协议。
    • 在各种应用程序协议中(如 HTTP 、 SMTP 等)标头总是具有重要的意义,因为标头允许连网两端的应用程序就所支持命令的具体行为进行协商。 尽管 SOAP 规范本身并不定义任何内置的标头,标头将逐渐在 SOAP 中扮演同等重要的角色。
    • 与 Body 元素类似, Header 元素是控制信息的通用容器。 其中可包含来自任何命名空间(除 SOAP 命名空间之外)的任意数量的元素。 放置在 Header 元素中的各个元素被称为 标头块。 如同其他协议一样,标头块中包含的信息应该能够影响有效负载的处理。 因此,这里正适于放置诸如凭证一类的元素,以帮助控制对操作的访问: header.xml
    • 2: 我们也可以利用一个名为 mustUnderstand 的全局 SOAP 属性对标头块进行标注,以指明接收方在处理该消息之前是否需要理解标头 : mustunderstand.xml.
  • 24. Soap Body
    • SOAP 体元素( Body )提供了一个简单的机制,使消息的最终接收者能交换必要的信息。使用体元素的典型情况包括配置 RPC 请求和错误报告。体元素编码为 SOAP 封装元素的直接子元素。
    • 如果已经有一个头元素,那么体元素必须紧跟在头元素之后,否则它必须是 SOAP 封装元素的第一个直接子元素。体元素的所有直接子元素称作体条目,每个体条目在 SOAP 体元素中编码为一个独立的元素。条目的编码规则如下:
    • 一个条目由它的元素全名(包括名域 URI 和局部名)确定。 SOAP 体元素的直接子元素可能是名域限制的。
  • 25. 协议绑定
    • SOAP 可以和很多传输协议进行绑定 :
      • SOAP over HTTP/HTTPS GET/POST
      • SOAP over JMS
      • SOAP over SMTP
      • SOAP over RPC
    • 一种具体的协议绑定准确地定义了应该如何利用给定的协议来传输 SOAP 消息。 换言之,它详细定义了 SOAP 如何适用于另一协议的范围,该协议很可能具有自己的消息处理框架以及多种标头。 协议绑定实际所定义的内容很大程度上取决于该协议的功能和选项。 例如,针对 HTTP 的协议绑定应很大程度不同于针对 JMS 或针对 SMTP 的协议绑定。
  • 26. SOAP 类型
    • 如今有两种基本类型的 SOAP 消息处理: 文档和 RPC 。文档类型指出主体只是包含一个 XML 文档,而发送方和接收方都必须遵循该文档的格式。 另一方面, RPC 类型指出主体中包含某个方法调用的 XML 表示,正如刚才所述。
    • 两种方法可用于确定如何将数据序列化到主体中: 使用 Literal 文字的 XML 架构定义和使用 SOAP 编码规则 Encoding 。 利用前一种方法,架构定义逐字确定了主体的 XML 格式,不具有二义性。 然而,利用后一种方法, SOAP 处理器必须在运行时遍历各种 SOAP 编码规则以确定主体正确的序列化。 很显然,这种方法更易于导致错误和互操作性方面的问题。
    • 最常见的情形是在使用文档类型时也使用文字架构定义(称为 文档 / 文字 ),以及在使用 SOAP 编码规则时使用 RPC 类型(称为 rpc/ 编码 )。 文档 / 编码和 rpc/ 文字也是可能的,但并不常见,也没有太大意义。 大多数 Web 服务平台都集中于文档 / 文字类型,将其作为发展的主要用例,且是现今 Microsoft ASP.NET WebMethod 框架的默认设置。
  • 27. HTTP 绑定
    • HTTP 协议绑定定义了在 HTTP 上使用 SOAP 的规则。 SOAP 请求 / 响应自然地映射到 HTTP 请求 / 协议模型。
  • 28. SOAP RPC 绑定
    • 尽管 SOAP 规范已日渐远离对象,它仍然定义了一种约定,以便利用上述的消息处理框架来封装并交换 RPC 调用。 定义一种标准的方法将 RPC 调用映射到 SOAP 消息,这使得在运行时基础结构可以在方法调用和 SOAP 消息之间自动转换,而不用围绕 Web 服务平台重新设计代码。
    • 要利用 SOAP 进行方法调用,基础结构需要以下信息:
    • 终结点位置 (URI)
    • 方法名称
    • 参数名称 / 值
    • 可选的方法签名
    • 可选的标头数据
  • 29. SOAP RPC 绑定
    • RPC 调用: double add(ref double x, double y)
    • Request 对象:
    • struct add {
    • double x;
    • double y;
    • }
    • <add>
    • <x >33</x>
    • <y>44</y>
    • </add>
    • Response 对象:
    • struct addResponse {
    • double result;
    • }
    • <addResponse>
    • <result>77</result>
    • </addResponse>
  • 30. SOAP RPC
    • SOAP 文档内容
      • <soap:envelope>
      • <soap:body>
      • < myMethod >
      • <x>5</x>
      • </myMethod>
      • </soap:body>
      • </soap:envelope>
  • 31. 服务调用 前置机 SOAP 消息 HTTP HTTP WSDL2JAVA SOAP 消息 Class Operation XML Message 服务描述 CONTEXT XML2JAVA XML Message
  • 32. 实现 SOAP 的容器
    • XFIRE 1.x
    • Apache AXIS 1.x/2.x
    • SOAPLite
    • ……
  • 33. WSDL 描述 web 服务的三个基本属性:
    • 服务做些什么 ?
      • 服务所提供的操作 ( 方法 ) ;
    • 如何访问服务?
      • 数据格式以及访问服务操作的必要协议;
    • 服务位于何处?
      • 由特定协议决定的网络地址,如 URL 。
  • 34. WSDL 是什么?
    • 服务主要通过六个元素进行定义
      • types , 定义了交换信息的数据格式。
      • message , 传输消息的抽象定义。一个消息含有多个逻辑部分,每一部分和一些类型相关联。
      • portType , 一些 抽象操作的集合 。每个操作关联一个输入消息和一个输出消息。
      • binding , 针对操作和 portType 中使用的消息指定实际的协议和数据格式规范。
      • port , 指定一个绑定的地址,这样定义一个通信的终端。
      • service , 一些 port 构成的集合
  • 35. WSDL 定义
    • WSDL 是 XML 描述的网络服务,基于消息机制、包含面向文本或面向过程信息的操作集合。
    • 操作及消息的抽象定义与它们具体的网络实现和数据格式绑定是分离的 , 这样就可以重用这些抽象定义。
    • 消息是需要交换数据的抽象描述;
    • 端点类型是操作的抽象集合。
    • 针对一个特定端点类型的具体协议和数据格式规范构成一个可重用的绑定。
    • 一个端点定义成网络地址和可重用的绑定的联接,端点的集合定义为服务。
  • 36. 服务接口定义和服务实现定义
    • 服务接口 组成了服务描述中的可重用部分,
      • type 元素、 message 和 portType 。
      • types 元素中描述消息中复杂数据类型的使用。
      • message 元素指定 XML 数据类型组成消息的各个部分。 message 元素用于定义操作的输入和输出参数。
      • portType 元素中定义了 Web 服务的操作。操作定义了输入和输出数据流中可以出现的 XML 消息。
  • 37. 服务接口定义和服务实现定义
    • 服务实现 定义是一个描述给定服务提供者如何实现特定服务接口的 WSDL 文档。
      • 有 binding 和 services 。
      • binding 元素描述特定服务接口的协议、数据格式、安全性和其它属性。
      • service 元素。服务元素包含一组 port 元素。端口将端点与来自服务接口定义的 binding 元素关联起来。
  • 38.
    • WSDL 是一种 XML 应用 , 它将 Web Services 描述定义为一组 服务访问端点 ,客户端可以通过这些服务访问端点对包含面向文档信息或面向过程调用的服务进行访问。
    • WSDL 首先对 访问的操作 和访问时使用的 请求/响应消息 进行抽象描述,然后将其绑定到具体的传输协议和消息格式上,以最终定义具体部署的服务访问端点。
    • 在具体使用中,可以使用任意的消息格式和网络协议。
    • 在 WSDL 规范 中,定义了如何使用 SOAP 消息格式、 HTTP GET / POST 消息格式以及 MIME 格式来完成 Web Services 交互的规范。
  • 39. WSDL 文档框架
    • <wsdl:definitions name=&quot;nmtoken&quot; targetNamespace=&quot;uri&quot;>
    • <import namespace=&quot;uri&quot; location=&quot;uri&quot;/>*
    • < wsdl:types > ……</wsdl:types>
    • < wsdl:message name=“nmtoken”>*
    • …… </wsdl:message>
    • < wsdl:portType name=&quot;nmtoken&quot;>*
    • …… </wsdl:portType>
    • < wsdl:binding name=&quot;nmtoken&quot; type=&quot;qname&quot;>*
    • …… </wsdl:binding>
    • < wsdl:service name=&quot;nmtoken&quot;>*……</wsdl:service>
    • </wsdl:definitions>
  • 40. types 元素
    • <wsdl:types>
    • <wsdl:documentation .... />
    • <xsd:schema .... />*
    • <-- extensibility element --> *
    • </wsdl:types>
  • 41. message 元素
    • <wsdl:message name=&quot;nmtoken&quot;> *
    • <wsdl:documentation .... />
    • <part name=&quot;nmtoken&quot;
    • element=&quot;qname&quot; type=&quot;qname&quot;/> *
    • </wsdl:message>
  • 42. portType 元素 -- 抽象操作的集合
    • <wsdl:portType name=&quot;nmtoken&quot;>*
    • <wsdl:documentation .... />
    • <wsdl:operation name=&quot;nmtoken&quot;>*
    • <wsdl:documentation .... />
    • <wsdl:input name=&quot;nmtoken&quot; message=&quot;qname&quot;>
    • <wsdl:documentation .... />
    • </wsdl:input>
    • <wsdl:output name=&quot;nmtoken&quot; message=&quot;qname&quot;>
    • <wsdl:documentation .... />
    • </wsdl:output>
    • <wsdl:fault name=&quot;nmtoken&quot; message=&quot;qname&quot;> *
    • <wsdl:documentation .... />
    • </wsdl:fault>
    • </wsdl:operation>
    • </wsdl:portType>
  • 43. binding 元素
    • <wsdl:binding name=&quot;nmtoken&quot; type=&quot;qname&quot;>*
    • <wsdl:documentation .... />?
    • <-- extensibility element --> *
    • <wsdl:operation name=&quot;nmtoken&quot;>*
    • <wsdl:documentation .... /> ?
    • <-- extensibility element --> *
    • <wsdl:input> ?
    • <wsdl:documentation .... /> ?
    • <-- extensibility element -->
    • </wsdl:input>
    • <wsdl:output> ?
    • <wsdl:documentation .... /> ?
    • <-- extensibility element --> *
    • </wsdl:output>
    • <wsdl:fault name=&quot;nmtoken&quot;> *
    • <wsdl:documentation .... /> ?
    • <-- extensibility element --> *
    • </wsdl:fault>
    • </wsdl:operation>
    • </wsdl:binding>
  • 44. service 元素
    • <wsdl:service name=&quot;nmtoken&quot;> *
    • <wsdl:documentation .... />?
    • <wsdl:port name=&quot;nmtoken&quot; binding=&quot;qname&quot;>*
    • <wsdl:documentation .... /> ?
    • <-- extensibility element -->
    • </wsdl:port>
    • <-- extensibility element -->
    • </wsdl:service>
  • 45. 类型
    • types 元素包含了交换消息的数据类型定义。为了实现最大的互操作性( interoperability )和平台中立性( neutrality ), WSDL 选用 XML Schema DataTypes ,简称 XSD 作为标准类型系统,并将它作为固有类型系统。
    • <definitions .... >
    • <types>
    • <xsd:schema .... />*
    • </types>
    • </definitions>
  • 46. 类型— XSD 编码抽象数据类型建议
    • 使用元素( element )形式,而不使用属性 (attribute) 形式;
    • 不包括仅在特殊的协议和数据格式中使用的元素或者属性;
    • 数组类型使用 Soap:Array 类型,并使用 ArrayOfXXX 作为数组类型的名;
    • 使用 XSD 编码表示 xsd:anyType 。
  • 47.
    • <types>
    • <schema…>
    • <element name=&quot;PO&quot; type=&quot;tns:POType&quot;/>
    • <complexType name=&quot;POType&quot;>
    • <element name=&quot;id&quot; type=&quot;string/>
    • <element name=&quot;name&quot; type=&quot;string&quot;/>
    • <element name=&quot;items&quot;>
    • <complexType>
    • <element name=&quot;item&quot; type=&quot;tns:Item&quot; minOccurs=&quot;0“
    • maxOccurs=&quot;unbounded&quot;/>
    • </complexType>
    • </element>
    • </complexType>
    • <complexType name=&quot;Item&quot;>
    • <element name=&quot;quantity&quot; type=&quot;int&quot;/>
    • <element name=&quot;product&quot; type=&quot;string&quot;/>
    • </complexType>
    • <element name=&quot;Customer&quot; type=&quot;tns:CustomerType&quot;/>
    • <complexType name=&quot;CustomerType&quot;>
    • <element name=&quot;name&quot; type=&quot;string&quot;/>
    • </complexType>
    • </schema>
    • </types>
  • 48. 消息
    • 消息由若干个逻辑部件( part )构成。每个部件使用一个消息类型属性与某个类型系统的类型相关联。
    • 消息定义语法如下:
    • <definitions .... >
    • <message name=&quot;nmtoken&quot;> *
    • <part name=&quot;nmtoken&quot;
    • element=&quot;qname&quot;? type=&quot;qname&quot;?/> *
    • </message>
    • </definitions>
    • 消息 (message)name 属性指定了消息的名称。
    • 如果消息具有多个逻辑单位,则需要使用多个 part 元素。
  • 49. 消息示例
    • <message name=&quot;PO&quot;>
    • <part name=&quot;po&quot; element=&quot;tns:PO&quot;/>
    • <part name=&quot;customer&quot; element=&quot;tns:Customer&quot;/>
    • </message>
    • <message name=&quot;P1&quot;>
    • <part name=“address&quot; type=“XSD:string&quot;/>
    • </message>
    • <message name=&quot;P2&quot;>
    • <part name=&quot;composite&quot; type=&quot;tns:Composite&quot;/>
    • </message>
  • 50. 端口类型定义
    • 端口类型是一个由抽象操作和抽象消息构成的有名称的集合。
    • <wsdl:definitions .... >
    • <wsdl:portType name=&quot;nmtoken&quot;> *
    • <wsdl:operation name=&quot;nmtoken&quot;>
    • <wsdl:input name=&quot;nmtoken&quot;? message=&quot;qname&quot;/>
    • <wsdl:output name=&quot;nmtoken&quot;? message=&quot;qname&quot;/>
    • <wsdl:fault name=&quot;nmtoken&quot; message=&quot;qname&quot;/>*
    • </wsdl:operation>
    • </wsdl:portType >
    • </wsdl:definitions>
    • 端口类型定义的 name 属性表示端口类型名称,操作定义的 name 属性表示操作名称。
  • 51. 操作
    • WSDL 支持 4 种消息交换方式,来访问服务端点。
      • 单向( One-way ):服务访问端点接收消息;
      • 请求响应( Request-response ):服务访问端点接收请求消息,然后发送响应消息;
      • 要求应答( Solicit-response ):服务访问端点发送要求消息,然后接收应答消息;
      • 通知( Notification ):服务访问端点发送通知消息。
    • 操作中引用到的消息通过 message 属性指定。
  • 52. 单向操作
    • 单向操作语法:
    • <wsdl:definitions .... >
    • <wsdl:portType .... > *
    • <wsdl:operation name=&quot;nmtoken&quot;>
    • <wsdl:input name=&quot;nmtoken&quot;? message=&quot;qname&quot;/>
    • </wsdl:operation>
    • </wsdl:portType >
    • </wsdl:definitions>
    • input 元素指定用于单向操作的抽象消息格式。
  • 53. 请求响应操作
    • 请求响应操作语法
    • <wsdl:definitions .... >
    • <wsdl:portType .... > *
    • <wsdl:operation name=&quot;nmtoken&quot;
    • parameterOrder=&quot;nmtokens&quot;>
    • <wsdl:input name=&quot;nmtoken&quot;? message=&quot;qname&quot;/>
    • <wsdl:output name=&quot;nmtoken&quot;? message=&quot;qname&quot;/>
    • <wsdl:fault name=&quot;nmtoken&quot; message=&quot;qname&quot;/>*
    • </wsdl:operation>
    • </wsdl:portType >
    • </wsdl:definitions>
  • 54. 要求应答操作
    • 要求应答操作语法
    • <wsdl:definitions .... >
    • <wsdl:portType .... > *
    • <wsdl:operation name=&quot;nmtoken&quot;
    • parameterOrder=&quot;nmtokens&quot;>
    • <wsdl:output name=&quot;nmtoken&quot;? message=&quot;qname&quot;/>
    • <wsdl:input name=&quot;nmtoken&quot;? message=&quot;qname&quot;/>
    • <wsdl:fault name=&quot;nmtoken&quot; message=&quot;qname&quot;/>*
    • </wsdl:operation>
    • </wsdl:portType >
    • </wsdl:definitions>
  • 55. 通知操作
    • 通知操作语法
    • <wsdl:definitions .... >
    • <wsdl:portType .... > *
    • <wsdl:operation name=&quot;nmtoken&quot;>
    • <wsdl:output name=&quot;nmtoken&quot;?
    • message=&quot;qname&quot;/>
    • </wsdl:operation>
    • </wsdl:portType >
    • </wsdl:definitions>
  • 56. 操作中的元素名称
    • 如果单向操作和通知操作未指定 name 属性,则该属性名默认为是操作名。
    • 如果请求响应或要求应答操作中未指定 name 属性,则该属性名默认为是
      • 操作名 +“Request”/“Responese”/“Solicit” 。
    • 针对于请求应答和要求应答操作可以通过 parameterOrder 指定一个参数名列表。该属性的值是一个用空格分开的消息构件名序列 。
  • 57. 绑定
    • 绑定语法如下:
    • <wsdl:definitions .... >
    • <wsdl:binding name=&quot;nmtoken&quot; type=&quot;qname&quot;> *
    • <-- extensibility element (1) --> *
    • <wsdl:operation name=&quot;nmtoken&quot;> *
    • <-- extensibility element (2) --> *
    • <wsdl:input name=&quot;nmtoken&quot;? > ?
    • <-- extensibility element (3) -->
    • </wsdl:input>
    • <wsdl:output name=&quot;nmtoken&quot;? > ?
    • <-- extensibility element (4) --> *
    • </wsdl:output>
    • <wsdl:fault name=&quot;nmtoken&quot;> *
    • <-- extensibility element (5) --> *
    • </wsdl:fault>
    • </wsdl:operation>
    • </wsdl:binding>
    • </wsdl:definitions>
  • 58. 服务
    • public class myServices {
    • public void myMethod (int x){
    • return
    • }
    • }
  • 59. rpc/encoded 样式
    • WSDL 文档内容
      • <message name=&quot; myMethodRequest &quot;>
      • <part name=&quot;x&quot; type=&quot;xsd:int&quot;/>
      • </message>
      • <message name=&quot;empty&quot;/>
      • <portType name=&quot;PT&quot;>
      • <operation name=&quot;myMethod&quot;>
      • <input message=&quot; myMethodRequest &quot;/>
      • <output message=&quot;empty&quot;/>
      • </operation>
      • </portType>
  • 60. rpc/encoded 样式
    • SOAP 文档内容
      • <soap:envelope>
      • <soap:body>
      • <myMethod>
      • <x xsi:type =&quot; xsd:int &quot;>5</x>
      • </myMethod>
      • </soap:body>
      • </soap:envelope>
  • 61. 2 rpc/literal 样式
    • WSDL 文档内容
      • <message name=&quot; myMethodRequest &quot;>
      • <part name=&quot;x&quot; type=&quot;xsd:int&quot;/>
      • </message>
      • <message name=&quot;empty&quot;/>
      • <portType name=&quot;PT&quot;>
      • <operation name=&quot;myMethod&quot;>
      • <input message=&quot; myMethodRequest &quot;/>
      • <output message=&quot;empty&quot;/>
      • </operation>
      • </portType>
  • 62. 2 rpc/literal 样式
    • SOAP 文档内容
      • <soap:envelope>
      • <soap:body>
      • < myMethod >
      • <x>5</x>
      • </myMethod>
      • </soap:body>
      • </soap:envelope>
  • 63. 3 document /encoded
    • WSDL 文档内容
    • <types>
    • <schema>
    • <element name=&quot;xElement&quot; type=&quot;xsd:int&quot;/>
    • </schema>
    • </types>
    • <message name=&quot; myMethodRequest &quot;>
    • <part name=&quot;x&quot; element=&quot;xElement&quot;/>
    • </message>
    • <message name=&quot;empty&quot;/>
    • <portType name=&quot;PT&quot;>
    • <operation name=&quot; myMethod &quot;>
    • <input message=&quot; myMethodRequest &quot;/>
    • <output message=&quot;empty&quot;/>
    • </operation>
    • </portType>
  • 64. 3 document /encoded
    • SOAP 文档内容
    • <soap:envelope>
    • <soap:body>
    • <xElement xsi:type =&quot; xsd:int &quot;>5</xElement>
    • </soap:body>
    • </soap:envelope>
  • 65. 4 . document /literal
    • WSDL 文档内容
    • <type>
    • <schema>
    • <element name=&quot;xElement&quot; type=&quot;xsd:int&quot;/>
    • </schema>
    • </types>
    • <message name=&quot; myMethodRequest &quot;>
    • <part name=&quot;x&quot; element=&quot;xElement&quot;/>
    • </message>
    • <message name=&quot;empty&quot;/>
    • <portType name=&quot;PT&quot;>
    • <operation name=&quot; myMethod &quot;>
    • <input message=&quot; myMethodRequest &quot;/>
    • <output message=&quot;empty&quot;/>
    • </operation>
    • </portType>
  • 66. 4 . document /literal
    • SOAP 文档内容
    • <soap:envelope>
    • <soap:body>
    • <xElement>5</xElement>
    • </soap:body>
    • </soap:envelope>
  • 67. Sample WSDL
    • sample.wsdl
  • 68. 开发 Web Service XFire1.2.1
  • 69. 什么是 XFire? http://xfire.codehaus.org
  • 70. XFire 简介
    • XFire 是下一代的 java SOAP 框架。 XFire 通过一些简单的 API 和对规范的支持使得 面向服务的开发 成为可能。
    • XFire 性能非常好,它是建立在低内存的 StAX 模型的基础上的。
  • 71. 特性和目标
    • 支持主要的 Web Service 标准—— SOAP, WSDL, WS-I Basic Profile, WS-Addressing, WS-Security, 等等 .
    • 高性能的 SOAP 栈
    • 可插入式地绑定对 POJOs, XMLBeans, JAXB 1.1, JAXB 2.0, and Castor 的支持。
    • 可运行在 Java 5 和 1.4 平台
    • 支持多种传输协议 - HTTP, JMS, XMPP, In-JVM, 等等 .
    • 简单易用的 API
    • 支持 Spring, Pico, Plexus, and Loom 等框架 .
    • 支持 JBI
    • 支持客户端和服务器端接口自动生成
    • 支持 JAX-WS
  • 72. 在 XFire 下开发 Web Service Step by step
  • 73. 第一步:下载 XFire
    • http://xfire.codehaus.org/Download
    • 下载 xfire-distribution-1.2.1.zip
    • 压缩包解压
  • 74. 第二步:建立工程
    • 新建 web 工程,命名为 xfire 。
    • 将 xfire-1.2.1lib 下面的包和 xfire-1.2.1xfire-all-1.2.1.jar 一起拷贝到新建的 web 工程 WEB-INFlib 下面。
  • 75. 修改 web.xml 文件
    • 增加如下内容
    • < servlet >
    • < servlet-name > XFireServlet </ servlet-name >
    • < display-name > XFire Servlet </ display-name >
    • < servlet-class >
    • org.codehaus.xfire.transport.http.XFireConfigurableServlet
    • </ servlet-class >
    • </ servlet >
    • < servlet-mapping >
    • < servlet-name > XFireServlet </ servlet-name >
    • < url-pattern > /servlet/XFireServlet/* </ url-pattern >
    • </ servlet-mapping >
    • < servlet-mapping >
    • < servlet-name > XFireServlet </ servlet-name >
    • < url-pattern > /services/* </ url-pattern >
    • </ servlet-mapping >
  • 76. 编写 WebService 服务器端代码
    • 在 src 下新建包 org.codehaus.xfire.demo
    • 编写 Book.java
    • 编写 BookService.java
    • 编写 BookServiceImpl.java
    • BookService.aegis.xml
  • 77. 编写 Handler
    • 新建包 org.codehaus.xfire.demo.handlers
    • 编写 CheckVersionHandler.java
    • 编写 OutHeaderHandler.java
  • 78. 编写 WebService 配置文件
    • 在 src 下新建 log4j.properties 文件。
    • 在 src 下新建目录 META-INF/xfire/
    • 在 META/xfire/ 下新建文件 services.xml
  • 79. 编写客户端测试代码
    • BookClient.java
  • 80. 发布 WebService
    • 右键点击 xfire 选择 MyEclipse->Add and Remove Project Deployment ,将 xfire 发布到 Tomcat 上去。
  • 81. 查看自动生成的 WSDL
    • 打开 ie ,键入 http://localhost : 8080/xfire/services/BookService? wsdl
  • 82. 自动生成的 WSDL
  • 83. 运行客户端程序
    • 右键点击 BookClient.java
    • 选择 Run As…->Java Application
    • 由于首次运行需要初始化,所以运行较慢,会报几个延时错误后才会显示结果。
  • 84. 客户端运行显示结果
  • 85. 语义 Web & Web 服务 & SOA
  • 86. Web
    • Web 可以获得如此巨大的发展,一个很重要的原因就是 HTML 的简单、易用;
    • Yahoo 的发展和出现得益于其网页目录 .
    • Google 的出现可以处理海量的网页信息 .
  • 87. 语义 Web
    • 从学术的角度,一个可以准确有效搜索、推理的 Web 应该是一个语意的 Web ,即结构化的和有意义的 Web ;
    • 目前数十亿的页面不可能消失或者重建。
    • 一个可行的方法 : 包装已有信息,给已有信息增加语意的说明,即元数据,例如标签( Tag 或 Annotation )。
    • 从这个意义和角度, Google Toolbar 的书签服务, Yahoo 收购 del.icio.us 就可以理解,大家要做的是一样的事情,都是为了提供更好的搜索结果,而不是简单的提供书签服务。
  • 88. 从搜索角度看
    • 自然语言提问 , 系统自动找到答案
    • 系统有一个知识库 , 知识来源可以是网页
    • 知识区分领域
  • 89. 语义 Web
    • 学术界和业界提出了语意 Web ( Semantic Web )的概念,简单来说,就是扩展现有 Web ,使 Web 页不仅仅是供信息表达的手段,而且可以自描述,具有语意,而更好的搜索 http://del.icio.us 和互操作。
  • 90. SOA
    • 为了更快更有效地响应变化莫测的市场机会,所有行业的公司都在想方设法进行这方面的努力。为获得更高的业务灵活性,许多公司都在实施 面向服务的架构 (SOA) 。
    • SOA 的灵活性体现在它将业务流程和相关的 IT 基础设施中的元素看作安全的、标准化的组件(服务),通过对这些组件(服务)进行重用和组合,即可应对不断变化的业务目标和业务优先级。
  • 91. 当企业系统越来越多后
    • 缺少业务流程标准
    • 架构策略限制
    • 独立的程序业务需要
    • 基础设施的构建没有蓝图
  • 92. 从不同的组件中创建服务 DFK Data Warehouse General Ledger AP Sales Corrections PO Receiving Return to Vendor Warehouse Management Credit App Employee Change Notice OTHER APPS - PC ACCTS REC APPS - PC INVENTORY CONTROL APPS - PC INVENTORY CONTROL APPS - PC Journal Entry Tool Kit Scorecard Resource Scheduling P09 - P17 Cyb. Millennium Millennuim 3.0 Banks - ACH and Pos to Pay Cobra Stock Status Polling On-line New Hire Entry CTS Plan Administrators (401K, PCS, Life) D01 Post Load Billing Home Deliveries - Transfers Planning Purchase Order Solution Software Inventory Info Interface Sales Posting Price Management System Cycle Physical Inventory SKU Information Customer Repair Tracking I35 Early Warning System Merchandise Analysis I13- Auto Replenishment CTO Intercept Counts Employee Purchase Tex A ACH Stock Options Customer Perceived In-Stock Tx SS Capital Projects Fixed Assets Recon File Repair EDI Coordinator Mesa Data NEW Soundscan Resumix Op. Store Budget Reporting Tally Sheet Cash Receipts/Credit House Charges Ad Expense -Promo Analysis Price Marketing Support BMP - Bus performance Mngt Store Scorecard Price Testing Media Bonus/HR Hand Scan Apps Shows POS Sales Tax A04 - Cust Refund Chks Equifax Credit Cellular Rollover Satellite System Scanning VAN SKU Rep Host to AS400 Communication Layaways Bus Systems V04-Sign System Count Corrections N. P01- Employee Masterfile Customer Order ABC Co Universal Account Reconcilliation Depository Banks Cell Phones - ISP Tracking AAS PO Cash Over/ Short Coop SKU Selection Tool SKU Performance Supplier Compliance 1 DRK ABBX Misc Accounting/Finance Apps - PC/NT AIMS Mngr Approval Batch Forcasting Ad Measurement AIMS Reporting Ad Launcher Mkt Reactions Spec Source website Rebate Transfer Sign System Writer Workspace PowerSuite Store Monitor Calendar Stores & Mrkts Due Dates Smart Plus Insertions Orders Budget Analysis Tool Print Costing Invoice App Reports Broadcast Filter Smart Plus Launcher General Maintenance Printer PO Printer Maintenance Vendor Maintenance Vendor Setup Connect 3 Connect 3 Reports Connect 3 PDF Transfe Spec Source SKU Tracking S20-Sales Polling Prodigy PSP In-Home Repair Warranty Billing System Process Servers (Imaging) 找到服务的组件 Step 2 Step 1 定义业务服务- SOA 的基本组成者 重复上述过程 Step 4 Step 3 定义接口
  • 93. 现在,像实施服务一样实施应用… 确定客户资格 获得信用报告 请求附加信息 Generate decline 等等… Etc…. 通过整合服务实现业务流程
  • 94. Web 服务减少了应用间的接口… 从这样 … … 变成这样 (web 服务 ). 应用程序
    • 业务应用和接口是可重用的
    • 减少业务应用中间的接口
    • 减少接口的数目和复杂度
    • 对应用接口有丰富的业务描述
    但是分别独立的连接还是会导致接口之间的限制… 接 口 = interface 应用服务 应用程序 应用程序 应用程序 应用程序 应用程序 应用程序 应用程序 接 口 接 口 接 口 接 口 接 口 接 口 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务
  • 95. 企业服务总线更好地减少了接口… 结果  快速的业务相应
    • 允许动态的选择,置换和匹配
    • 让你找到可以重用的应用和接口
    • 减弱接口间点到点的连接
    • 使应用之间的形成联结或解散联结更灵活
    … 变成这样 (SOA) 企业服务总线 ESB 从这样 (web 服务 ) … 接 口 接 口 接 口 接 口 接 口 接 口 接 口 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务 应用服务
  • 96. 什么是企业服务总线? 企业服务总线( Enterprise Service Bus ) 是一个整合应用和服务的灵活的连接基础组织。 ESB 减少了你的 SOA 体系中的接口的数量,大小和复杂度。
    • 转化 请求者和服务之间的传输协议
    • 处理 分离资源间的业务事件
    • 转换 请求者和服务之间的消息格式
    • 路由 服务间的消息
    形状 = 协议 颜色 = 数据类型 ESB 在请求者和服务之间实现了:
  • 97. ESB 使你关注于核心业务多过 IT 旅行预定过程 有效班机 服务 企业服务总线 新检查旅行服务 定酒店 服务 有效酒店 服务 定车服务 新的有效 班机服务 旧的有效 班机服务 定机票 服务 检查信用 服务 改变服务并且对已经存在的服务造成最小的影响 快速添加新的服务
  • 98. 如果你的应用符合 Web 服务标准… 如果你的应用并不完全符合 Web 服务标准… … 这样你需要 ESB 就要关注在基于标准的服务整合。 … 这样你需要高级 ESB 关注在对已有的非服务形式的应用的整合。 企业服务总线 1 2 高级企业服务总线 旅行预定过程 有效班机 服务 检查旅行服务 定酒店 服务 有效酒店 服务 定车服务 定机票 服务 检查信用 服务 旅行预定过程 有效班机 服务 检查旅行服务 定酒店 服务 有效酒店 服务 定车服务 定机票 服务 检查信用 服务 ESB 的两个关键需求
  • 99. 一个企业服务总线的高级视图
  • 100. ESB 的集中控制和分布处理 星形集成:
  • 101. 相关链接
  • 102. Web Service 相关链接
    • http://www.w3.org/TR/soap/
    • http://www.w3.org/TR/wsdl/
    • http://www.w3.org/TR/UDDI/
    • http://xfire.codehaus.org/
    • http://ws.apache.org/axis2
  • 103. 课后练习
    • 模仿 BookService ,开发一个自己的 GoodsService ,通过 WebService 方式提供商品信息的查询服务。