axis2 webservice

1、关于官方包的说明

 

二进制包包含了示例程序和一些jar包;war包是可以作为web应用部署到servlet container中的axis2服务包,它是apache axis2提供的服务管理的工具类web应用,所谓的axis2的安装即指的是在servlet container中安装此包;文档包不再多说;源码包也不再多说。 
官方文档说使用axis2需要的资源:java5及以上、不小于11M的硬盘空间和随便一个操作系统。另外为了把二进制数据打包成war文件,需要安装不低于1.6.5apache ant;为了构建源码包,需要安装不低于maven2.0.7maven

 

2、安装

 

     2.1:可从http://ws.apache.org/axis2/ 下载Axis2的最新版本:
      axis2-1.5.4-bin.zip(包含了Axis2中所有的jar文件)
      axis2-1.5.4-war.zip(用于将WebService发布到Web容器中)

     2.2:解压war包,并将axis2.war复制到<Tomcat安装目录>\webapps目录中

     2.3:验证-启动tomcat(startup.bat),在浏览器地址栏中输入http://localhost:8080/axis2/

              

                看到如上图片证明安装成功。

 

3、编写和发布WebService

         3.1:POJO发布

                   POJO中所有的public方法将被发布成WebService方法(web project)
             

public class HelloService {    
    public String sayHello(){   
        return "hello";   
    }      
    public String sayHelloToPerson(String name){           
        if(name==null){   
            name = "nobody";   
        }   
        return "hello,"+name;   
    }   
}  
              编译HelloService类后,将HelloService.class文件放到<Tomcat安装目录>\webapps\axis2\WEB-INF\ pojo目录中(如果没有pojo目录,则建立该目录)。

               输入http://localhost:8080/axis2/services/listServices测试

            3.1.1:注意

                       ①、POJO类不能使用package关键字声明包

                       ②、Axis2在默认情况下可以热发布WebService,即将WebService的.class文件复制到pojo目录中时,Tomcat不需要重新启动就可以自动发布WebService。
                     如果想取消Axis2的热发布功能,可以打开<Tomcat安装目录>\webapps\axis2\WEB-INF\conf\axis2.xml,
                     找到<parameter name="hotdeployment">true</parameter>  将true改为false。

                      ③、在浏览器中测试WebService时,若WebService方法有参数,需要使用URL的请求参数来指定该WebService方法参数的值,请求参数名与方法参数名要一致。

                      ④、发布WebService的pojo目录只是默认的,如果你想在其他的目录发布WebService,可以在axis2.xml中的<axisconfig>元素中添加如下的子元素:<deployer extension=".class" directory="my" class="org.apache.axis2.deployment.POJODeployer"/>  

    PS:上面的配置允许在<Tomcat安装目录>\webapps\axis2\WEB-INF\my目录中发布WebService

            例如,将本例中的HelloService.class复制到my目录中也可以成功发布(但要删除pojo目录中的SimpleService.class,否则WebService会重名)。

                       ⑤、直接发布,POJO类不能在任何包中

     

            3.2:使用services.xml配置文件发布

                    1:实现一个pojo类

    1.package com.sinosoft.webservice;   
    2.public class HelloServiceNew {             
    3.    public String sayHelloNew(){   
    4.        return "hello";   
    5.    }              
    6.    public String sayHelloToPersonNew(String name){        
    7.        if(name==null){   
    8.            name = "nobody";   
    9.        }              
    10.        return "hello,"+name;   
    11.    }   
    12.    public void updateData(String data){   
    13.        System.out.println(data+" 已更新。");   
    14.    }   
    15.}  
    


     

                    2:将services.xml文件放在META-INF目录中,内容如下

                         <?xml version="1.0" encoding="UTF-8"?>
                             <service name="HelloServiceNew">
                                    <description>
                                    Web Service例子
                                   </description>
                                   <parameter name="ServiceClass">
                                          com.sinosoft.webservice.HelloServiceNew
                                   </parameter>
                                   <messageReceivers>
                                          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
                                          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
                                   </messageReceivers>
                              </service>
    
    

                  PS:<service>:用于发布Web Service,一个<service>元素只能发布一个WebService类,
                          name属性表示WebService名即上面URL中"?"和"/"之间的部分,如下面的URL可以获得这个WebService的WSDL内容:
                          http://localhost:8080/axis2/services/HelloServiceNew?wsdl
                          <description>:表示当前Web Service的描述
     

                          <parameter>:用于设置WebService的参数,在这里用于设置WebService对应的类名。
                          <messageReceivers>:该元素用于设置处理WebService方法的处理器。
                         例如,sayHelloNew方法有一个返回值,因此,需要使用可处理输入输出的RPCMessageReceiver类,
      而updateData方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。
      
      注意:

               ①、必须打包成.aar文件,.aar文件实际上就是改变了扩展名的.jar文件。
               ②、现在建立了两个文件:HelloServiceNew.java和services.xml。将HelloServiceNew.java编译,生成HelloServiceNew.class。
               ③、services.xml和HelloServiceNew.class文件的位置如下:
                      D:\ws\ com\sinosoft\webservice\HelloServiceNew.class
                      D:\ws\META-INF\services.xml
               ④、在windows控制台中进入ws目录,并输入如下的命令生成.aar文件.(jar cvf ws.aar .) 

               ⑤、.jar文件也可以发布webservice,但axis2官方文档中建议使用.aar文件发布webservice.
                      最后将ws.aar文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\services目录中,
                      启动Tomcat后,就可以调用这个WebService了。

               3.3:还可以通过如下配置发布WebService              

    1.<service name=" HelloServiceNew ">  
    2.<description>  
    3.    Web Service例子   
    4.</description>  
    5.<parameter name="ServiceClass">  
    6.    com.sinosoft.webservice.HelloServiceNew     
    7.</parameter>  
    8.<operation name="sayHello">  
    9.    <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>  
    10.</operation>  
    11.<operation name="updateData">  
    12.    <messageReceiver  
    13.        class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>  
    14.    </operation>  
    15.</service> 
              ps:<serviceGroup>元素可以实现发布多个WebService  
     
    4、用Java实现调用WebService的客户端程序
           4.1:将axis2插件包下的Axis2_Codegen_Wizard_1.3.0和Axis2_Service_Archiver_1.3.0文件夹拷贝至Myeclipse8.5\dropins 目录下
            4.2:在myeclipse里面点击File→ New→ Other
                      
                 4.3:给项目配置tomcat,点击JavaàInstalled JREs,点击Search按钮,选择D:\Program Files\Java\jdk1.6.0_10路径
                 4.4:WSDL文件生成
                           4.4.1:在左侧视图中点击New→ Other,选择下图所示高亮部分选项
                                        
                                        
                                      
                                      

                           4.4.3: 填入之前我们服务端开放的类名,包括包路径,点击Add Folder,将服务端工程的编译文件输出文件夹

    加入进来,点击Test Class Loading,继续下一步

                                       

                                        

    注意与之前发布的服务名称一致(MyService),请填写正确,继续下一步

                                        

                                        

                   5、根据Wsdl文件生成客户端用户存根

                          

                          左侧视图中点击New→ Other,选择上图所示高亮部分选项

                        
                         
                         选择WSDL文件所在目录
                          
                          

                          注意红色部分,自动生成的代码会直接放在service(可更改)包下

                           
                            
                             调用:
                                       
    1.import javax.xml.namespace.QName;   
    2.import org.apache.axis2.AxisFault;   
    3.import org.apache.axis2.addressing.EndpointReference;   
    4.import org.apache.axis2.client.Options;   
    5.import org.apache.axis2.rpc.client.RPCServiceClient;   
    6.public class TestMain {   
    7.public static void main(String args[]) throws AxisFault{   
    8.   //  使用RPC方式调用WebService           
    9.    RPCServiceClient serviceClient = new RPCServiceClient();   
    10.    Options options = serviceClient.getOptions();   
    11.    //  指定调用WebService的URL   
    12.    EndpointReference targetEPR = new EndpointReference(   
    13.            "http://localhost:8080/axis2/services/HelloService");   
    14.    options.setTo(targetEPR);   
    15.    //  指定sayHelloToPerson方法的参数值   
    16.    Object[] opAddEntryArgs = new Object[] {"美女"};   
    17.    //  指定sayHelloToPerson方法返回值的数据类型的Class对象   
    18.    Class[] classes = new Class[] {String.class};   
    19.    //  指定要调用的sayHelloToPerson方法及WSDL文件的命名空间   
    20.    QName opAddEntry = new QName("http://ws.apache.org/axis2", "sayHelloToPerson");   
    21.    //  调用sayHelloToPerson方法并输出该方法的返回值   
    22.    System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);   
    23.}   
    24.} 

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值