Terry.Li-彬

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

          (原) Axis2 RPC AXIOM 兩種方式

          ?

          因為項目需要在瀏覽器上調用 webservice ,在瀏覽器上返回自定義的 xml 格式結果,不需要返回 soap 封裝后的結果,故使用如下方式實現

          項目結構

          ?

          src

          --com.lucky.ws

          ----AdminService.java

          --META-INF

          ----services.xml

          ?

          package com.lucky.ws;

          ?

          import org.apache.axiom.om.OMAbstractFactory;

          import org.apache.axiom.om.OMElement;

          import org.apache.axiom.om.OMFactory;

          import org.apache.axiom.om.OMNamespace;

          ?

          public class AdminService {

          ??? /*

          ??? ?* RPC 方式

          ??? ?* public String validate(String format, String component){

          ?????? System.out.println("afdasfasfdad");

          ??????

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

          ?????? +"admin>"

          ?????? +"status>"

          ?????? +"name>Server</name>"

          ?????? +"value>[ok|fail]</value>"

          ?????? +"/status>";

          ??? }*/

          ???

          ??? /*

          ??? ?* 使用 AXIOM 方式

          ??? ?*/

          ??? public OMElement validate(OMElement e){

          ?????? OMFactory fac = OMAbstractFactory.getOMFactory();

          ?????? OMNamespace omNs =

          ??????????? fac.createOMNamespace( "" , "tns" );

          ???????

          ??????? OMElement admin = fac.createOMElement( "admin" , omNs);

          ?

          ??????? OMElement status = fac.createOMElement( "status" , omNs);

          ??????? admin.addChild(status);

          ?

          ??????? OMElement name = fac.createOMElement( "name" , omNs);

          ??????? name.addChild(fac.createOMText(name, "Service" ));

          ??????? status.addChild(name);

          ??????

          ??????? OMElement value = fac.createOMElement( "value" , omNs);

          ??????? value.addChild(fac.createOMText(value, "[ok|fail]" ));

          ??????? status.addChild(value);

          ???????

          ??????? OMElement status2 = fac.createOMElement( "status" , omNs);

          ??????? admin.addChild(status2);

          ?

          ??????? OMElement name2 = fac.createOMElement( "name" , omNs);

          ??????? name2.addChild(fac.createOMText(name2, "Error" ));

          ??????? status2.addChild(name2);

          ??????

          ??????? OMElement value2 = fac.createOMElement( "value" , omNs);

          ??????? value2.addChild(fac.createOMText(value2, "msg" ));

          ??????? status2.addChild(value2);

          ?????? ? return admin;

          ??? }

          }

          ?

          ?

          <!--

          ??? 使用 RPC 方式,這種方式如果在瀏覽器上直接使用 url 調用的話,返回結果是 soap 封裝格式,這種方式在 WS 的方法參數和返回值上可以用戶自定義(原始數據類型)

          <service name="admin" scope="application">???

          ??? <messageReceivers>???

          ??????? <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>???

          ??????? <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>???

          ??? </messageReceivers>???

          ??? <parameter name="ServiceClass">com.lucky.ws.AdminService</parameter>???

          </service>

          -->

          ?

          <!-- 使用 AXIOM 方式,這種方式可以用戶自己在代碼中定義對象結構,在瀏覽器上可以返回用戶自定義的 xml 格式,但是對應的 WS 方法的參數和返回值必須為 final OMElement 類型 -->

          <service name= "admin" scope= "application" >

          ??? <operation name= "validate" >

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

          ??? </operation>

          ??? <parameter name= "ServiceClass" > com.lucky.ws.AdminService </parameter>

          </service>

          ?

          ?

          部署:

          啟動 tomcat

          Eclipse 中在項目 src 目錄上右鍵,導出為 aar 包,將該包放入 tomcat_home\webapps\axis2\WEB-INF\services 下, tomcat 會自動部署,

          ?

          ?

          訪問:

          在瀏覽器上訪問:

          http://localhost:8080/axis2/services /admin/validate?format=xml&component=aa

          ?

          說明:

          http://localhost:8080/axis2/services ?? 所有 webservice 都一樣

          /admin ?????????????????????????????????????????????????????????? services.xml 中定義的 webservice

          /validate????????????????????????????????????????????????????????? services.xml 中定義暴漏的 WS 方法

          ?format=xml&component=aa??????????????????????????? 參數隨便( AXIOM 會將他封裝到 OMElement Child 中,調用需要遍歷

          ?

          posted on 2010-01-06 16:23 禮物 閱讀(2637) 評論(0)  編輯  收藏 所屬分類: Axis
          主站蜘蛛池模板: 公主岭市| 和林格尔县| 江川县| 凤城市| 天津市| 山东| 汉阴县| 上虞市| 肇源县| 孟村| 宣化县| 吕梁市| 章丘市| 钦州市| 兴业县| 阳西县| 曲麻莱县| 虹口区| 灵宝市| 庆阳市| 临江市| 泽库县| 沐川县| 漳浦县| 天气| 怀安县| 江川县| 喜德县| 汕尾市| 无极县| 万宁市| 乡宁县| 凤庆县| 沙河市| 南充市| 永仁县| 尼勒克县| 日照市| 新田县| 灵丘县| 永吉县|