WEB开发网
开发学院软件开发Java Java Web 服务: WSDL 1.1 理解与建模 阅读

Java Web 服务: WSDL 1.1 理解与建模

 2012-03-19 14:05:27 来源:WEB开发网   
核心提示:企业应用程序的 Web 服务很大程度上依赖于服务定义的使用,服务定义规定了服务提供者和所有潜在用户之间的基本契约,Java Web 服务: WSDL 1.1 理解与建模,详细规定了服务所提供的功能类型,以及每一个功能所交换的消息,而实现组件则位于 BookServerImpl.wsdl,清单 1 是 BookServe

企业应用程序的 Web 服务很大程度上依赖于服务定义的使用。服务定义规定了服务提供者和所有潜在用户之间的基本契约,详细规定了服务所提供的功能类型,以及每一个功能所交换的消息。服务提供者和用户可以采用任何他们喜欢的方式来实现各自的消息交换,只要他们所发送的实际消息符合服务定义的规定。使用规定 XML 消息交换的服务定义是 Web 服务与早期分布式编程的最显著区别。

被提议用来定义 Web 服务的技术有很多,但是最广泛使用的方法是 WSDL 1.1。WSDL 1.1 存在一些缺点,包括结构过于复杂,使得普通人很难读懂。它也缺少一种权威的正式定义,导致后来需要 “附加” 说明来修补原始规范文档的各种漏洞。相应的,Web 服务协议趋向于尽可能灵活地处理 WSDL 1.1 文档。这种灵活性肯定会增加理解 WSDL 1.1 的难度,因为开发人员会遇到大量的 WSDL 结构,但是无法确定哪种方法是最好的。

在本文中,您将了解如何理解 WSDL 1.1 文档,并且您将看到第一部分用于验证 WSDL 文档并将它们转换成标准形式的 Java 模型。

认识 WSDL 1.1

名称空间用法

本文使用:

  • wsdl 前缀来表示 WSDL 1.1 http://schemas.xmlsoap.org/wsdl/ 名称空间
  • soap 前缀来表示 WSDL 1.1 扩展 SOAP 1.1 所使用的 http://schemas.xmlsoap.org/wsdl/soap/ 名称空间
  • xs 前缀来表示 XML 模式定义所使用的 http://www.w3.org/2001/XMLSchema 名称空间

发布于 2001 年初的 WSDL 1.1 技术上已经被 2007 年发布的 W3C WSDL 2.0 推荐标准所替代。WSDL 2.0 提供了比 WSDL 1.1 更清晰的结构,并且更加灵活。但是 WSDL 2.0 遇到了一个鸡蛋相生的问题 — WSDL 2.0 并没有被广泛应用,因为它并没有得到广泛支持,同时由于没有广泛应用也使得支持它的 Web 服务实现也发展缓慢。虽然有缺陷,但是 WSDL 1.1 仍然适用于大多数场合。

原始的 WSDL 1.1 规范并没有明确定义将使用多少的特性。因为 WSDL 的关键是处理 SOAP 服务定义,它也包含了一些 SOAP 特性(如,RPC 编码)支持,后来证明这些是不需要的。Web Services Interoperability Organization (WS-I) 在 Basic Profile (BP) 中解决了这些问题,Basic Profile (BP) 定义了 Web 服务使用 SOAP 和 WSDL 的最佳实践方法。BP 1.0 是在 2004 年通过批准的,并在 2006 年升级到 BP 1.1。在本文中,我将基于 WS-I BP 指南来介绍 WSDL 1.1,忽略一些实际上已弃用的特性,如 SOAP RPC 编码。

XML 模式定义是用来定义 XML 文档结构的。WSDL 1.1 在最初的规范中包含了一个模式描述,但是这个模式在几个方面上与内容描述并不匹配。这个问题已经在后来的模式修订版本上得到纠正,但是 WSDL 1.1 文档仍然没有反映这个修改的更新。然后 WS-I BP 小组决定对 WSDL 模式进行更多的修改,所以它才为这个不稳定模式创建了一个最佳实践版本。根据其中一个模式版本编写的文档一般与其他版本是不兼容的(尽管使用相同的名称空间),但是幸好大多数 Web 服务工具实际上都会忽略模式而接受所有合理的东西。

即使是 WSDL 1.1 模式的 WS-I BP 版本也不能保证 WSDL 1.1 文档符合规范要求。这个模式并不反映 WS-I BP 的所有约束,特别是关于组件的顺序。除此之外,XML 模式还无法处理许多很容易规定文档约束的类型(如替代属性,或从另一个模式上使用扩展元素)。所以检查一个 WSDL 1.1 文档是否符合 WSDL 1.1 规范(WS-I BP 所修订)远不止于打开 XML 模式验证。我将在本文后面继续讨论这个问题。首先,我将介绍 WSDL 1.1 服务描述的结构。

服务描述组件

WSDL 1.1 文档使用一个固定的根元素,一般命名为 。在根元素中,WSDL 1.1 名称空间定义了一个 “被动” 子元素(用来引用不同的 WSDL 1.1 文档)和五个 “主动” 子元素(这些元素就是实际的服务描述):

  • 引用另一个 WSDL 1.1 文档,将其描述加到本文档中。
  • 定义消息交换所使用的 XML 类型和元素。
  • 定义一个实际的消息,包含 XML 类型或元素。
  • 定义一个服务所实现的操作抽象集。
  • 定义 的一个使用特定协议和格式的具体实现。
  • 定义一个服务整体,包括一个或多个包含 元素访问信息的 元素。

另外还有一个可用于文档记录的 元素,它可以是 元素的第一个子元素,也可以是上面其他元素的第一个子元素。

一个完整的服务描述一般至少包含一个除 元素之外的其他元素,但是所有这些元素不一定要位于同一个文档中。您可以使用 元素将多个文档整合成为一个完整的 WSDL 描述,这使您能够灵活分割描述以满足您组织的要求。例如,前三个描述元素()一起构成了完整的服务接口描述(可能是由一个体系结构团队定义的),所以将它们保存到不同的面向实现的 元素上是很有意义的。所谓以的主流 Web 服务协议都支持将描述分割到多个 WSDL 文档中。

清单 1 和 清单 2 是一个分割成两个 WSDL 文档的 WSDL 服务描述示例,其中接口描述组件位于 BookServerInterface.wsdl 文件,而实现组件则位于 BookServerImpl.wsdl。清单 1 是 BookServerInterface.wsdl:

清单 1. BookServerInterface.wsdl  

				

  Book service interface definition.
  
    
      
      ...
    
  
  
    
  
  
    
  
  ...
  
    
  
  
    
  
  
    
  
  
    
      Book service implementation. This creates an initial library of books when the
      class is loaded, then supports method calls to access the library information
      (including adding new books).
    
    
      
        Get the book with a particular ISBN.
      
      
      
    
    ...
    
      Add a new book.
      
      
      
    
  

清单 2 是 BookServerImpl.wsdl。开头的 元素从 BookServerInterface.wsdl 导入接口描述。

1 2 3  下一页

Tags:Java Web 服务

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接