当前位置:编程学习 > JAVA >>

WebService学习笔记

 

1. 目的

       提供一种服务,能支持任何平台、任何语言和任何方式访问,使它们可以在不同平台,不同语言间进行通信。

 

       利用Eclipse推荐使用的插件XFire 来快速开发WebService, XFire是一个免费的开源SOAP框架, 当使用XFire时,你不需要编写一行额外的Java代码。只需要编辑发布描述符,然后你就会得到一个Web Services。有利于减少错误,提高开发效率,快速提供对外接口,以供客户端使用。

2. 范围

       利用Eclipse推荐使用的插件XFire 来快速开发WebService,支持任何平台、任何语言和任何方式访问。服务采用xfire方式,客户端有axis、xfire方式两种。

 

3. 技术术语

XFire是一个免费的开源SOAP框架,它不仅可以极大方便地实现这样一个环境,并且可以提供许多Web Services规范中高级特征,这些特征在多数的商业或者开源工具都没有提供。

lWeb Service:使我们能够在网络上建立分布式系统,应用程序组件可以通过任何平台、任何语言和任何方式访问。无论应用程序如何开发,使用了什么语言,以及运行在什么操作系统平台上,只要它作为Web Service,并且为协同解决问题而设计,那么你的应用程序,以任何语言开发或在任何平台上,都可以利用它的服务。

XML: 在Web Services环境中各层之间进行传递的默认数据格式。所以使用XML是因为它的独立于编程语言,良好的可扩展性以及强大的工业支持。

SOAP: 封装和交换信息的默认协议。Simple Object Access Protocol(简单对象访问协议)的首字母。SOAP是XML文档形式的调用商业方法的规范,它可以支持不同的底层接口,象HTTP(S)或者SMTP。SOAP的强大是因为它简单。SOAP是一种轻量级的,非常容易理解的技术,并且很容易实现。它有工业支持,可以从各主要的电子商务平台供应商那里获得。从技术角度来看,SOAP详细指明了如何响应不同的请求以及如何对参数编码。一个SOAP封装了可选的头信息和正文,并且通常使用HTTP POST方法来传送到一个HTTP 服务器,当然其他方法也是可以的,例如SMTP。SOAP同时支持消息传送和远程过程调用。

基本流程如图

基本流程图

Webservice 的概念是使用一个标准的输出接口来定义代码提供的功能,以便让外界可以通过这个标准的输出接口来调用,而所谓的标准输出接口就是wsdl,wsdl是一个xml组成的文件,描述了实现程序对外提供函数的原型,客户端可以通过wsdl来调用实现程序提供的服务代码。

UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。UDDI 项目中的成员可以通过UDDI Business Registry (UBR) 来操作Web服务的调用,UBR是一个全球性的服务。Web服务供应商可以在UBR中描述并且注册他们的服务。 用户可以在UBR中查找并定位那些他们需要的服务。UDDI是一种根据描述文档来引导系统查找相应服务的机制。

WSDL

       对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。WSDL (Web Services Description Language) 规范是一个描述接口,语义以及Web服务为了响应请求需要经常处理的工作的XML文档。这将使简单地服务方便,快速地被描述和记录。

 

WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的网站都可以实现。随网站而异的东西如序列化便归入底部分,因为它包含具体的定义。

l. 抽象定义

 Types   独立与机器和语言的类型定义

 Messages 包括函数参数(输入与输出分开)或文档描述

 PortTypes 引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)

2. 具体定义

 Bindings PortTypes部分的每一操作在此绑定实现

 Services  确定每一绑定的端口地址

定义方式各Messages栏使用Types栏的定义,PortTypes栏使用Messages栏的定义;Bindings栏引用了PortTypes栏,Services栏引用Bindings栏,PortTypes和Bindings栏包含了operation元素,而Services栏包含了port元素。PortTypes栏里的operation元素由Bindings栏里的operation元素进一步修改或描述。

 

注意:文档之中可能只有一个Types栏,或根本没有。所有其他的栏可以只有零元素、单元素或是多元素。WSDL的列表要求所有的栏以固定的顺序出现:import, types, message, portType, binding, service。所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。

<?xml version="1.0" encoding="UTF-8" ?>

<definitions name="FooSample" targetNamespace="http://tempuri.org/wsdl/"

 xmlns:wsdlns="http://tempuri.org/wsdl/" xmlns:typens="http://tempuri.org/xsd"

 xmlns:xsd="http://www.w3.org/2001/XMLSchema"

 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

 xmlns:stk="http://schemas.microsoft.com/soap-toolkit/wsdl-extension"

 xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>

<schema targetNamespace="http://tempuri.org/xsd"

  xmlns="http://www.w3.org/2001/XMLSchema"

  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"

  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"  elementFormDefault="qualified" >

</schema>

</types>

<message name="Simple.foo"> <part name="arg" type="xsd:int"/> </message>

<message name="Simple.fooResponse"><part name="result" type="xsd:int"/></message>

<portType name="SimplePortType">

 <operation name="foo" parameterOrder="arg" >

  <input message="wsdlns:Simple.foo"/>

  <output message="wsdlns:Simple.fooResponse"/>

 </operation>

</portType>

<binding name="SimpleBinding" type="wsdlns:SimplePortType">

 <stk:binding preferredEncoding="UTF-8" />

 <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

 <operation name="foo">

  <soap:operation soapAction="http://tempuri.org/action/Simple.foo"/>

  <input>

   <soap:body use="encoded" namespace="http://tempuri.org/message/"

    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

  </input>

  <output>

   <soap:body use="encoded" namespace="http://tempuri.org/message/"

    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />

  </output>

 </operation>

</binding>

 

<service name="FOOSAMPLEService">

 <port name="SimplePort" binding="wsdlns:SimpleBinding">

  <soap:address location="http://carlos:8080/FooSample/FooSample.asp"/>

 </port>

</service>

</definitions>

第一行申明该文档是XML。尽管这并不是必需的,但它有助于XML解析器决定是否解析WSDL文件或只是报错。

第二行是WSDL文档的根元素:<definitions>。一些属性附属于根元素,就像<schema>子元素对于<types>元素。

<types>元素包含了Types栏。如果没有需要声明的数据类型,这栏可以缺省。在WSDL范例中,没有应用程序特定的types声明,但我仍然使用了Types栏,只是为了声明schema namespaces。

 

  <message>元素包含了Messages栏。如果我们把操作看作函数,<message>元素定义了那个函数的参数。<message>元素中的每个<part>子元素都和某个参数相符。输入参数在<message>元素中定义,与输出参数相隔离--输出参数有自己的<message>元素。兼作输入、输出的参数在输入输出的<message>元素中有它们相应的<part>元素。输出<message>元素以"Response"结尾,就像以前所用的"fooResponse"。每个<part>元素都有名字和类型属性,就像函数的参数有参数名和参数类型。

一个PortTypes栏中,可以有零个、单个或多个<por

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,