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 礼物 阅读(2628) 评论(0)  编辑  收藏 所属分类: Axis