• axis2学习, ant 构建axis2 ws


    1,axis2安装(windows)
      . 环境需求:jdk 1.5, tomcat 6, maven 2, ant 

      . 下载(bin表示二进制文件):http://mirror.bjtu.edu.cn/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip
       解压到d:/softInstall/axis2/

      . 设置环境变量:AXIS2_HOME=d:/softInstall/axis2/ 
       在path下面添加:AXIS2_HOME/bin;

      . 安装axis2的测试项目,我是这么认为,即得到axis2.war,在$AXIS2_HOME/webapps下面有一个build.xml。
       所以cmd进到 $AXIS2_HOME/webapps 目录下,输入:ant create.war,会在 $AXIS2_HOME/dist下生成:axis2.war

       将axis2.war入到tomcat/webapps下面,启动tomcat,再访问 http://localhost:8080/axis2 说明成功了。

     2,建立第一个webservics.

      . 无配置的webservice (用于第一次建立ws,最快时间内看到效果)

       建立一个HelloWord.java,内容如下:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //package xm.ws
    public class HelloWord{
         public String getMessage(){
             return "this is my first aixi2 web services" ;
         }
      
         public void setMessage(String msg){
             System.out.println( "message content:" +msg);
         }
    }


       编译,得到HelloWord.class

       放入:tomcat下面的axis2/WEB-INF/services/pojo目录中,如果没有pojo目录,则自己建立个,但是这样的java是不能有包的。
       输入:http://localhost:8080/Axis2Test/services/listServices 在下面就会发现一个HelloWord的service,

       一般不建议使用上面的方法。

      . 自己定义的web service

      . 把上面的方法package申明取消,得到HelloWord.class文件

      . 建立如下目录树:
       d:/xmws
           |- META-INF
                 |- services
                        |- xm
                        |- ws

      . 建立包级文件夹,如上面的包是:xm.ws,则把HelloWord.class复制到services下面的ws下。

      . 在META-INF下面建立:services.xml内容如下:

    复制代码
     1 <?xml version="1.0" encoding="UTF-8"?>
     2     <serviceGroup>
     3         <service name="helloword">
     4             <description>这是第一个axis2的web service服务</description>
     5         <parameter name="ServiceClass">xm.ws.HelloWord</parameter>
     6         <messageReceivers>
     7             <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" 
     8                 class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
     9             <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  
    10                 class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    11         </messageReceivers>
    12     </service>
    13     
    14     <!--其它webservice服务
    15     <service name="other">
    16     </service>
    17     -->
    18 </serviceGroup>
    复制代码


      . services.xml说明:

       <serviceGroup>: 可以发布多个 webService,如果只有一个webservice,刚可以取消<serviceGroup>节点。<service>作为根节点,

       <service>: 用于发布 Web Service,一个 <service>元素只能发布一个 WebService类, name属性表示 WebService名,
       例子中:name="helloword",即通过:http://localhost:8080/axis2/helloword?wsdl 访问到该服务,
       如果要访问方法则:?getMessage方法名

       <description>: 元素表示当前 Web Service的描述,

       <parameters>: name属性:随便但是必须的,不能少;内容:是指定类名,具体到包

       <messageReceivers>:该元素用于设置处理 WebService方法的处理器。可能不用需要指定到具体的方法,系统自动调用你请求的方法
       例如:
       getMessage()方法有一个返回值,因此,需要使用可处理输入输出的 RPCMessageReceiver类,
       而setMessage()方法没有返回值,因此,需要使用只能处理输入的 RPCInOnlyMessageReceiver类。

      . 打包web service 成 .aar
       cmd命令窗口进入到:d:/xmws 目录下面。输入: jar cvf ws.aar . (注意后的后面还有个 ".")。
       就会在d:/ws下面看到 ws.aar 这个文件,把这个文件复制到tomcat下面的axis2/WEB-INF/services下面。
       重启tomcat,再访问:http://localhost:8080/axis2/helloword?wsdl


      . eclipse下面搭建axis2的web项目


       (1),以下方法有助于认识axis2布署目录和web项目的布署目录


        . 新建web项目:xmWSTest
    |-src
     |- xm.dao
     |- xm.dao.impl
     |- xm.services
     |- xm.ws
     |- MyWebServices.java
     |- xm.util

      . 将axis2.war/WEB-INF 下面的所有文件及文件夹拷贝到xmWSTest/webContent/WEB-INF下面
        将axis2.war/axis2-web文件夹及文件复制到xmWSTest/webContent/下面
        xmWSTestr项目的WEB-INF下面至少有如下目录:

    |-WEB-INF
    |- classes (项目的class文件)
    |- conf (放axis2.xml配置文件)
    |- axis2.xml
    |- lib      (项目引用的包,这个大家都知道,axis2的包也放在这下面)
    |- modules (axis2本来就有的,复制过来就有了)
    |- services (放置生成的ws的aar包)
    |- services.list (默认)
    |- version.aar (默认)
    |- web.xml (必须是axis2下面的web.xml,如果需要其它配置,可以自己加)

    web.xml配置如下:

    复制代码
     1  <!--以下配置:拦截所有:/services/* 与 *.jws 的url 请求 将这些请求识为ws请求-->
     2   <servlet>
     3     <display-name>Apache-Axis Servlet</display-name>
     4     <servlet-name>AxisServlet</servlet-name>
     5     <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
     6   </servlet>
     7   <servlet-mapping>
     8     <servlet-name>AxisServlet</servlet-name>
     9     <url-pattern>/servlet/AxisServlet</url-pattern>
    10   </servlet-mapping>
    11   <servlet-mapping>
    12     <servlet-name>AxisServlet</servlet-name>
    13     <url-pattern>*.jws</url-pattern>
    14   </servlet-mapping>
    15   <servlet-mapping>
    16     <servlet-name>AxisServlet</servlet-name>
    17     <url-pattern>/services/*</url-pattern>
    18   </servlet-mapping>
    19   
    20   <!--以下请求将拦截所有的 /axis2-admin/* 的url请求, 这些请求将进入axis2的后台管理界面,
    21         但是需要,axis2.xml,axis2.policy。这两个配置文件可以在axis2/conf下面找到,放在
    22         WEB-INF/conf 下面
    23   -->
    24   <servlet>
    25     <display-name>Apache-Axis Admin Servlet Web Admin</display-name>
    26     <servlet-name>AxisAdminServlet</servlet-name>
    27     <servlet-class>org.apache.axis2.transport.http.AxisAdminServlet</servlet-class>
    28     <load-on-startup>100</load-on-startup>
    29   </servlet>
    30   <servlet-mapping>
    31     <servlet-name>AxisAdminServlet</servlet-name>
    32     <url-pattern>/axis2-admin/*</url-pattern>
    33   </servlet-mapping>
    复制代码

      . 接下来构建类似于上面打包ws.aar的目录树,在WEB-INF下面新建:classes 文件夹,并将编译过的class文件这下面,便于快速度发布
       方法:右键项目名-->Build Path-->Configure Build Path-->Source选项卡 最下面:Default output folder 
       -->Browse,指定到新建的classes目录下面;

      . 接下来在services文件夹下新建:(如下)
    |- MyWebServices (和自己项目下面,自己写的web service 类的类名一样)
    |- META-INF
    |- services.xml

    services.xml 文件内容如下:

    复制代码
     1 <service name="figur8WebService" >
     2     <Description>
     3         Please Type your service description here(这里写一些这个webservices的描述,有助于自己或者别人的理解)
     4     </Description>
     5     <messageReceivers>
     6         <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
     7         <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
     8     </messageReceivers>
     9     <!--这里指定web services 的类路径-->
    10     <parameter name="ServiceClass" locked="false">xm.ws.MyWebServices</parameter>
    11 </service>
    复制代码

      . 做了如上配置以后,直接可以布署在tomcat中运行了。
       http://localhost:8080/xmWSTest/services/MyWebServices?wsdl


     (2),通过上面方法以后,我们可以直接使用ant来搞定所有的事情!

      准备:在WEB-INF下面新建:services-MyWebServices.xml
      内容:和上面一样
     

    复制代码
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project name="xmWS" default="compile" basedir=".">
     3     <property name="tempDir" value="${basedir}/webContent/temp" />
     4     <!--指定axis2的安装目录-->
     5     <property name="axis2_home" value="D:/lib/axis2/axis2-1.6.2-bin/axis2-1.6.2" />
     6     <!--web Service Name-->
     7     <property name="servicesName" value="MyWebServices" />
     8     
     9     <target name="compile" depends = "prepared">
    10         <!-- java compile to classes -->
    11         <javac srcdir="${basedir}/src" destdir="${basedir}/webContent/WEB-INF/classes/" 
    12                 includeantruntime="true" memoryMaximumSize="256m" fork="true">
    13         <!-- <compilerarg line="-encoding UTF-8 "/> 
    14          -->
    15             <classpath refid="refjar"/>
    16         </javac>
    17     </target>
    18     
    19     <target name="prepared">
    20         <!--复制文件,构建上面的目录-->
    21         <!--从axis2_home下面复制axix2-web文件夹 -->
    22         <mkdir dir="${basedir}/webContent/axis2-web" />
    23         <copy todir="${basedir}/webContent/axis2-web" overwrite="true">
    24             <fileset dir="${axis2_home}/webapp/axis2-web" />
    25         </copy>
    26         
    27         <!--从axis2_home下面复制conf文件夹 到项目下面的WEB-INF/ -->
    28         <mkdir dir="${basedir}/webContent/WEB-INF/conf" />
    29         <copy todir="${basedir}/webContent/WEB-INF/conf" overwrite="true">
    30             <fileset dir="${axis2_home}/conf" />
    31         </copy>
    32         
    33         <!--从axis2_home下面复制lib到WEB-INF/lib 下面 -->
    34         <copy todir="${basedir}/webContent/WEB-INF/lib" overwrite="true">
    35             <fileset dir="${axis2_home}/lib" />
    36         </copy>
    37         
    38         <!--复制modules 到WEB-INF下面-->
    39         <mkdir dir="${basedir}/webContent/WEB-INF/modules" />
    40         <copy todir="${basedir}/webContent/WEB-INF/modules" overwrite="true">
    41             <fileset dir="${axis2_home}/repository/modules" />
    42         </copy>
    43         
    44         <!-- 将axis2_home下面的url拦截文件打包到lib下面 -->
    45         <mkdir dir="${basedir}/webContent/WEB-INF/classes" />
    46         <copy todir="${basedir}/webContent/WEB-INF/classes" overwrite="true">
    47             <fileset dir="${axis2_home}/webapp/WEB-INF/classes" />
    48         </copy>
    49         
    50         <!-- 
    51         <jar destfile="${basedir}/webContent/WEB-INF/lib/xm_axis2_urlmapping.jar"
    52             basedir="${axis2_home}/webapp/WEB-INF/classes" >
    53         </jar>
    54          -->
    55          
    56         <!-- 将新建web Service 文件夹 -->
    57         <mkdir dir="${basedir}/webContent/WEB-INF/services" />
    58         <mkdir dir="${basedir}/webContent/WEB-INF/services/${servicesName}" />
    59         <mkdir dir="${basedir}/webContent/WEB-INF/services/${servicesName}/META-INF" />
    60         <!-- 将services-wsname.xml复制到 META-INF -->
    61         <copy file="${basedir}/webContent/WEB-INF/services-${servicesName}.xml" 
    62             tofile="${basedir}/webContent/WEB-INF/services/${servicesName}/META-INF/services.xml"
    63         />
    64         
    65         <copy todir="${basedir}/webContent/WEB-INF/services/${servicesName}" overwrite="true">
    66             <fileset dir="${axis2_home}/repository/services" />
    67         </copy>
    68         
    69     </target>
    70     
    71     <path id="refjar">
    72         <fileset dir="${basedir}/webContent/WEB-INF/lib">
    73             <include name="**/*.jar"></include>
    74         </fileset>
    75     </path>
    76         
    77 </project>
    复制代码

      打开命令窗口,定位到项目目录下面,运行命令:ant
      在eclipse中直接布置项目,并运行
      在浏览器中输入:http://localhost:8080/xmWSTest/services/MyWebServices?wsdl

  • 相关阅读:
    2013总结,新的征程开始了!
    NOIP2015滚粗记
    HelloWorld!
    For the strivers ——
    【DP】最长公共子序列
    【DP】青蛙过河
    【DP+拓扑】关键子工程
    【线段树+向量】POJ 2991 Crane
    【线段树】POJ3225 Help with intervals
    【数学】test20170311
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3263237.html
Copyright © 2020-2023  润新知