`

实现axis2两种不同方式的客户端

阅读更多
原文:http://johntor.iteye.com/blog/253605
正在学习axis2,上面的文章对我们初学者来说是一个很大的帮助,便转了过来,非常感谢那些分享自己经验的人。

1.一个简单的服务类 ,并把它发布为web service服务。注意我的工程名为Test
package test;   
  
public class TestService {   
       
    public int add(int a, int b) {   
        return a + b;   
    }   
       
    public String each(String name) {   
        return name  + "你好";   
    }   
  
}  


2.应用两种方式实现客户端调用

import javax.xml.namespace.QName;   
  
import org.apache.axiom.om.OMAbstractFactory;   
import org.apache.axiom.om.OMElement;   
import org.apache.axiom.om.OMFactory;   
import org.apache.axiom.om.OMNamespace;   
import org.apache.axis2.AxisFault;   
import org.apache.axis2.addressing.EndpointReference;   
import org.apache.axis2.client.Options;   
import org.apache.axis2.client.ServiceClient;   
import org.apache.axis2.rpc.client.RPCServiceClient;   
  
/**  
 * axis2提供rpc和document两种style的实现。  
 * 在这里我们别对其验证。关于说明,请参看代码中的注释  
 * @author Administrator  
 *  
 */  
public class Client {   
       
    public static void main(String[] args) {   
           
        Client client = new Client();   
        //测试rpc方式   
        client.testRPC();   
           
        //测试document方式   
        client.testDocument();   
    }   
       
    /**  
     * 应用rpc的方式调用  
     * 这种方式就等于远程调用,即通过url定位告诉远程服务器,告知方法名称,参数等,  
     * 调用远程服务,得到结果。  
     */  
    //下面这个annotaion是为了不让代码出现关于没有应用泛型的警告信息   
    //用elipse做编辑器的很容易理解。   
    @SuppressWarnings("unchecked")   
    public void testRPC() {   
        try {   
            RPCServiceClient serviceClient = new RPCServiceClient();   
            Options options = serviceClient.getOptions();   
            //指定访问的web service地址   
            EndpointReference targetEPR = new EndpointReference(   
                    "http://localhost:8080/Test/services/TestService");   
            options.setTo(targetEPR);   
  
            //指定方法,注意指定命名空间   
            QName opPrint = new QName("http://test",   
                    "add");   
            //确定参数类型和参数值   
            Class[] returnTypes = new Class[] { int.class };   
            Object obj[] = new Object[] { 1, 2 };   
            //得到返回结果,是一个数组   
            Object[] order = serviceClient.invokeBlocking(opPrint, obj,   
                    returnTypes);   
            System.out.println(order[0]);   
               
               
            //下面是测试each方法的。和上面类似   
            opPrint = new QName("http://test","each");   
            returnTypes = new Class[] { String.class };   
            obj = new Object[] { "zhangyt" };   
            order = serviceClient.invokeBlocking(opPrint, obj,   
                    returnTypes);   
            System.out.println(order[0]);   
               
        } catch (AxisFault e) {   
            e.printStackTrace();   
        }      
    }   
       
    /**  
     * 应用document方式调用  
     * 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合  
     */  
    public void testDocument() {   
        try {   
            ServiceClient sc = new ServiceClient();   
            Options opts = new Options();   
            //确定目标服务地址   
            opts.setTo(new EndpointReference(   
                    "http://localhost:8080/Test/services/TestService"));   
            //确定调用方法   
            opts.setAction("urn:add");   
            sc.setOptions(opts);   
            //发送请求并并得到返回结果,注意参数生成方法的分析   
            OMElement res = sc.sendReceive(createPayLoad());   
            //值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。   
            //我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果   
            res.getFirstElement().getText();   
            System.out.println(res.getFirstElement().getText());   
        } catch (AxisFault e) {   
            e.printStackTrace();   
        }   
    }   
    /**  
     * ServiceClient 中 sendReceive(OMElement args) 方法参数的生成  
     * @return  
     */  
    public static OMElement createPayLoad(){    
        OMFactory fac = OMAbstractFactory.getOMFactory();   
        //指定命名空间   
        OMNamespace omNs = fac.createOMNamespace("http://test", "nsl");   
        //指定方法   
        OMElement method = fac.createOMElement("add",omNs);   
        //指定方法的参数   
        OMElement value = fac.createOMElement("value",omNs);    
        value.setText("1");    
        method.addChild(value);    
        OMElement value1 = fac.createOMElement("value",omNs);   
        value1.setText("2");   
        method.addChild(value1);   
        //返回方法(实际上就是OMElement封装的xml字符串)   
        return method;    
    }   
  
}  


注意上面实现document方式调用的时候,只测试了服务类中的add方法。这个方法都用了,each方法调用的写法就可知比这个还要简单。
分享到:
评论

相关推荐

    基于axis2实现的webservice简单实现(客户端+服务端)。

    【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...

    axis2客户端需要的jar包

    在开发Axis2客户端时,正确地引入所需的jar包是至关重要的,因为这些库提供了与服务交互所需的各种功能。以下是关于Axis2客户端需要的jar包及其功能的详细解释: 1. **axis2-adb.jar**:这个jar包包含了Axis2的数据...

    axis2客户端

    3. **MTOM/XOP优化**:Message Transmission Optimization Mechanism (MTOM) 和XOP (XML-binary Optimized Packaging) 是两种提高Web服务传输效率的技术,Axis2客户端支持这两种机制,能有效地处理二进制数据。...

    cxf客户端调用axis服务端流程

    在Java开发中,CXF和Axis是两种广泛使用的Web服务框架。CXF主要用来创建和消费SOAP和RESTful Web服务,而Axis则是Apache组织早期推出的一款Web服务框架,主要用于SOAP服务。本文将深入探讨如何使用CXF客户端调用Axis...

    用脚本生成axis2的客户端

    标题中的“用脚本生成axis2...总的来说,通过脚本生成Axis2客户端是Web服务客户端开发的一种高效方式,尤其适用于快速集成和测试。在实际项目中,开发者可以根据需求选择合适的生成方法,平衡代码简洁性和功能复杂性。

    axis1.4生成客户端

    - WSDL2Java和Java2WSDL工具:这两个工具是Axis1.4的核心部分,它们帮助开发者在WSDL和Java代码之间转换。 - JAX-WS(Java API for XML Web Services):这是Java平台标准,用于创建和处理Web服务,它是Axis2的...

    axis2支持webservice 自动生成代码客户端服务端代码插件

    压缩包子文件的文件名称列表中,"org.apache.axis2.eclipse.codegen.plugin_1.7.7.jar"和"org.apache.axis2.eclipse.service.plugin_1.7.7.jar"是Axis2插件的两个组件。前者专注于代码生成,即从WSDL生成服务端和...

    在自己的项目中利用axis2+spring发布webservice与客户端调用包括session

    在axis2+spring的环境下,可以通过两种方式处理session: - **SOAP Header**:可以将session信息封装在SOAP消息的Header部分,每次请求时携带。 - **Cookie**:客户端和服务端可以通过Cookie来维护会话状态,但...

    AXIS2 RCP/literal样式,两种MESSAGE定义方式SOAP的payload

    总结起来,AXIS2 RCP/literal样式中的两种MESSAGE定义方式对于开发和调试SOAP Web服务客户端至关重要。硬编码XML字符串适用于简单场景,而JOM更适合处理复杂的业务逻辑和数据结构。TCPMon作为一个实用的辅助工具,...

    Axis_API和axis2_API

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis和Axis2是两种流行的Java SOAP(简单对象访问协议)框架,用于构建和消费Web服务。本文将深入探讨这两个API,以及它们在Web服务开发中的作用。 ...

    Axis2各种方式实现WebService案例代码

    总结起来,Axis2提供了多样化的Web服务实现方式,适应不同开发需求。选择合适的方式取决于项目的规模、性能要求以及团队对XML处理的熟悉程度。理解并掌握这些技术,对于提升Java Web服务开发的效率和质量具有重要...

    Axis2例子Demo

    2. **服务部署**:Axis2支持两种部署方式——存档部署和热部署。存档部署通过将服务打包为`.aar`文件进行部署,而热部署允许直接通过类路径加载服务。 3. **模块**:模块是Axis2中的可插拔组件,可以添加额外的功能...

    s2axis2 实例

    在Java世界中,Web服务的开发是一项常见的任务,而Seasar2 Axis2项目提供了一种高效且灵活的方式来实现这一目标。Seasar2是一个全面的Java应用框架,它包含了诸如数据库访问、事务管理、权限控制等多方面的功能,而...

    axis2webservice接口例子

    Apache Axis2是Web服务的实现框架,而Web服务本身则是一种允许不同系统之间交换数据的标准协议。在Java开发中,Axis2常被用来简化Web服务的创建和消费过程,使得不同编程语言和平台之间的通信变得可能。 在压缩包子...

    axis客户端

    使用Axis客户端,开发者可以轻松地集成远程服务到自己的应用程序中,使得不同系统之间的交互变得无缝。 1. **rt.jar**:这是一个运行时库,包含了Java标准版(JRE)的基础类库。在Java应用程序中,rt.jar是Java运行...

    axis2 webservice 所需最少jar包

    1. **axis2-adb.jar**:Axis2 Data Binding (ADB) 是一种轻量级的数据绑定框架,用于自动将XML到Java对象的转换。它简化了Web服务数据的序列化和反序列化过程。 2. **axis2-kernel.jar**:这是Axis2的核心库,包含...

    Axis2WebService 源码

    11. **代码第一(Code First)和WSDL First**:Axis2支持两种开发模式,即根据已有代码生成WSDL(Code First)和根据WSDL生成代码(WSDL First)。 12. **SOAP版本支持**:Axis2支持SOAP 1.1和1.2,能够处理不同...

    Axis2教程和java调用webservice的各种方法总结

    标题“Axis2教程和java调用webservice的各种方法总结”表明了本文档主要聚焦于两个核心内容:一是Axis2框架的使用教程,二是Java语言调用Web服务的不同方法的综合概述。 描述中的“Axis2教程”暗示了会详细讲解Axis...

    基于axis2的webservice

    调用Web服务通常分为两种方式:同步调用和异步调用。 - **同步调用**:客户端发送请求,等待服务端返回响应,完成一次交互。 - **异步调用**:客户端发送请求后不等待响应,而是通过回调机制处理服务端的返回。 ...

Global site tag (gtag.js) - Google Analytics