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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章