WSDL编写的五个步骤

原创 2004年08月02日 14:10:00

说明:本文意译自BPEL1.1规范16.2节。

本文讨论一个简单的贷款审批的WEB服务的例子。在该例子中,客户发送贷款审批请求,包括客户个人信

息和贷款金额。贷款审批的WEB服务利用该信息运行一个简单流程,得到“同意贷款”或“拒绝贷款”的

结果。对于低于10000美元的贷款和有良好信用的客户,审批是自动的。对于高额贷款和信用不确定的客

户,我们需要用到另外两个WEB服务提供的功能。“风险评估服务”用来查询某个个人的信用风险,“专

家评估服务”用来获得专家对该项目的具体评估意见。

1。服务描述
我们假定已经存在xmlns:lns="http://loans.org/wsdl/loan-approval",服务描述文件如下:
<definitions
      targetNamespace="http://loans.org/wsdl/loan-approval"
      xmlns="http://schemas.xmlsoap.org/wsdl/"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
     xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"     
      xmlns:lns="http://loans.org/wsdl/loan-approval">

H:信用信息消息。消息相当于我们的值对象。
<message name="creditInformationMessage">
   <part name="firstName" type="xsd:string"/>
   <part name="name" type="xsd:string"/>
   <part name="amount" type="xsd:integer"/>
</message>
H:审批消息
<message name="approvalMessage">
   <part name="accept" type="xsd:string"/>
</message>
H:风险评估消息
<message name="riskAssessmentMessage">
   <part name="level" type="xsd:string"/>
</message>  
H:错误消息
<message name="errorMessage">
   <part name="errorCode" type="xsd:integer"/>
</message>

H:把portType理解为我们的OO中的方法吧!它指定了输入,输出,出错处理。
<portType name="loanServicePT">
   <operation name="request">
      <input message="lns:creditInformationMessage"/>
      <output message="lns:approvalMessage"/>
      <fault name="unableToHandleRequest"
             message="lns:errorMessage"/>
   </operation>
</portType>

<portType name="riskAssessmentPT">
   <operation name="check">
      <input message="lns:creditInformationMessage"/>
      <output message="lns:riskAssessmentMessage"/>
      <fault name="loanProcessFault"
             message="lns:errorMessage"/>
   </operation>
</portType>

<portType name="loanApprovalPT">
   <operation name="approve">
      <input message="lns:creditInformationMessage"/>
      <output message="lns:approvalMessage"/>
      <fault name="loanProcessFault"
             message="lns:errorMessage"/>
   </operation>
</portType>     

H:partnerLinkType用来区分角色。
<plnk:partnerLinkType name="loanPartnerLinkType">
   <plnk:role name="loanService">
       <plnk:portType name="lns:loanServicePT"/>
   </plnk:role>
</plnk:partnerLinkType>

<plnk:partnerLinkType name="loanApprovalLinkType">
   <plnk:role name="approver">
       <plnk:portType name="lns:loanApprovalPT"/>
   </plnk:role>  
</plnk:partnerLinkType>

<plnk:partnerLinkType name="riskAssessmentLinkType">
   <plnk:role name="assessor">
       <plnk:portType name="lns:riskAssessmentPT"/>
   </plnk:role>  
</plnk:partnerLinkType>

</definitions>

我们以上面的案例来说明.

1)声明名称空间
必须在 <definitions> 元素中提供各种名称空间的声明.
<definitions
      targetNamespace="http://loans.org/wsdl/loan-approval"
      xmlns="http://schemas.xmlsoap.org/wsdl/"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
      xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"     
      xmlns:lns="http://loans.org/wsdl/loan-approval">
三个必须做的外部名称空间声明是 WSDL、SOAP 和 XSD(XML 模式定义)
xmlns="http://schemas.xmlsoap.org/wsdl/"是WSDL名称空间
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 是SOAP名称空间,这里因为是用做BPEL4WS,所以

不需要该名称空间
xmlns:xsd="http://www.w3.org/2001/XMLSchema"是XSD名称空间

2)编写服务
<definitions> 元素包含一个或多个 <portType> 元素,实际上,每个元素都是您希望表示的一系列

operation。或者,您也可以将单个 portType 元素看作是将各种方法组成类的一个逻辑分组。我们称

portType为服务---这就是"WEB服务"这个名称的由来.
<portType name="loanServicePT">
   <operation name="request">
      <input message="lns:creditInformationMessage"/>
      <output message="lns:approvalMessage"/>
      <fault name="unableToHandleRequest"
             message="lns:errorMessage"/>
   </operation>
</portType>
可以看出,portType是operation的集合.一个operation是一个方法,那一个portType不就是一个类吗?一个

类,我们可以看作一个服务.


3)指定参数
operation指定了输入的参数和输出的参数,在 WSDL 术语中,所有参数称为“消息”。
<message name="creditInformationMessage">
   <part name="firstName" type="xsd:string"/>
   <part name="name" type="xsd:string"/>
   <part name="amount" type="xsd:integer"/>
</message>
一个消息可以有多个part元素,part元素指定名称和类型.

4)与SOAP绑定
WSDL以一种抽象方式定义了操作和消息,而不考虑实现的细节。实际上,WSDL 的任务是定义或描述 Web

服务,然后提供一个对外部框架的引用来定义 WSDL 用户将如何实现这些服务。可以将这个框架当作

WSDL 抽象定义和它们的实现之间的“绑定(binding)”。一般是与SOAP绑定,当然,也不是必须的.

5)指定实现
当您在 UDDI 注册中心发布 Web 服务时,会使用它.
最后两个步骤把WSDL与SOAP/UDDI结合起来了.

WSDL简介及编写步骤

说明:本文意译自BPEL1.1规范16.2节。 本文讨论一个简单的贷款审批的WEB服务的例子。在该例子中,客户发送贷款审批请求,包括客户个人信 息和贷款金额。贷款审批的WEB服务利用该信息运行一个...
  • luopeiyuan1990
  • luopeiyuan1990
  • 2013-10-23 11:18:35
  • 2307

谈谈WebService开发-应用篇(三)-教你如何看WSDL文档

作为webservice客户端开发,在日常工作中可能经常会拿到一个对方提供的wsdl地址或文档,那么拿到这个地址后我们如何编写客户端调用代码呢,前面几篇只是以个人经验的方式写了下,那么真正要根据wsd...
  • posonrick
  • posonrick
  • 2015-05-08 15:11:08
  • 6093

WSDL文件简介-本文介绍了如何编写一个简单的WSDL文件,并根据WSDL文件编写服务器端和客户端代码,并发布Web Service服务的过程

  • 2009年04月15日 22:55
  • 11KB
  • 下载

wsimport 带https协议wdsl 时报错的处理

最近用wsimport处理 带https协议wdsl 时报错: E:\Projects\Sample>wsimport -s ./src -verbose https://localhost:874...
  • Nuc_sun
  • Nuc_sun
  • 2016-12-30 11:35:13
  • 2378

WSDL发布WebService (第一部分)

使用WSDL发布WebService(第一部分)——Web Service 和WSDL简介 (转) 作者Bilal Siddiqui (wap_monster@yahoo.com) CEO...
  • mengmeng179
  • mengmeng179
  • 2014-10-22 16:55:27
  • 313

WSDL文件生成

1. 背景 有过WEB开发的读者,相信对什么是B/S结构并不会陌生。在B/S结构下,应用的逻辑完全在应用服务器实现,用户表现完全在web服务器上实现,客户端只需要浏览器即可进行业务处理。对,客户一般都...
  • owen_william
  • owen_william
  • 2016-05-04 19:12:45
  • 10972

【WebService】wsdl配置详解以及使用注解修改wsdl配置

WebService系列文章: 【WebService】带你走进webservice的世界 【WebService】自定义WebService服务及其调用   前面分析了一下关于ws的...
  • eson_15
  • eson_15
  • 2016-07-28 18:21:36
  • 19874

Webservice接口开发简单例子

Webservice是系统对外的接口,比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而...
  • u012169411
  • u012169411
  • 2016-04-12 10:00:57
  • 11009

SOAPUI测试WSDL项目(一)---创建WSDL项目

转载地址:http://www.cnblogs.com/zerotest/p/4678378.html WSDL文件是测试基于soap的服务,他们定义实际暴露服务和要求SoapUI生...
  • wanglha
  • wanglha
  • 2015-09-08 09:13:13
  • 5974

用Zend Stuido 的WSDL编辑器

文件->新建->其他->Webservice->WSDL 新建WSDL 下一步 点完成生成如下wsdlTestSoapSoap下面填写php webService 如myservice.phpNewO...
  • 21aspnet
  • 21aspnet
  • 2011-10-28 17:54:20
  • 2095
收藏助手
不良信息举报
您举报文章:WSDL编写的五个步骤
举报原因:
原因补充:

(最多只允许输入30个字)