<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    基本概念:

    1,什么是 Web 服務?

    Web 是使應用程序可以以與平臺和編程語言無關的方式進行相互通信的一項技術。Web 服務是一個軟件接口,它描述了一組可以在網(wǎng)絡上通過標準化的 XML 消息傳遞訪問的操作。它使用基于 XML 語言的協(xié)議來描述要執(zhí)行的操作或者要與另一個 Web 服務交換的數(shù)據(jù)。一組以這種方式交互的 Web 服務在面向服務的體系結構(Service-Oriented Architecture,SOA)中定義了特殊的 Web 服務應用程序。

    2, 什么是SOAP?

    SOAP Simple Object Access Protocol )簡單對象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠程過程調用的輕量級協(xié)議,是一個基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類型的對象或代碼,在任何平臺上,以任何一種語言相互通信。

    SOAP 包括四個部分: SOAP 封裝 (envelop) ,封裝定義了一個描述消息中的內容是什么,是誰發(fā)送的,誰應當接受并處理它以及如何處理它們的框架; SOAP 編碼規(guī)則( encoding rules ),用于表示應用程序需要使用的數(shù)據(jù)類型的實例; SOAP RPC 表示 (RPC representation) ,表示遠程過程調用和應答的協(xié)定; SOAP 綁定( binding ),使用底層協(xié)議交換信息。

    應用中比較關注的是 envelop ,由一個或多個 Header 和一個 Body 組成。

    SOAP 在可互操作的基礎 Web 服務協(xié)議棧 中的位置

    3, 什么是Axis?

    Axis 本質上就是一個SOAP引擎 Apache Axis is an implementation of the SOAP ), 提供創(chuàng)建服務器端、客戶端和網(wǎng)關SOAP操作的基本框架。但Axis并不完全是一個SOAP引擎,它還包括:

    是一個獨立的SOAP服務器。

    是一個嵌入Servlet引擎(例如Tomcat)的服務器。

    支持WSDL

    提供轉化WSDLJava類的工具。

    提供例子程序。

    提供TCP/IP數(shù)據(jù)包監(jiān)視工具。

    4, Axis 相比Soap v2的優(yōu)點:

    Axis 是第三代Apache SOAP的實現(xiàn),從2000年起,SOAP v2開發(fā)小組開始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來自W3C的各種XML標準。通過不斷地討論和代碼編寫,Axis目前相比SOAP V2取得了如下成果:

    速度提高。 Axis通過基于事件的SAXXML文檔進行處理,從而在速度和效率上比Apache SOAP有所提高。

    靈活性提高。

    穩(wěn)定性提高。

    提供面向組件的部署。

    提供一個簡潔的傳輸抽象框架。其核心引擎完全于傳輸方式獨立。從而使基于何種協(xié)議傳輸?shù)倪x擇更加靈活。

    支持WSDL。包括WSDL和客戶端代碼生成等。

    5, 什么是WSDL?

    WSDL Web Service Description Language Web 服務器描述語言是用 XML 文檔來描述 Web 服務的標準,是 Web 服務的接口定義語言,由 Ariba 、 Intel 、 IBM 、 MS 等共同提出,通過 WSDL ,可描述 Web 服務的三個基本屬性:

    ·服務做些什么——服務所提供的操作(方法)

    ·如何訪問服務——和服務交互的數(shù)據(jù)格式以及必要協(xié)議

    ·服務位于何處——協(xié)議相關的地址,如 URL

    WSDL 文檔以端口集合的形式來描述 Web 服務, WSDL 服務描述包含對一組操作和消息的一個抽象定義,綁定到這些操作和消息的一個具體協(xié)議,和這個綁定的一個網(wǎng)絡端點規(guī)范。

    WSDL Web 服務概念性協(xié)議棧 中的位置:

    6, 什么是WSDD?

    WSDD 就是 WEB 服務分布描述( Web Service Deployment Descriptor , 它定義了 WEB 服務的接口,如服務名、提供的方法、方法的參數(shù)等信息。

    7, 什么是UDDI?

    UDDI 就是統(tǒng)一描述、發(fā)現(xiàn)和集成( Universal Description, Discovery, and Integration )。 UDDI 用于集中存放和查找 WSDL 描述文件,起著目錄服務器的作用。

    Web 服務中的角色、操作和構件

    • 服務提供者。從企業(yè)的角度看,這是服務的所有者。從體系結構的角度看,這是托管訪問服務的平臺。
    • 服務請求者。從企業(yè)的角度看,這是要求滿足特定功能的企業(yè)。從體系結構的角度看,這是尋找并調用服務,或啟動與服務的交互的應用程序。服務請求者角色可以由瀏覽器來擔當,由人或無用戶界面的程序(例如,另外一個 Web 服務)來控制它。
    • 服務注冊中心。這是可搜索的服務描述注冊中心,服務提供者在此發(fā)布他們的服務描述。在靜態(tài)綁定開發(fā)或動態(tài)綁定執(zhí)行期間,服務請求者查找服務并獲得服務的綁定信息(在服務描述中)。對于靜態(tài)綁定的服務請求者,服務注冊中心是體系結構中的可選角色,因為服務提供者可以把描述直接發(fā)送給服務請求者。同樣,服務請求者可以從服務注冊中心以外的其它來源得到服務描述,例如本地文件、FTP 站點、Web 站點、廣告和服務發(fā)現(xiàn)(Advertisement and Discovery of ServicesADS)或發(fā)現(xiàn) Web 服務(Discovery of Web Services,DISCO)。

    8, AXIS 的幾種服務類型:

    AXIS 有四種 service styles ,分別是: RPC, Document, Wrapped, Message 。最常用的就是 RPC Message 。

    RPC AXIS 中是一個默認選項。當你部署的時候使用下列兩種方式: 或則 ,它遵循 SOAP RPC 和編碼規(guī)則。每個 RPC 都包括一個表示名稱的外部接點和一些表示參數(shù)的內部接點。 AXIS 會根據(jù)規(guī)則將一個 XML WSDL 文件)文件轉化成一個 JAVA 對象,并對對想賦上在文件中描述的值。也可以根據(jù)規(guī)則將一個 JAVA 對象轉化成 XML 文件。

    Document

    適合于老的 XML schema

    Wrapped

    DOCUMENT 一樣,適合于老的 XML schema 。

    在大多書情況下,你不許要擔心是 DOCUMENT 服務還是 WRAPPED 服務。

    Message

    以這種方式部署的話,會使 AXIS 失去意義,它使你的代碼真正的用 XML 形式,而不需要轉化成 JAVA 對象。以這種方式部署的有以下四種服務方法:

    public Element [] method(Element [] bodies);

    public SOAPBodyElement [] method (SOAPBodyElement [] bodies);

    public Document method(Document body);

    public void method(SOAPEnvelope req, SOAPEnvelope resp);

    幾種服務類型的主要區(qū)別:

    基于 RPC( 遠程過程調用 ) 方式,這也是 Web 服務最常用的方式。面向消息 / 文檔的的類型跟 RPC 不同的是它提供了一個更底層的抽象,要求更多的編程工作??蛻舳丝梢詡魅肴魏蔚?/span> XML 文檔,得到的響應不一定是 SOAPEnvelope ,可以返回任何它所需要的東西,甚至不返回。雖然這對開發(fā)者來說非常的靈活,但是這種通訊類型在實際的應用中并不常見。面向消息 / 文檔的 Web 服務主要適合于下面幾種情況,比如批量處理,基于表單的數(shù)據(jù)導入,有需要返回非 XML 數(shù)據(jù)時, Web 服務器實現(xiàn)中要求直接訪問傳輸層等等

    二, 開發(fā),部署Web服務:

    首先下載并安裝 tomcat4.x. 及以上版本

    然后到 Axis 主頁下載,現(xiàn)在最新版本是 1.3 final, 我們使用的是1.2.1 final,將解壓的axis中的webapps目錄下的axis拷貝到tomcat安裝路徑下的webapp下,將解壓的axislib下的jar文件拷貝到tomcat安裝目錄下commonlib下,并把他們加入到你的系統(tǒng)路徑中。

    然后啟動 tomcat

    打開 IE ,輸入: http://localhost:8080/axis ,如果出現(xiàn) axis 主頁,說明安裝 axis 成功。

    部署 web 服務 axis 下部署 web 服務有以下兩種方式:

    1. 即時部署 (Instance Deployment) 利用 JWS 文件

    只需要將 .java 文件拷貝到 axis 目錄下,并將文件后綴改為 .jws 即可。

    訪問部署后的 wsdl 文件只需鍵入: http://localhost:8080/axis/filename.jws?wsdl

    以下是 WSDL 的一個例子:

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

    <wsdl:definitions targetNamespace="http://service.kernel.gamebase.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://service.kernel.gamebase.com" xmlns:intf="http://service.kernel.gamebase.com" xmlns:tns1="http://vo.service.kernel.gamebase.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <wsdl:types> // 描述消息中復雜數(shù)據(jù)類型的使用

    <schema targetNamespace="http://vo.service.kernel.gamebase.com" xmlns="http://www.w3.org/2001/XMLSchema">

    <import namespace="http://service.kernel.gamebase.com"/>

    <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>

    <complexType name="UserGameGrade">// 定義復雜類型

    <sequence>

    <element name="MClassID" nillable="true" type="xsd:string"/>

    <element name="gameID" nillable="true" type="xsd:string"/>

    <element name="gradeType" type="xsd:int"/>

    ......

    </sequence>

    </complexType>

    </schema>

    ......

    </wsdl:types>

    <wsdl:message name="getGameGradeRankResponse">// 定義操作的輸出參數(shù)

    <wsdl:part name="getGameGradeRankReturn" type="tns1:GameGradeRank"/>

    </wsdl:message>

    <wsdl:message name="getGameGradeRankRequest">// 定義操作的輸入?yún)?shù)

    <wsdl:part name="in0" type="xsd:string"/>

    <wsdl:part name="in1" type="xsd:int"/>

    <wsdl:part name="in2" type="xsd:int"/>

    </wsdl:message>

    ......

    <wsdl:portType name="GameGradeService"> // WSDL: portType 元素中定義了 Web 服務的操作。

    <wsdl:operation name="getGameGradeRank" parameterOrder="in0 in1 in2"> // 操作定義了輸入和輸出數(shù)據(jù)流中可以出現(xiàn)的 XML 消息

    <wsdl:input message="impl:getGameGradeRankRequest" name="getGameGradeRankRequest"/>

    <wsdl:output message="impl:getGameGradeRankResponse" name="getGameGradeRankResponse"/>

    </wsdl:operation>

    <wsdl:operation name="getUserGameGradeRank" parameterOrder="in0 in1 in2 in3 in4">

    <wsdl:input message="impl:getUserGameGradeRankRequest" name="getUserGameGradeRankRequest"/>

    <wsdl:output message="impl:getUserGameGradeRankResponse" name="getUserGameGradeRankResponse"/>

    </wsdl:operation>

    ......

    </wsdl:portType>

    <wsdl:binding name="GameGradeServiceSoapBinding" type="impl:GameGradeService">// 描述特定服務接口( WSDL: portType )的協(xié)議、數(shù)據(jù)格式、安全性和其它屬性

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

    <wsdl:operation name="getGameGradeRank">

    <wsdlsoap:operation soapAction=""/>

    <wsdl:input name="getGameGradeRankRequest">

    <wsdlsoap:body namespace="http://service.kernel.gamebase.com" use="literal"/>

    </wsdl:input>

    <wsdl:output name="getGameGradeRankResponse">

    <wsdlsoap:body namespace="http://service.kernel.gamebase.com" use="literal"/>

    </wsdl:output>

    </wsdl:operation>

    </wsdl:binding>

    <wsdl:service name="GameGradeServiceService">// 定義服務:名字, 訪問點 ,位置

    <wsdl:port binding="impl:GameGradeServiceSoapBinding" name="GameGradeService">

    <wsdlsoap:address location="http://localhost:8080/gamebase/services/GameGradeService"/>

    </wsdl:port>

    </wsdl:service>

    </wsdl:definitions> 2 .定制部署 (Custom Deployment) 利用部署描述符 wsdd

    以下是部署描述符的一個例子: <deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="GameGradeService" type="" provider="java:RPC"

    style="rpc" use="encoded"> // 服務名字,服務類型及服務提供者

    <parameter name="scope" value="Request"/>

    <parameter name="className" value="/blog/com.gamebase.kernel.service.ServiceImpl"/>// 實現(xiàn)該服務的具體類

    <parameter name="allowedMethods" value="*"/>

    <namespace>http://service.kernel.gamebase.com</namespace>

    <typeMapping xmlns:ns1="http://vo.service.kernel.gamebase.com" // 類型映射

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

    qname="ns1:GameGradeRank"http://Qualified Name (特定名字)

    languageSpecificType="java:com.gamebase.kernel.service.vo.GameGradeRank"

    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"http:// 指定序列化工廠

    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" // 反序列化工廠 name="GameGradeRank"/>

    ………
    </service>
    </deployment>

    訪問部署后的wsdl文件只需鍵入

    http://localhost:8080/axis /services/ GameGradeService

    三, IDE下開發(fā)Web服務:

    1, Jubilder下開發(fā)WebService

    使用Jbuilder集成開發(fā)環(huán)境,能夠根據(jù)服務接口類生成web服務描述文件,web服務部署描述文件及客戶端代碼,這樣能夠節(jié)省我們大部分時間(開發(fā),配置),且減少出錯機率。

    Jbuilder 在以前的版本,如jbuilder8(可能更低版本)就支持Axis,我用的是Jbuilder2006,不過大體步驟都是相同。

    在開始前,我們有個服務接口GameGradeService類,服務接口實現(xiàn)類ServiceImpl類及相關附屬類。我們要實現(xiàn)該服務接口。

    2.1 ,打開Jbuilder,新建一個工程,如testWebService

    2.2 ,新建一個名為webServiceWebService Server file>new:WebServices:Axis WebServices Server Configuration

    2.3, 在出現(xiàn)的Web Services Designers可視化界面,點擊“create Service”,選擇“java Service

    2.4 ,配置新創(chuàng)建的java Service,點擊JavaService1,配置Service NameGameGradeService,服務接口為我們有的那個服務接口GameGradeService,實現(xiàn)類為我們實現(xiàn)改接口的類ServiceImpl。

    2.5 ,然后編譯該工程,能夠生成web服務部署文件,web服務描述文件,如果你選擇了生成客戶端代碼的話,它也能生成相應的客戶端代碼。

    2.6 ,啟動該服務,訪問 http://localhost:8080/webService/services/GameGradeService?wsdl ,如果出現(xiàn)該服務的描述文檔,說明發(fā)布成功。

    2.7 ,執(zhí)行自動生成的客戶端代碼進行測試,發(fā)現(xiàn)測試成功。

    2.8 ,你可以用webServicewebServices Client來根據(jù)wsdl只生成客戶端代碼。

    a, 新建一個名為webServiceClientWebService Clientfile>new:WebServices:Axis WebServices Client Configuration

    b, 在出現(xiàn)的Web Services Designers可視化界面,點擊“create Service”,選擇“import from url

    c, 配置新創(chuàng)建的java Service,點擊JavaService1,配置Service NameGameGradeServiceInput WSDL file 為給定的wsdl。

    d, 然后編譯該工程

    2, eclipse下開發(fā)WebService

    Eclipse3.1 及相關插件已經(jīng)能夠很好的支持webService開發(fā)。

    右鍵點擊wsdl文件,選擇webServices,有以下功能:發(fā)布wsdl文件,生成客戶端代碼等。

    右鍵 點擊服務接口文件,選擇webServices,有以下功能:生成web Service等。

    同時eclipse提供了友好的界面操作,如測試的時候,提供界面讓你輸入?yún)?shù),而不必該改程序。

    四, 開發(fā)過程中的問題:

    在使用 AXIS 開發(fā)WEB服務的時候,會遇到很多問題。比如:XML解析器出現(xiàn)的異常、客戶端程序找不到可用的Web服務、序列化/反序列化等。

    XML 解析器出現(xiàn)的異常主要是由于類型映射的問題導致的,用到那個Bean就把那個bean映射進去就可以避免該問題。

    客戶端程序找不到可用的Web服務主要是由于客戶端對服務提供者的url及服務名字輸入有錯,這一般是由于手寫客戶端代碼造成的。

    序列化/反序列化問題,沒有對傳輸中的某個Bean類型映射相應的序列化/反序列化工廠,或者是復雜類型中,沒有實現(xiàn)自定義的序列化/反序列化工廠。

    以上是開發(fā)過程中主要遇到的幾類問題,在以后的開發(fā)過程中,一定還會需要遇到更多的問題。

    五, 其他相關知識:

    1 java類與wsdl相互生成工具:

    Axis 提供了”WSDL2Java”工具,可以利用wsdl描述來產生服務的Java代理和框架(proxy and skeletons)

    Axis 提供了”Java2WSDL”工具,可以由java類生成wsdl文件。

    2, 序列化與反序列化:

    序列化/反序列化器在英文中的對應翻譯是Serializer/Deserializer,一個序列化器的功能是遵循一定的映射規(guī)則和編碼風格,將一種類型的JAVA對象通過某種特定的機制,轉換成為XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,兩者相輔相成,成對出現(xiàn)。Axis中的序列化/反序列化器采用設計范式中的工廠模式,每一個Serializer唯一對應一個SerializerFactory;每一個Deserializer唯一對應一個DeserializerFactory。

    Axis 已經(jīng)為開發(fā)者提供了豐富的序列化/反序列化器,對于java的基本數(shù)據(jù)類型,絕大部分常用的容器類(比如數(shù)組類型,Vector類型等)都提供了實現(xiàn),特別是提供了對W3CDOM對象(比如Document, Element)和符合Bean規(guī)范的JAVA對象提供了功能完善的序列化/反序列化器,但對于一些特殊類型的對象,需要通過Web服務進行傳遞,我們不得不開發(fā)自己的序列化/反序列化器。

    3 ,AxisSpring的結合:

    Axis spring結合,需要提供一些額外工作,即將實現(xiàn)web服務接口的Beanweb服務部署中服務類如何關聯(lián)。 如下:

    <service name="GameService" type="" provider="Handler" style="rpc">

    <parameter name="handlerClass" value="/blog/com.workingmouse.webservice.axis.SpringBeanRPCProvider"/>

    <parameter name="springBean" value="gameInfoService"/>

    <parameter name="springBeanClass" value="/blog/com.gamebase.kernel.service.GameService"/>

    <parameter name="scope" value="Request"/>

    <parameter name="allowedMethods" value="*"/>

    .......

    </service>

    參數(shù)handlerClass的值是處理Beanwsdd文件中服務類的關聯(lián)。

    參數(shù)springBean的值表示實現(xiàn)接口GameService注冊的Bean的名字。

    參數(shù)springBeanClass的值表示接口GameService的類。

    posted on 2006-08-04 20:04 SIMONE 閱讀(2597) 評論(0)  編輯  收藏 所屬分類: AXIS
    主站蜘蛛池模板: 亚洲女人被黑人巨大进入| 女人被弄到高潮的免费视频| 亚洲第一区在线观看| 亚洲精品无码久久| 成熟女人牲交片免费观看视频| 亚洲av无码av制服另类专区| 免费在线中文日本| 久久精品国产亚洲麻豆| 国产真人无码作爱视频免费| 亚洲精品高清国产一线久久| 在线看片免费人成视频福利| 久久国产亚洲电影天堂| 日韩av无码久久精品免费| 亚洲日产2021三区在线| 一二三四在线播放免费观看中文版视频 | 亚洲国产精品毛片av不卡在线 | 国产成人免费视频| 亚洲视频在线观看地址| 久草视频在线免费| 亚洲日韩国产二区无码| 免费吃奶摸下激烈视频| 视频免费在线观看| 日木av无码专区亚洲av毛片| 久久天天躁狠狠躁夜夜免费观看| 亚洲精品午夜国产va久久| 国产乱子伦精品免费无码专区| 成人免费网站视频www| 亚洲av永久无码精品漫画 | 在线观看免费宅男视频| 亚洲精华国产精华精华液| 成人性生交大片免费看好| 911精品国产亚洲日本美国韩国| 免费在线观看黄色毛片| 中文字幕在线免费观看| 1000部拍拍拍18勿入免费凤凰福利| 亚洲免费观看在线视频| 免费可以在线看A∨网站| 免费一级特黄特色大片在线| 国产国拍精品亚洲AV片| 亚洲三级中文字幕| 亚洲精品黄色视频在线观看免费资源|