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

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

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

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    WebService大講堂之Axis2(9):編寫Axis2模塊(Module)

    本文為原創(chuàng),如需轉載,請注明作者和出處,謝謝!

    上一篇:WebService大講堂之Axis2(8):異步調用WebService

        Axis2可以通過模塊(Module)進行擴展。Axis2模塊至少需要有兩個類,這兩個類分別實現(xiàn)了ModuleHandler接口。開發(fā)和使用一個Axis2模塊的步驟如下:

    1. 編寫實現(xiàn)Module接口的類。Axis2模塊在進行初始化、銷毀等動作時會調用該類中相應的方法)。

    2. 編寫實現(xiàn)Handler接口的類。該類是Axis2模塊的業(yè)務處理類。

    3. 編寫module.xml文件。該文件放在META-INF目錄中,用于配置Axis2模塊。

    4. axis2.xml文件中配置Axis2模塊。

    5. services.xml文件中配置Axis2模塊。每一個Axis2模塊都需要使用<module>元素引用才能使用。

    6. 發(fā)布Axis2模塊。需要使用jar命令將Axis2模塊壓縮成.mar包(文件擴展名必須是.mar),然后將.mar文件放在

    <Tomcat安裝目錄>\webapps\axis2\WEB-INF\modules目錄中。   
        先來編寫一個WebService類,代碼如下:

    package service;

    public class MyService
    {
        
    public String getGreeting(String name)
        {
            
    return "您好 " + name;
        }
    }

        下面我們來編寫一個記錄請求和響應SOAP消息的Axis2模塊。當客戶端調用WebService方法時,該Axis2模塊會將請求和響應SOAP消息輸出到Tomcat控制臺上。

    1步:編寫LoggingModule

        LoggingModule類實現(xiàn)了Module接口,代碼如下:

    package module;

    import org.apache.axis2.AxisFault;
    import org.apache.axis2.context.ConfigurationContext;
    import org.apache.axis2.description.AxisDescription;
    import org.apache.axis2.description.AxisModule;
    import org.apache.axis2.modules.Module;
    import org.apache.neethi.Assertion;
    import org.apache.neethi.Policy;

    public class LoggingModule implements Module
    {
        
    // initialize the module
        public void init(ConfigurationContext configContext, AxisModule module)
                
    throws AxisFault
        {
            System.out.println(
    "init");
        }
        
    public void engageNotify(AxisDescription axisDescription) throws AxisFault
        {
        }
        
    // shutdown the module
        public void shutdown(ConfigurationContext configurationContext)
                
    throws AxisFault
        {
            System.out.println(
    "shutdown");
        }
        
    public String[] getPolicyNamespaces()
        {
            
    return null;
        }
        
    public void applyPolicy(Policy policy, AxisDescription axisDescription)
                
    throws AxisFault
        {
        }
        
    public boolean canSupportAssertion(Assertion assertion)
        {
            
    return true;
        }
    }

        在本例中LoggingModule類并沒實現(xiàn)實際的功能,但該類必須存在。當Tomcat啟動時會裝載該Axis2模塊,同時會調用LoggingModule類的init方法,并在Tomcat控制臺中輸出“init”。

    2步:編寫LogHandler

        LogHandler類實現(xiàn)了Handler接口,代碼如下:

    package module;

    import org.apache.axis2.AxisFault;
    import org.apache.axis2.context.MessageContext;
    import org.apache.axis2.engine.Handler;
    import org.apache.axis2.handlers.AbstractHandler;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;

    public class LogHandler extends AbstractHandler implements Handler
    {
        
    private static final Log log = LogFactory.getLog(LogHandler.class);
        
    private String name;
        
    public String getName()
        {
            
    return name;
        }
        
    public InvocationResponse invoke(MessageContext msgContext)
                
    throws AxisFault
        {
            
    //  向Tomcat控制臺輸出請求和響應SOAP消息
            log.info(msgContext.getEnvelope().toString());
            
    return InvocationResponse.CONTINUE;
        }
        
    public void revoke(MessageContext msgContext)
        {
            log.info(msgContext.getEnvelope().toString());
        }
        
    public void setName(String name)
        {
            
    this.name = name;
        }
    }

        LogHandler類的核心方法是invoke,當使用該Axis2模塊的WebService的方法被調用時,LogHandler類的invoke方法被調用。   

    3步:編寫module.xml文件   

        在META-INF目錄中建立一個module.xml文件,內容如下:
    <module name="logging" class="module.LoggingModule">
        
    <InFlow>
            
    <handler name="InFlowLogHandler" class="module.LogHandler">
                
    <order phase="loggingPhase"/>
            
    </handler>
        
    </InFlow>
        
    <OutFlow>
            
    <handler name="OutFlowLogHandler" class="module.LogHandler">
                
    <order phase="loggingPhase"/> 
            
    </handler>
        
    </OutFlow>

        
    <OutFaultFlow>
            
    <handler name="FaultOutFlowLogHandler" class="module.LogHandler">
                
    <order phase="loggingPhase"/>
            
    </handler>
        
    </OutFaultFlow>
        
    <InFaultFlow>
            
    <handler name="FaultInFlowLogHandler" class="module.LogHandler">
                
    <order phase="loggingPhase"/>
            
    </handler>
        
    </InFaultFlow>
    </module>

    4步:在axis2.xml文件中配置Axis2模塊

        打開axis2.xml文件,分別在如下四個<phaseOrder>元素中加入<phase name="loggingPhase"/>

    <phaseOrder type="InFlow">
         
        <phase name="soapmonitorPhase"/>
        <phase name="loggingPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFlow">
         
        
    <phase name="Security"/>
        
    <phase name="loggingPhase"/>
    </phaseOrder>
    <phaseOrder type="InFaultFlow">
         
        
    <phase name="soapmonitorPhase"/>
        
    <phase name="loggingPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFaultFlow">
         
        
    <phase name="Security"/>
        
    <phase name="loggingPhase"/>
    </phaseOrder>

    5步:在services.xml文件中引用logging模塊

        services.xml文件的內容如下:

    <service name="myService">
        
    <description>
            使用logging模塊
        
    </description>
        
    <!--  引用logging模塊  -->
        
    <module ref="logging"/>
        
    <parameter name="ServiceClass">
            service.MyService   
        
    </parameter>
        
    <messageReceivers>
            
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                class
    ="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
        
    </messageReceivers>
    </service>

    6步:發(fā)布logging模塊

        到現(xiàn)在為止,我們應用可以建立兩個發(fā)行包:logging.marservice.aar。其中logging.mar文件是Axis2模塊的發(fā)行包,該包的目錄結構如下:

    logging.mar

        module\LoggingModule.class

        module\LogHandler.class

        META-INF\module.xml

        service.aar文件是本例編寫的WebService發(fā)行包,該包的目錄結構如下:

    service.aar

        service\MyService.class

        META-INF\services.xml

        logging.mar文件放在<Tomcat安裝目錄>\webapps\axis2\WEB-INF\modules目錄中,將service.aar文件放在<Tomcat安裝目錄>\webapps\axis2\WEB-INF\services目錄中。要注意的是,如果modules目錄中包含了modules.list文件,Axis2會只裝載在該文件中引用的Axis2模塊,因此,必須在該文件中引用logging模塊,該文件的內容如下:

    addressing-1.4.1.mar

    soapmonitor-1.4.1.mar

    ping-1.4.1.mar

    mex-1.4.1.mar

    axis2-scripting-1.4.1.mar

    logging.mar

        如果modules目錄中不包含modules.list文件,則Axis2會裝載modules文件中的所有Axis2模塊。

        現(xiàn)在啟動Tomcat,使用如下的C#代碼調用MyServicegetGreeting方法則會在Tomcat控制臺中輸出相應的請求和響應SOAP消息。

    //  async是引用MyService的服務名
    async.myService my = new WSC.asyn.myService();
    MessageBox.Show(my.getGreeting(
    "中國"));
    MessageBox.Show(
    "完成調用");

        在執(zhí)行上面的代碼后,在Tomcat控制臺中輸出的信息如下圖所示。


    下一篇:
    WebService大講堂之Axis2(10):使用soapmonitor模塊監(jiān)視soap請求與響應消息





    Android開發(fā)完全講義(第2版)(本書版權已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-02-16 09:05 銀河使者 閱讀(12782) 評論(3)  編輯  收藏 所屬分類: java 原創(chuàng)webservice

    評論

    # re: WebService大講堂之Axis2(9):編寫Axis2模塊(Module)  回復  更多評論   

    感謝分享,我在生成mar時候,引用了所有axis2的jar才生成class,汗。
    但是發(fā)布到axis2的module下,啟動tomcat后報錯,module.xml not found,實際上已經放到META-INF文件夾下了,lz能不能分享下代碼文件那?
    2009-09-16 13:32 | 大力

    # re: WebService大講堂之Axis2(9):編寫Axis2模塊(Module)  回復  更多評論   

    @大力
    生成mar時好像不需要引用任何jar包的,我是寫好module和handler類后建立了一個文件夾,放入編譯后的class文件,然后建立一個META-INF目錄,拷貝一個module.xml按照自己的文件進行修改,然后通過jar 命令生成mar包,沒有任何問題,不曉得你所說的只有引用了axis2的jar才生成class是指哪個環(huán)節(jié)。下面Tomcat報錯說module.xml估計是位置沒有放正確,請參照樓主上面對mar文件的目錄結構認真檢查,我的已經按照樓主的步驟成功運行了。
    2010-01-21 16:38 | Mr.Blue

    # re: WebService大講堂之Axis2(9):編寫Axis2模塊(Module)  回復  更多評論   

    你好!發(fā)布service的時候向services.xml中添加<parameter name="ServiceTCCL">composite</parameter>即可以調用自己定義的類,那請問如果模塊引用自己的類,該怎么做呢?
    2014-11-20 15:22 | sma
    主站蜘蛛池模板: 久久精品国产亚洲Aⅴ蜜臀色欲| 欧美亚洲国产SUV| 亚洲综合色区在线观看| 成年在线网站免费观看无广告 | 成人免费看黄20分钟| 久久综合给合久久国产免费| 特级做a爰片毛片免费看| 亚洲午夜理论片在线观看| 亚洲色图.com| 亚洲成在人天堂在线| 亚洲午夜久久久久久久久久| 国产一级淫片免费播放电影| 97在线线免费观看视频在线观看| 免费人成在线观看网站| free哆拍拍免费永久视频| 在线播放国产不卡免费视频| 99亚洲男女激情在线观看| 亚洲色中文字幕在线播放| 亚洲AV色吊丝无码| 亚洲精品中文字幕乱码| 亚洲伦理一区二区| 亚洲精品成人av在线| 婷婷亚洲综合五月天小说| 亚洲成色在线综合网站| 中文字幕亚洲激情| 国产亚洲一区二区三区在线不卡| 亚洲Av无码乱码在线观看性色| 国产精品深夜福利免费观看 | 亚洲午夜精品一区二区公牛电影院| 亚洲Aⅴ无码专区在线观看q| 亚洲理论电影在线观看| 亚洲永久无码3D动漫一区| 久久精品国产亚洲5555| 国产亚洲成av片在线观看 | 久久国产免费一区| 美丽姑娘免费观看在线观看中文版| a在线免费观看视频| 免费看无码特级毛片| 黄网站免费在线观看| 无码免费一区二区三区免费播放| 久久久久国产免费|