`

实现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方法调用的写法就可知比这个还要简单。
分享到:
评论

相关推荐

    axis生成客户端两种简单方法(附加mail.jar,activation.jar,xalan.jar,xmlsec.jar)

    axis生成客户端两种简单方法(附加mail.jar,activation.jar,xalan.jar,xmlsec.jar)

    webservice Axis2教程

    在第二个项目中同时使用了这两种方式来实现。这两种调用方式分别封装在两组Model类中。可以通过配置 struts.xml文件来提定使用哪组模型类(调用方式)。第三个项目使用了C#来实现PIM。这个项目的目的是为了演示如何...

    springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口

    springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口

    Axis2 通过soap header进行授权服务

    Axis2 通过soap header进行授权服务 客户端根据是否生产stub客户端代码采用两种形式实现。

    Axis-cxf-WebService.zip

    axis和cxf WebService两种实现 实例demo,包含服务端和客户端

    WebService Axis和XFire(CXF)的开发流程

    WebService当服务端两种生成wsdl协议方式,Axis和XFire(CXF)前者搞过WebService的人应该都知道扩展性比较好但是不支持Spring,后者基本逻辑全都封装在了底层API中,模式比较固定,开发比Axis简单,但是没有Axis灵活。...

    Java的webservice开发与测试入门例子

    最简单的webservice的例子,包括服务端与客户端,有axis、xfire的两种方式的实现

    java调用webservice .

    调用webservice,可以首先根据wsdl文件生成客户端,或者直接根据地址调用,这里主要讨论直接调用地址的两种不同方式:axis和Soap,soap方式主要是用在websphere下

    WebService 的示例程序(含说明文档)

    附件是 WebService 的示例程序(含说明文档) :考虑到 CXF 更容易和 spring 集成,所以WebService 服务端采用了 CXF 框架, ...axis2 和 cxf 两种方式实现 。 框架版本 : CXF:2.3.3 Spring:2.5.6 axis2 :1.5.4

    java开源包2

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包3

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    ASP EXCEL导入SQL

    在Java语言中重要的两个以SOAP技术开始的网络服务框架XFire和Axis也把REST作为自己的另一种选择。它们的新的项目分别是ApacheCXF和Axis2.Java语言也制定关于REST网络服务规范:JAX-RS:JavaAPIforRESTfulWebServices...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics