Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

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

          (原) Axis2 RPC AXIOM 兩種方式

          ?

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

          項目結(jié)構(gòu)

          ?

          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 調(diào)用的話,返回結(jié)果是 soap 封裝格式,這種方式在 WS 的方法參數(shù)和返回值上可以用戶自定義(原始數(shù)據(jù)類型)

          <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 方式,這種方式可以用戶自己在代碼中定義對象結(jié)構(gòu),在瀏覽器上可以返回用戶自定義的 xml 格式,但是對應(yīng)的 WS 方法的參數(shù)和返回值必須為 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 目錄上右鍵,導(dǎo)出為 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??????????????????????????? 參數(shù)隨便( AXIOM 會將他封裝到 OMElement Child 中,調(diào)用需要遍歷

          ?

          posted on 2010-01-06 16:23 禮物 閱讀(2637) 評論(0)  編輯  收藏 所屬分類: Axis
          主站蜘蛛池模板: 新和县| 东山县| 藁城市| 沙湾县| 枞阳县| 伊通| 耿马| 涿鹿县| 武乡县| 宾阳县| 万安县| 南康市| 永城市| 翁源县| 潼南县| 广丰县| 马山县| 黄浦区| 西盟| 九寨沟县| 博湖县| 蒲江县| 老河口市| 文成县| 大宁县| 桦甸市| 荔波县| 佳木斯市| 吉隆县| 亳州市| 宁南县| 临漳县| 济源市| 宣武区| 合肥市| 烟台市| 东平县| 南充市| 澄迈县| 龙陵县| 青川县|