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

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

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

    積累生活學習的點點滴滴

    Best Wishes ^_^

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      21 Posts :: 10 Stories :: 42 Comments :: 0 Trackbacks

    ?

    ?????? Axis2 是下一代的 Apache Axis ,它的體系結構和原來的 Axis1.x 有所不同。它體現出更靈活、有效和可配置性。盡管它的體系結構是新的,但在 Axis1.x 版本下有些良好的概念還是保存下來了,如: handler axis2 中依然保留。

    ?

    1、 Axis2 所體現的特點有:

    ?

    Speed :速度快,使用自己的對象模型和 StAX 來解析 achieve

    Low memory foot print

    AXIOM :使用自己的輕量級對象模型 AXIOM ,用于消息處理, axiom 是具有可擴展性、高性能和開發便利的優點。

    Hot Deployment :可進行熱部署,在部署新的服務時不需要重新啟動服務。

    Asynchronous Web Services 支持異步服務。

    MEP Support 支持消息交換模式( Message Exchange Patterns MEPs ,MEP 是內嵌式的,支持 WSDL2.0 中的基本的 MEPs

    Flexibility :具有靈活性,使得開發者自由向引擎中插入擴展功能。

    Stability :穩定性。定義一系列的公布的接口,這些接口相對于其余的 Axis 改變得相對較慢。

    Component-Oriented Deployment 面向組件的部署。可以輕松定義可復用的網絡或 handler 來實現常規應用程序的處理或將其分配給其伙伴。

    Transport Framework

    WSDL 支持: WSDL 1.1 WSDL 2.0 版本

    Add-ons

    Composition and Extensibility: 模塊支持組合和擴展功能。

    ?

    Axis2 samples binary 發布中的 samples/userguide/src 目錄下

    2、 Web Services Using Axis2

    ?????? 使用 axis2 web services 有兩種方法

    ü ???????? 使用 Axis2 的基本接口( Primary API )來實現業務邏輯

    ü ???????? WSDL 文件生成 Skeleton ,再實現業務邏輯

    ?

    1) ????? 使用 Axis2 的基本接口( Primary API )來實現業務邏輯

    ????????????? 主要的操作是:

    ????????????? A :寫實現類

    ????????????? B :寫一個 services.xml 來解釋 web service

    ??????? C :為 web 服務創建一個 aar 文檔

    ??????? D :將文檔部署

    ?????? 步驟一:編寫類文件,描述 web service 的業務邏輯

    														
    																public class MyService{
    														
    												
    														
    														
    														
    																
    																		??? public void ping(OMElement element){
    														
    														
    														
    												
    														
    														
    														
    																
    																		???? ......
    														
    														
    														
    												
    														
    														
    														
    																
    																		??? }
    														
    														
    														
    												
    														
    														
    														
    																
    																		??? public OMElement echo(OMElement element){
    														
    														
    														
    												
    														
    														
    														
    																
    																		???? ......
    														
    														
    														
    												
    														
    														
    														
    																
    																		??? }
    														
    														
    														
    												
    														
    																}
    														
    												
    														
    																//
    														
    														
    																
    																		這個類中給了兩個方法,一個是只有輸入,另一個是有輸入和輸出,輸入輸出類型都是
    																
    														
    														
    																OMElement
    														
    												

    ?

    ?????? 步驟二:為 web service 編寫配置文件 services.xml

    ?????? ?????? 一個 services.xml 文件中可以寫多個 web 服務的配置信息,可以對一組相關的服務 進行配置管理,使用 <ServiceGroup> 元素包含多個 <service> 元素

    <service >

    ??? <description>

    ??????? This is a sample Web Service with two operations, echo and ping.

    </description>

    <!- - 描述服務的類名 -- >

    <parameter name="ServiceClass" locked="false">userguide.example1.MyService</parameter>

    <!— 分別描述服務中的操作,每個操作都有相應的 MessageReceiver ,方法若是接收輸入,返回輸出信息使用的是 RawXMLINOutMessageReceiver 類,如要想使用 WS-Addressing ,需要有元素 actionMapping -->

    ??? <operation name="echo">

    ??????? <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>

    ??????? <actionMapping>urn:echo</actionMapping>

    ??? </operation>

    ???? <operation name="ping">

    ??????? <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>

    ??????? <actionMapping>urn:ping</actionMapping>

    ??? </operation>

    ?</service>

    ?

    ?????? 步驟三:創建 archive 文件

    ?????? Archive 文件的目錄結構如下圖所示,在當前目錄下,創建一個 META-INF 目錄, services.xml 文件就存放于此目錄,當前目錄下存放的是源文件,可以先創建一個 jar 文件,再將其更改擴展名。

    ?????? 可以將命令行切換到 example1 目錄下,鍵入命令: jar cvf MyService.jar .

    之后將 jar 更為 aar

    ?

    ?

    ?????? 步驟四:部署文件

    ????????????? aar 文件復制到 axis2 WEB-INF 目錄下的 service 目錄下,或者使用它提供的 ?? upload service 接口直接部署。

    ?????? REST: 第二代 Web services 使用的體系結構,而不是使用 SOAP REST 代表: Representational State Transfer 。表示每一個 URL 都表示一個對象資源。可以使用 HTTP Get 獲得對象的內容,或者是刪除、或對對象進行更改。

    The main advantages of REST web services are:

    Lightweight - not a lot of extra xml markup

    Human Readable Results

    Easy to build - no toolkits required

    ?

    SOAP also has some advantages:

    Easy to consume - sometimes

    Rigid - type checking, adheres to a contract

    Development tools

    ?

    2) ????? WSDL 文件生成 Skeleton ,再實現業務邏輯

    ??????

    ?????? 步驟一:根據 WSDL 文件生成 skeleton

    ????????????? 使用 axis2 提供的 WSDL2Java 工具生成 skeleton ,工具使用的參數說明如下

    Usage WSDL2Code -uri <Location of WSDL> : WSDL file location

    -o <output Location> : output file location

    -a : Generate async style code only. Default is off

    -s : Generate sync style code only. Default is off. takes precedence over -a

    -p <package name> : set custom package name

    -l <language> : valid languages are java and csharp. Default is java

    -t : Generate TestCase to test the generated code

    -ss : Generate server side code (i.e. skeletons). Default is off

    -sd : Generate service descriptor (i.e. services.xml). Default is off. Valid with -ss

    -d <databinding> : valid databinding(s) are adb, xmlbeans and jaxme. Default is adb

    -g Generates all the classes. valid only with the -ss

    -pn <port_name> : name of port in the presence of multiple ports

    -sn <service_name> : name of service in the presence of multiple services

    -u : unpacks the databinding classes

    -r <repository_path> : path of the repository against which code is generated

    ?

    ?????? 將例子中給的 Axis2SampleDocLit.wsdl 生成它的 skeleton ,命令行如下

    D:\ws_tools\axis2-std-1.0-bin>WSDL2Java -uri samples\wsdl\Axis2SampleDocLit.wsdl

    ?-ss -sd -d xmlbeans -o samples\tt -p org.apache.axis2.userguide?? 將生成的文件放于 samples 目錄下的 tt 目錄下。

    ?????? 步驟二:實現商業邏輯

    ?????? ? src 目錄下的目錄中找到 Axis2SampleDocLitTypeSkeleton.java 文件,它就是 web service skeleton ,對其中的方法進行編輯來實現商業邏輯。

    ?????? 步驟三: services.xml

    ?????? 生成 skeleton 時,服務的配置文件 services.xml 文件是自動生成的,存放于 resources 目錄下。

    ?????? 步驟四:打包( packaging

    ?????? 將類文件打包形成 aar 文件,然后將其部署到 axis2 下的 services 目錄下。使用 WSDL2Java 工具生成 skeleton 時同時產生的數據綁定類在 schemaorg_apache_xmlbeans 目錄下,也需要將其復制到類路徑下,將 skeleton 和支持的文件進行編譯。將需要的目錄文件以下面的結構存放,編譯之后打包生成 aar 文件。

    即將 services.xml 文件放于 META-INF 目錄下,將也將 schemaorg_apache-xmlbeans 目錄和 skeleton 所在的源文件目錄放于一個目錄下。同時將 wsdl 文件也放于 META-INF 目錄下。

    ?

    perf 的操作如下:

    src 目錄下, javac –classpath .;%axis2classpath% org\apache\axis2\userguide\*.java

    編譯成功之后,將 schemaorg_apache_xmlbeans 目錄拷貝到 src 目錄下,建立一個 META-INF 目錄,將 resources 目錄下的 services.xml 文件和 *.wsdl 文件復制到 META-INF 目錄下

    src 目錄下,運行 jar 命令 jar -cfv perf.jar META-INF org schemaorg_apache_xmlbeans

    perf.jar 改名為 aar 部署到 tomcat 容器中。

    ?

    或者是在編輯完 skeleton 后,運行生成的 build.xml ,即 ant 命令,則 ant 會對程序進行編譯,成功之后,把生成的 build 目錄下的 classes 下的 org 目錄和 META-INF 還有 resources

    目錄下的 schemaorg_apache_xmlbeans 目錄添加到一個 jar 文件即可,更改 jar 擴展名為 aar 擴展名。

    ?

    3、 Web Service 客戶端使用Axis2調用服務

    ?

    ?????? 客戶端調用使用可以使用阻塞和非阻塞 API

    ?????? 阻塞模式( Blocking API ):一旦服務被調用,客戶端處于阻塞狀態,它不能執行其他的操作,除非收到服務端發送的響應信息或是出錯信息。(同步模式調用

    ?????? 非阻塞模式( Non-Blocking API ):這是一種基于回調或者是輪詢的 API 。當服務調用以后,客戶端立刻能獲得控制權進行其他操作,服務端的返回消息使用提供的 callback 對象得到。這樣可以使得客戶端應用程序可以同時調用多個 web services 而不用阻塞已經調用的操作。(異步模式調用)它們都是在 API 層實現。

    ?????? 根據 API 層的異步調用和傳輸層的異步調用 ,可以得到四種不同模式來調用 web services

    ?

    API (Blocking/
    Non-Blocking)

    ?Dual Trans
    ports (Yes/No)

    Description

    Blocking

    No

    Simplest and the familiar invocation pattern

    Non-Blocking

    No

    Using callbacks or polling

    Blocking

    Yes

    This is useful when the service operation is IN-OUT in nature but the transport used is One-Way (e.g. SMTP)

    Non-Blocking

    Yes

    This is can be used to gain the maximum asynchronous behavior. No blocking in the API level and also in the transport level

    ?

    客戶端調用 web 服務也有兩種方法:

    ü ???????? 編寫 axis2 的主要的 API

    ü ???????? 使用產生的 Stub 編寫

    ?

    1) ????? 使用 Axis2 的原始的 API 編寫客戶端來調用 Web Service

    ?????? 測試的例子在 Eclipse 集成開發環境下使用 ,例子見 axis2 samples 或是 F:\proTest\axis2\ClientInvoke 下的實例。

    2) ????? 使用 axis2 的代碼生成綁定數據來編寫 service

    ?????? 使用 WSDL2Java 命令來生成 stub ,對于 Axis2SampleDocLit.wsdl 操作如下:

    D:\ws_tools\axis2-std-1.0-bin\samples\wsdl>WSDL2Java -uri ..\..\samples\wsdl\Axi

    s2SampleDocLit.wsdl -o ..\..\samples\axisDocLitStub -p org.apache.axis2.userguide

    ?????? 編輯 axisDocLitStub\src\org\apache\axis2\userguide 目錄下的
    Axis2SampleDocLitServiceStub.java
    文件,編譯時可以直接使用 WSDL2Java 生成的 build.xml 文件使用 ant 命令進行編譯。

    ?

    4、 模塊(Module

    ?????? 為一個給定服務自定義模塊步驟有:

    (1) ?????? 創建模塊的實現

    (2) ?????? 創建 handler

    (3) ?????? 創建 module.xml 文件

    (4) ?????? 如果需要自定義 phases ,則要修改 axis2.xml

    (5) ?????? 修改 services.xml 文件使之在部署時結合 engage 模塊

    (6) ?????? 在一個 *.mar 文件中打包

    (7) ?????? 將模塊在 axis2 中部署

    ?

    例子:在 MyService 服務中添加一個 logging 模塊

    ?????? Logging 模塊的功能是它包含一個 handler ,此 handler 能夠記錄被傳遞的消息。在 axis2 中,使用 .mar 文件來部署模塊。模塊的結構如下圖所示:

    ?????? 步驟一 LoggingModule

    ?????? LoggingModule axis2 模塊的實現類, axis2 的模塊應該實現 org.apache.axis2.modules.Module 接口的方法

    ?????? // 實始化模塊操作

    ?????? Public void init(ConfigurationContext configContext,AxisModule module) throws AxisFault;

    ?????? // 模塊結束的處理

    ?????? Public void shutdown(AxisConfiguration axisSystem) throws AxisFault;

    ?????? Public void engageNotify(AxisDescription axisDescription) throws AxisFault;

    ?????? 此處的 loggingModule 中這三個方法的實現為空。

    ?????? 步驟二 LogHandler

    ?????? Axis2 中的 module 可以包含有一個或更多個 handler handler 可以在不同階段( phase )處理各種各樣的 SOAP 頭。要編寫一個 handler ,需要實現 org.apache.axis2.engin.Handler 類。便利其見, org.apache.axis2.handlers.AbstractHandler 類提供 Handler 接口的抽象實現。在 hander 中,方法 invoke revoke 表示如下:

    Public void invoke(MessageContext ctx)// 將控制權交給 handler 時由 axis2 的引擎調用 invoke

    Public void revoke(MessageContext ctx)// hander 被撤消時由 axis2 引擎來調用 revoke 方法

    位置: F:\protest\axis2\myservicemodule\loggingmodule

    ?????? 步驟三 module.xml

    ?????? Module.xml 文件包含了對特殊模塊的部署配置。它包含的信息詳細如:模塊的實現類(如 LoggingModule 類可以在不同的階段運行), module.xml 文件配置信息中主要的元素有表現了不同階段的說明:

    ?Inflow :代表了 handler chain 在一個消息到來時運行

    ?Outflow :代表了 handler chain 在消息離開時運行

    ?Outfaultflow :代表 handler chain 將在出現故障并且故障離開時運行

    ?Infaultflow :代表 handler chain 將在出現故障并且故障進入時運行。

    ?????? 步驟四 :修改 axis2.xml 文件

    ?????? 因為“ loggingPhase ”是由模塊的編寫者自己定義的,它不是 axis2 預先定義的,所以需要針其介紹到 axis2.xml 文件中,這樣 axis2 的引擎可以知道在哪兒以不同的“ flows (如 InFlow,OutFlow )”安放 handler 。更改后的 axis2.xml 文件見 axis2 user’s guide 的第四部分。

    Axis2.xml 文件中定義的是幾個 phases

    ?

    ?????? 步驟五 :修改 services.xml 文件

    ?????? services.xml 文件中添加 module 元素,使用 ref 來指向使用的模塊,如:

    ?????? <module ref=”logging”/>

    ?????? 步驟六 :打包 packaging

    ?????? 在部署模塊之前,需要創建一個 *.mar 文件 , 對于 loggingmodule 創建的模塊文件為 logging.mar ,使用 jar 生成 logging.jar 文件,再將擴展名更改。

    ?????? 先編譯系統: F:\proTest\axis2\MyServiceModule>javac -classpath .;%axis2classpath% userguide\loggingmodule\*.java

    ?????? 步驟七:部署模塊

    ?????? mar 文件放入 axis2 WEB-INF modules 目錄下。

    ?

    ?????? 對于日志文件的修改需要,在 tomcat 下,更改 log4j.properties 文件,屬性文件的位置在 webapps\axis2\WEB-INF\classes 目錄下,將 log4j.rootCategory=ERROR,LOGFILE 改為 log4j.rootCategory=INFO,ERROR,LOGFILE

    ?

    ?

    5、 其他例子

    ?????? 現實例子說明使用 axis2 的功能

    ?????? Google spell checker sample

    ?????? Google search sample

    ?????? Amazon queuing sample

    Google spell checker sample : 提供的服務是拼寫檢查,使用了 blocking non-blocking 模式來調用服務。 \samples\googleSpellcheck

    Google Search Sample: 包含一個檢查程序,它使用了在 SOAP API 之上的檢查。客戶端使用 non-blocking 模式。 Samples\googleSearch

    Amazon Queuing Service :說明如何使用 Amazon 查詢服務。它有兩個用戶接口,一個是用于入隊( enqueue ),另一個是出隊( dequeue )。例子位置 samples\amazonQS

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    posted on 2006-11-11 20:49 嘎崩豆 閱讀(4098) 評論(7)  編輯  收藏 所屬分類: web services

    Feedback

    # re: Axis2 用戶指南學習 2006-11-11 20:51 嘎崩豆
    怎么搞的啊,亂七八糟的?  回復  更多評論
      

    # re: Axis2 用戶指南學習 2006-11-11 20:54 嘎崩豆
    權當學習備份點了,以后要再上傳要好好學習技巧了  回復  更多評論
      

    # re: Axis2 用戶指南學習 2006-11-11 21:37 冰川
    呵呵,辛苦了!!!  回復  更多評論
      

    # re: Axis2 用戶指南學習 2006-11-12 16:00 shrimplucky
    @冰川
    呵呵,讓您見笑了,沒有技術含量的內容 :)  回復  更多評論
      

    # re: Axis2 用戶指南學習 2008-01-08 10:08
    垃圾!  回復  更多評論
      

    # re: Axis2 用戶指南學習 2009-02-04 09:26 Tite
    還是學到很多東西的,我是個初學者,多謝LZ了  回復  更多評論
      

    # re: Axis2 用戶指南學習 2009-07-27 11:14 PJ
    都是一些摘抄拼起來的東西  回復  更多評論
      

    主站蜘蛛池模板: 亚洲国产成人久久一区WWW| 啦啦啦在线免费视频| 亚洲精品无码专区在线在线播放| 亚洲国产区男人本色| 免费黄色网址入口| 亚洲丶国产丶欧美一区二区三区| 女人被弄到高潮的免费视频| 亚洲人成网站在线播放2019| 暖暖免费高清日本一区二区三区| 中文字幕乱码亚洲无线三区 | 成人免费视频观看无遮挡| 亚洲欧洲视频在线观看| 成人免费视频69| 亚洲成a人片在线观看精品| 成年女人免费视频播放体验区| 77777午夜亚洲| 国产成人青青热久免费精品| 美女被艹免费视频| 亚洲三区在线观看无套内射| 2020因为爱你带字幕免费观看全集| 亚洲国产精品白丝在线观看| 在线A级毛片无码免费真人| 黄色三级三级免费看| 久久亚洲精品视频| 国产精品久久免费| 国产av无码专区亚洲av毛片搜| 亚洲情a成黄在线观看| 久久国产免费一区| 亚洲真人无码永久在线观看| 亚洲精品无码专区2| 久99久精品免费视频热77| 亚洲 欧洲 视频 伦小说| 亚洲av区一区二区三| 日韩成人免费视频| 亚洲成a人片在线不卡一二三区| 国产亚洲美日韩AV中文字幕无码成人| 免费毛片a线观看| 亚洲欧美日韩中文高清www777| 爱情岛论坛网亚洲品质自拍| 黄色成人免费网站| 又粗又长又爽又长黄免费视频|