`
tw5566
  • 浏览: 455358 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

实现axis2两种不同方式的客户端(转载)

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

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

package test;   
  
public class TestService {   
       
    public int add(int a, int b) {   
        return a + b;   
    }   
       
    public String each(String name) {   
        return name  + "你好";   
    }   
  
}  

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

Java代码 
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;       
    }      
     
}   

分享到:
评论

相关推荐

    axis2客户端调用axis1服务接口

    axis2客户端调用axis1服务接口 调用方式 使用RPC方式调用WebService,为了防止冲突可以增加 // 与weblogic的lib冲突配置 System.setProperty("javax.xml.stream.XMLInputFactory", ...

    axis2根据wsdl生成java客户端代码

    axis2根据wsdl生成java客户端代码 D:\Software\axis2-1.6.2\bin>wsdl2java.bat -uri http://10.33.30.216:9099/facs/services/ResourceSynchroWebService?wsdl -o E:\wsdloutput -p com.util wsdl2java.bat -uri ...

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

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

    Axis客户端的几种实现方式

    标题中的“Axis客户端的几种实现方式”指的是在Java开发中,使用Axis库来创建和使用Web服务客户端的不同方法。Axis是Apache软件基金会的一个开源项目,它提供了一个强大的工具集,用于处理SOAP(简单对象访问协议)...

    axis2生成客户端服务端代码

    ### Axis2生成客户端与服务端代码详解 #### 一、Axis2简介 Axis2是Apache组织下的一个开源项目,它是一种高性能、轻量级的Web服务框架,支持SOAP和REST等协议,能够帮助开发者轻松地构建和部署Web服务。Axis2提供了...

    Axis2快速发布服务端以及客户端详解(根据wsdl)

    Axis2快速发布服务详解:包括服务端与客户端。 此资源只包括脚本以及说明,整个目录没有上传。 我在此说明一下:根目录Axis2_141|---client |---server |---axis2-1.4.1(axis2的完整包) |---axis2(axis2_war...

    axis2服务发布与客户端代码示例

    这篇博客文章可能提供了一个实际操作的例子,展示了如何在Java环境中使用Axis2来实现服务端的发布和服务客户端的调用。 首先,我们来讨论服务发布的流程。在Axis2中,服务发布通常包括以下步骤: 1. **创建服务类*...

    axis 客户端

    axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端axis 客户端

    axis2 1.6.2 生产wsdl客户端代码

    总的来说,Axis2 1.6.2提供了一种简洁的方式,帮助开发者快速地从WSDL生成客户端代码,从而简化Web服务的使用。熟悉这一过程对于任何涉及跨系统交互的Java开发者来说都是非常有价值的技能。记住,如果在使用过程中...

    axis2c linux下c客户端编程详解

    其中`AXIS2_HOME`指向了生成C客户端所需的JAR文件所在的目录。 5. **用例代码编译**:对于用例代码,同样需要进行编译安装: ``` ./configure --prefix=/zhaojian/axis2c/ --with-axis2=${AXIS2C_HOME}/include...

    axis2客户端所需要的所有jar包

    本文将详细阐述Axis2客户端所需的所有jar包及其在调用服务端、测试接口过程中的作用。 首先,让我们了解什么是Axis2。Axis2是Apache软件基金会的一个开源项目,它提供了一个灵活、高性能的SOAP引擎,支持多种协议,...

    axis2客户端调用服务端,带用户身份认证

    Axis2提供了一种高效、灵活且可扩展的方式来实现服务端和客户端的服务调用。当涉及到“axis2客户端调用服务端,带用户身份认证”时,我们主要关注的是如何在 Axis2 客户端中添加安全机制,确保只有经过验证的用户...

    axis2学习——客户端的开发

    这篇博客"axis2学习——客户端的开发"主要探讨了如何使用Axis2来创建和操作Web服务的客户端。 首先,让我们了解什么是Apache Axis2。Axis2是Axis1的下一代版本,它提供了更高效、更灵活的服务框架。它是基于模块化...

    axis2客户端

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

    axis2-1.6.2客户端最少jar包

    标题 "axis2-1.6.2客户端最少jar包" 指的是Apache Axis2的1.6.2版本中,用于构建客户端应用程序所需的最小Java Archive (JAR) 文件集合。Axis2是一个流行的Web服务框架,它允许开发人员创建、部署和管理Web服务。这...

    Jbuilder2006实现Axis2客户端

    本文将深入探讨如何使用JBuilder2006这一集成开发环境来创建和实现Axis2客户端。 首先,我们需要了解JBuilder2006。JBuilder是一款由Borland公司(后被Embarcadero Technologies收购)推出的Java集成开发环境(IDE...

    用脚本生成axis2的客户端

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

    axis1.4生成客户端

    - JAX-WS(Java API for XML Web Services):这是Java平台标准,用于创建和处理Web服务,它是Axis2的替代品,相比Axis1.4更现代,支持更多特性。 通过理解上述内容,开发者能够有效地利用Axis1.4生成Web服务的...

    axis根据服务端wsdl生成客户端工具

    通过 Axis 根据服务端 WSDL 生成客户端工具,开发者可以高效地实现客户端与服务端的通信,降低了开发成本,提高了开发效率。了解并熟练掌握这一过程,对于从事 Web 服务开发的 IT 专业人员至关重要。

Global site tag (gtag.js) - Google Analytics