使用axis2进行WebService的开发
使用axis2進行WebService的開發
Apache Axis2 是 Apache Axis SOAP 項目的后繼項目。此項目是 Web 服務核心引擎的重要改進,目標是成為 Web 服務和面向服務的體系結構(Service-Oriented Architecture,SOA)的下一代平臺。
axis2 WebService開發分為服務端開發與客戶端開發,服務端開發為對外提供服務,客戶端開發為用戶調用外部接口進行業務處理。
一、下載與安裝
1.下載
下載地址:http://axis.apache.org/axis2/java/core/download.cgi
有以下下載列表:
Binary Distribution zip | MD5 | PGP?
Source Distribution zip | MD5 | PGP?
WAR Distribution zip | MD5 | PGP?
Documents Distribution zip | MD5 | PGP
注:
axis2-1.6.2-bin.zip里有axis2的jar包。
axis2-1.6.2-docs.zip里有詳細的幫助文檔。
axis2-1.6.2-src.zip里是源代碼。
axis2-1.6.2-war.zip里是axis的管理平臺,放到tomcat可直接使用。
注:本文用bin包進行命令行使用axis2,管理平臺使用的是war包。
2.安裝配置
將axis2-1.6.2-bin.zip解壓到本地目錄D:\axis2-1.6.2
設置環境變量。【注:前提需要配置java環境變量】
AXIS2_HOME 設置值 D:\axis2-1.6.2
Path 添加值 %AXIS2_HOME%\bin
二、服務端編寫
1.創建服務端的java項目testAsixServer。
編寫類City與類User代碼如下:
[java]?view plaincopy編寫服務類UserService。該服務類即為對外提供的服務,其中對外提供2個服務getUserById與getUserList,代碼如下:
[java]?view plaincopy2.發布WebService服務
發布WebService服務方式可使用axis2管理平臺發布,本文另添加使用soapUI發布WebService的測試服務。
2.1 axis2管理平臺發布
2.1.1 部署axis2管理平臺
將axis2-1.6.1-war.zip壓縮包里面的axis2.war包解壓到tomcat的webapps目錄下,啟動tomcat,訪問地址http://127.0.0.1:8080/axis2/ ,即可訪問axis2的Welcome!頁面。
訪問地址http://127.0.0.1:8080/axis2/services/listServices 另可訪問服務列表。
2.1.2 部署開發服務
編譯服務端項目testAsixServer后,將UserService.class文件放到tomcat\webapps\axis2\WEB-INF\pojo目錄中【注:若沒有pojo目錄,則手動新建該目錄】。
在瀏覽器地址欄中輸入如下的URL:
http://127.0.0.1:8080/axis2/services/listServices 即可訪問刷新后的服務列表。【注:POJO類不能使用package關鍵字聲明包,若使用axis2管理平臺發布,則需要修改UserService類,去掉package字段。】
【注:發布WebService的pojo目錄只是默認的,如果想在其他的目錄發布WebService,可以打開axis2/WEB-INF/conf/axis2.xml文件,并在<axisconfig>元素中添加如下的子元素:
<deployer extension=".class" directory="mydir" class="org.apache.axis2.deployment.POJODeployer"/>】
訪問 http://127.0.0.1:8080/axis2/services/UserService?wsdl 即可訪問服務UserService的wsdl描述
【注:另可使用jar cvf命令將服務打成aar包后導入到axis2管理平臺上使用。】
2.2 使用soapUI生成WAR發布WebService測試服務
?
2.2.1 由java生成wsdl文件
運用Java2wsdl生成wsdl文件
使用cmd命令,在命令行中輸入:
java2wsdl -cn com.hsinghsu.service.UserService
【注:在testAsixServer項目的classes根目錄下執行】
輸出:
Using AXIS2_HOME: ? D:\axis2-1.6.2
Using JAVA_HOME: ? ?C:\Program Files\Java\jdk1.6.0_01
log4j:WARN No appenders could be found for logger (org.apache.axis2.util.Loader).
log4j:WARN Please initialize the log4j system properly.
結果:
生成UserService.wsdl文件
2.2.2 soapUI導出war包:
在soapUI導入UserService.wsdl文件。
通過soapUI生成MockService。
啟動MockService,測試MockService時,在URL填寫http://HSING-PC:8088/mockUserServiceSoap11Binding 后點擊運行,查看是否有正確報文返回。
soapUI發送報文如下:
soapUI接收報文如下:
[html]?view plaincopy 在soapUI中導出war包,如testUser.war。
2.2.3 部署war包
將war包部署到tomcat目錄下。【注:需要修改war包里面的WEB-INF/soapui/testUser-soapui-project.xml文件引用wsdl文件的路徑】
啟動tomcat,訪問在war所在的路徑如 http://127.0.0.1:8080/testUser/mockUserServiceSoap11Binding?WSDL ,即可查看wsdl描述文件
【注:可以使用soapUI測試接口,在soapUI測試中,URL中填寫testUser.war的部署地址,如http://ip:port/testUser/mockUserServiceSoap11Binding ,點擊運行,查看對應的接口是否有正確報文返回。】
三、客戶端編寫
Axis2支持以下4種類型的客戶端:
i. ?Block(阻塞式客戶端),即傳統客戶端。一旦服務被啟用,客戶端的應用程序將被掛起,直到operation被執行完畢(表現為收到一個response或fault),才能重新獲得控制權。這是調用Web Service最簡單的方式,并且這種方式適用于多數業務情形。
ii. Non block(非阻塞式客戶端),即異步客戶端。使用Non-Blocking API來調用這些Web Services。Axis2提供給用戶一種基于回叫機制的non-blocking API,一旦服務被起用,客戶端應用程序馬上得到控制權,通過使用一個callback對象來獲得response。這種方式使得客戶端應用程序可以很方便的同步啟用多個Web Service。
iii.雙工(雙向傳輸)。以上的機制都使用單一的連接去發送請求和接收響應.這都明顯在性能上落后于使用兩條連接(單向或雙向)進行進行請求和響應的傳輸 . 因此以上的機制都不能解決長時間運行的交易, 連接將在操作還沒完成就會超時. 一種解決方案是使用分開的兩條傳輸連接來傳輸請求和響應 . 我們叫這種方案為傳輸層異步。
iv. 雙工非阻塞(雙向且非阻塞傳輸)。
注:axis2 webservice client端需要的jar包有:
1.傳統客戶端【阻塞式客戶端的編寫】
新建AsixBlockClient類,獲取數據,代碼如下:
[java]?view plaincopy執行結果如下:
[plain]?view plaincopy2.使用RPC方法調用WebService
編寫AsixRPCClient.java類,獲取數據。注:添加User.java、City.java至項目中。
AsixRPCClient.java代碼如下:
運行結果:
?objects size-->:1[Ljava.lang.Object;@ba5c7a
==1 ==hsinghsu ==wh
3.使用Stub方式調用WebService
運用wsdl2java簡化客戶端,使用Stub方式調用WebService
3.1 生成STUB文件。
在cmd中用 wsdl2java生成stub文件。注:在wsdl文件目錄下執行
輸入:
wsdl2java -uri UserService.wsdl
【注:默認adb生成方式,同步生成方式,加參數-a則使用異步生成】
輸出:
Using AXIS2_HOME: ? D:\axis2-1.6.2
Using JAVA_HOME: ? ?C:\Program Files\Java\jdk1.6.0_01
Retrieving document at 'UserService.wsdl'.
log4j:WARN No appenders could be found for logger (org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder).
log4j:WARN Please initialize the log4j system properly.
結果:
生成build.xml、UserServiceStub.java、UserServiceCallbackHandler.java文件
3.2 編寫同步調用函數
編寫AsixServiceStub類,獲取數據。
AsixServiceStub.java代碼如下:
運行結果:
==1 ==hsinghsu ==wh
注:添加UserServiceStub.java、UserServiceCallbackHandler.java文件至項目中,注意修改UserServiceStub.java類中服務的地址。
注:若需要使用異步調用,則需創建異步回調類AsynCallback,該類需要繼承UserServiceCallbackHandler抽象類,實現回調函數receiveResultgetUserById接口。在AsixServiceStub中,只需要使用stub.startgetUserById(guid, new AsynCallback());執行即可。
轉載于:https://www.cnblogs.com/toSeeMyDream/p/6674500.html
總結
以上是生活随笔為你收集整理的使用axis2进行WebService的开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于数组长度
- 下一篇: td 中连续数字或连续英文内容不自动换行