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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
    Axis2可以通過模塊(Module)進行擴展。Axis2模塊至少需要有兩個類,這兩個類分別實現了ModuleHandler接口。開發和使用一個Axis2模塊的步驟如下:

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

    2.?編寫實現Handler接口的類。該類是Axis2模塊的業務處理類。

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

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

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

    6.?發布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類實現了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類并沒實現實際的功能,但該類必須存在。當Tomcat啟動時會裝載該Axis2模塊,同時會調用LoggingModule類的init方法,并在Tomcat控制臺中輸出“init”。

    2步:編寫LogHandler

    ??? LogHandler類實現了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步:發布logging模塊

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

    logging.mar

    ??? module\LoggingModule.class

    ??? module\LogHandler.class

    ??? META-INF\module.xml

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

    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模塊。

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

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

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


    posted on 2009-09-23 14:42 禮物 閱讀(581) 評論(0)  編輯  收藏 所屬分類: Axis
    主站蜘蛛池模板: 免费在线黄色网址| 欧美激情综合亚洲一二区| 男人的天堂亚洲一区二区三区| 免费国产在线精品一区 | 亚洲天堂一区在线| 国产亚洲一区区二区在线 | 亚洲精品视频在线| 亚洲人成色77777在线观看大| 女人张腿给男人桶视频免费版| 2021在线永久免费视频| 三级网站免费观看| 一级毛片免费一级直接观看| 色婷婷六月亚洲综合香蕉| 亚洲1234区乱码| 亚洲国产成人久久三区| 精品无码一区二区三区亚洲桃色 | 美女免费视频一区二区三区| 亚洲人成电影网站久久| 亚洲性猛交xx乱| 亚洲视频一区在线观看| 亚洲国产精品久久66| 亚洲av无码无在线观看红杏| 国产午夜亚洲精品国产成人小说| 国产又大又长又粗又硬的免费视频 | 久久久久国色av免费看| www永久免费视频| 无码人妻一区二区三区免费视频| 亚洲另类无码专区首页| 亚洲男同gay片| 在线亚洲高清揄拍自拍一品区| 亚洲午夜久久久精品电影院| 亚洲高清视频在线观看| 亚洲∧v久久久无码精品| 亚洲va中文字幕无码久久| 亚洲第一AV网站| 亚洲熟妇中文字幕五十中出| 国产亚洲AV手机在线观看| 亚洲人成色777777在线观看| 久久精品国产亚洲麻豆| 亚洲人成在线播放网站岛国| 久久精品国产亚洲AV大全|