axis2是能夠實現webservice的一個插件,使用這個插件能夠發佈webservicehtml
1:可使用這個插件來發布webservice,能夠看網址:http://clq9761.iteye.com/blog/976029/======我的感受通常不太適合咱們作項目時候使用java
2:咱們這裏將axis2的夾包引入到一個web工程裏,運行這個web工程來發布webservice=====web
這是咱們經常使用的,好比要你寫一個webservice客戶端,你要怎麼作呢?建立一個web工程,而後引入axis2的夾包,使用axis2來實現一個webservice,這是一個最基本的想法apache
想使用axis2實現webservice要作幾件事以下:tomcat
1:建立一個web工程,====還能夠說是建立一個web服務====或者是建立一個web項目app
2:要引入須要的夾包到web工程的lib文件夾內jsp
3:建立service.xml文件 =====axis2發佈webservice須要配置的xml文件maven
4:配置web工程的web.xml,掃描axis2的service.xml文件 測試
5:書寫對應的類來實現ui
而後運行寫好的web項目,在網頁上執行路徑就能夠了,其實按着步驟走挺簡單的,下面是每一步的詳細介紹
第一步:建立一個web項目
第二步:引入須要的夾包
有個問題夾包從哪裏來呢,去axis的官網下載
插件的下載網址:http://axis.apache.org/axis2/java/core/download.html
下載後解壓。解壓文件裏有lib文件夾,裏面有須要的全部的jar包
這裏須要注意的是夾包的版本,在官網上下載的可能與本章中圖片顯示的不一樣,這個不用管,名字同樣就行
若是不行再換,先試試 ===============這樣咱們就能夠把全部須要的夾包複製到web項目的lib下
第三步:建立service.xml文件,看下圖吧
在WEB-INF下建立services文件夾而後建立------conf----META-INF----services.xml
services.xml的內容以下:
=================services.xml內容開始=========================
<?xml version="1.0" encoding="UTF-8"?>
<service name="Testservice"> <!-- 指定服務名,隨便定義 -->
<description>測試axis2webservices</description><!-- 服務的做用說明,可寫可不寫 -->
<!-- 指定要發佈的類路徑 -->
<parameter name="ServiceClass"> <!-- 自定義 name-->
com.axiswevservice.test.TestService <!-- 寫的類路徑 -->
</parameter>
<!-- 類裏面的方法,有其餘方法就在寫個operation標籤 -->
<operation name="test"> <!-- 類裏面的方法名 -->
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
<!-- http://localhost:8080/testaxis2webservice/services/Testservice?wsdl -->
=================services.xml內容結束=========================
http://localhost:8080/testaxis2webservice/services/Testservice?wsdl
註釋:上面的路徑是搭建好web項目後要運行的wsdl路徑
1: 指定服務名 =====就是要運行的wsdl路徑的?和/之間的那一部分===能夠說指定的服務名是wsdl路徑的一部分
2:服務的做用說明====這個不用管===就至關於一個註釋,說說你要發佈的webservice是幹啥的
3:指定要發佈的類路徑======就是你要把那個類作成webservice
4:類裏面的方法,有其餘方法就在寫個operation標籤=======配置你寫的類裏面的方法
第四步:配置web.xml
=================web.xml內容開始=========================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>testaxis2webservice</display-name><!-- 項目名,建立項目時候自動生成的 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
=================web.xml內容結束=========================
第五步:書寫發佈類
============================書寫的類開始======================
package com.axiswevservice.test;
public class TestService {
public String test(String test){
return "測試axis2webservice:"+test;
}
}
==========================書寫的類結束=========================
類寫的簡單點,如今只是測試不必寫複雜,就寫一個類,類裏寫一個方法
寫完這裏以後,就要和上面的service.xml對應起來了,service.xml裏面的類路徑,方法名要和這裏寫的同樣
寫完以後就能夠了,這是項目的結構圖以下
在eclipce中加載tomcate,將項目加載到tomcate中,運行tomcate 啓動項目
而後在網頁上輸入http://localhost:8080/testaxis2webservice/services/Testservice?wsdl
wsdl路徑的組成:tomcate裏配置的ip和端口號 + 項目名 + web.xml裏配置的<url-pattern> + service.xml裏面指定的服務名+?wsdl
運行結果以下:
這樣就成功了,使用axis2來實現webservice服務端,這樣在寫個客戶端調用就能夠了
=====================================================================================
開始寫客戶端調用服務端寫的接口通不通,
咱們可使用soupui這個軟件來測試服務端,也能夠本身寫代碼測試
這裏咱們本身寫:要怎麼作呢?很簡單,須要作以下:
1:建個java工程 ------建立一個java工程
2:引入夾包
3:寫個測試類
===========================開始==================================
第一步:建立一個java工程======就是建立一個java項目,咱們的項目通常分爲java項目,web項目,maven項目。。。。。。
第二步:引入夾包,夾包引入的方法和上面寫服務端引入的同樣,可是多了兩夾包httpcore-4.4.4.jar,commons-codec-1.3.jar
這兩個夾包在axis2的插件的lib下也能夠找到
第三步:書寫測試類
其實就是建個java項目,把寫的web工程的夾包複製到java項目下,在從解了壓的axis2插件的lib下把少的兩個夾包加進來,寫個類測一下就好了
======================測試類開始=======================
package testwebserver;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
public class test {
public static void main(String[] args) {
try {
//本機tomcat端口默認爲8081,參數是wsdl網址的一部分
EndpointReference targetEPR = new EndpointReference("http://localhost:8081/testaxis2webservice/services/Testservice");
RPCServiceClient sender = new RPCServiceClient();
Options options = sender.getOptions();
options.setTimeOutInMilliSeconds(2*20000L);//超時時間20s
options.setTo(targetEPR);
/**
* 參數:
* 1:在網頁上執行 wsdl後xs:schema標籤的targetNamespace路徑
* <xs:schema targetNamespace="http://test.axiswevservice.com">
* 2:<xs:element name="test"> ======這個標籤中name的值
*
*/
QName qname = new QName("http://test.axiswevservice.com", "test");
String str = "客戶端調用成功"; //方法的入參
Object[] param = new Object[]{str};
Class<?>[] types = new Class[]{String.class}; //這是針對返值類型的
/**
* RPCServiceClient類的invokeBlocking方法調用了WebService中的方法。
* invokeBlocking方法有三個參數
* 第一個參數的類型是QName對象,表示要調用的方法名;
* 第二個參數表示要調用的WebService方法的參數值,參數類型爲Object[];
* 第三個參數表示WebService方法的返回值類型的Class對象,參數類型爲Class[]。
*
* 當方法沒有參數時,invokeBlocking方法的第二個參數值不能是null,而要使用new Object[]{}。
*/
Object[] response1 = sender.invokeBlocking(qname, param, types);
System.out.println(response1[0]);
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
======================測試類結束=========================
這是個java項目,直接寫在main方法內,直接運行main方法就能夠了,
注意:你這裏寫好的服務端得一直起着,這裏寫的測試調用才能調通,看下圖:
總結:若是都測通了,咱們要明白一下幾點
1:axis2要實現webservice須要哪些夾包,夾包是哪裏來的
須要哪些夾包看截圖,夾包是從axis2的官網下的,官網有個.....bin.zip的文件,解壓這個文件,裏面有個lib文件夾,那裏面有全部的夾包
2:怎麼才能使用axis2發佈一個webservice,
須要axis2的一個service.xml配置文件,咱們要確保項目啓動時要掃描到這個配置文件,而且要和寫的類/方法等一致
那麼程序就會將service.xml裏面配置的類和方法作成一個webserce發佈,
咱們這裏是將service.xml引入到了一個web工程裏,使用web工程的web.xml來掃描service.xml文件,當運行這個web工程的時候 程序就將service.xml裏面的配置的作成一個webservce服務發佈了,只要這個web工程一直起着,咱們就能夠調用發佈的服務
3:要發佈的類,中的方法怎麼寫
方法有個返回值和入參就行,無論寫方法在複雜,格式就是那樣的
4:客戶端怎麼寫的?
客戶端就是寫個java工程寫個類測試下就行,夾包看上面截圖,調用的代碼要好好看看