http://www.cjsdn.net/post/view?bid=5&id=151014&sty=1&tpg=1&age=0
這篇比較早,放在自己的blog里,順便貼過來,讓版本看看,是否可以加分。
Apache Axis開發(fā)WEB Service簡要說明(1)- -
1 介紹
本文并不是想介紹Web服務的原理、系統(tǒng)架構等,我們假設您已經(jīng)了解了關于Web服務的一些基本的概念、原理等知識。本文主要是針對那些已經(jīng)了解Web服務概念,但是還沒有親身體會Web服務所帶來令人歡欣鼓舞的特征的開發(fā)人員。在此我們認為你已經(jīng)具備了Java、XML等基礎知識,如果你還有其他開發(fā)環(huán)境的經(jīng)驗例如VB、VC那是再好不過的了。
1.1 Web服務
雖然我們并不想詳細講述Web服務的體系結(jié)構,但是大概的介紹一下還是有必要的。Web服務是一種新型的Web應用程序。不同于其他Web應用程序,它是自適應、自我描述、模塊化的應用程序,并可以跨越Web進行發(fā)布、定位以及調(diào)用。簡單的Web服務可以提供例如天氣預報或者航班信息的服務。一旦部署了Web服務,其他的應用程序就可以發(fā)現(xiàn)和調(diào)用所部署的服務。
1.2 AXIS項目
Axis框架來自 Apache 開放源代碼組織,它是基于JAVA語言的最新的 SOAP 規(guī)范(SOAP 1.2)和 SOAP with Attachments 規(guī)范(來自 Apache Group )的開放源代碼實現(xiàn)。有很多流行的開發(fā)工具都使用AXIS作為其實現(xiàn)支持Web服務的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。AXIS的最新版本是1.1,可以從http://ws.apache.org/axis/index.html下載。下圖是AXIS核心引擎的體系結(jié)構圖:
整個AXIS項目包括以下幾個部分:
1. 消息流子系統(tǒng)
消息流子系統(tǒng)提供了靈活的消息傳遞框架,這個消息傳遞框架包括處理程序、鏈、序列化程序和反序列化程序。處理程序是一個處理請求、響應和故障流的對象。處理程序可被組合在一起成為鏈,而且可以使用一個靈活的部署描述符來配置這些處理程序的順序。
2. 傳輸框架子系統(tǒng)
提供了一個傳輸框架,這個傳輸框架可以幫助您創(chuàng)建自己的可插式傳輸發(fā)送器和傳輸偵聽器。
3. 數(shù)據(jù)編碼子系統(tǒng)
AXIS完全按照 XML Schema 規(guī)范提供各種數(shù)據(jù)類型的自動序列化,并且提供功能擴展接口來使用您自己定制的序列化器和反序列化器。
4. 其他
AXIS完全支持 WSDL 以及日志記錄、出錯以及故障處理機制。它同時提供一些工具用來講WSDL文檔轉(zhuǎn)換成客戶端的調(diào)用框架以及根據(jù)類來產(chǎn)生WSDL定義文檔。
AXIS目前版本支持的標準是:W3C SOAP 1.1 和 1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP with Attachments API for Java);JAX-RPC(SUN公司:Java API for XML-Based RPC)1.0。
2 Axis使用
2.1 Axis運行需要哪些jar文件
對Axis解包后,將axis-1_1/webapps/axis/WEB-INF/lib/目錄下的jar文件復制到/usr/local/apache/htdocs/WEB-INF/lib目錄下(Web應用程序的目錄)。應包括以下jar文件。
axis-ant.jar
axis.jar
commons-discovery.jar
commons-logging.jar
jaxrpc.jar
log4j-1.2.8.jar
saaj.jar
wsdl4j.jar
2.2 Axis使用注意事項
2.2.1 獲取WSDL文件
Axis支持用戶通過網(wǎng)絡方式,從已發(fā)布WEB服務的機器上獲取WEB服務描述文件WSDL。用戶只需簡單在IE地址欄輸入如下格式訪問鏈接即可:
http://webappIp[/webapp]/services/WebServiceName?wsdl
其中:
webAppIp:運行WEB服務機器的地址。
[/webapp]:運行Axis WEB服務的Web應用名;如果應用使用跟目錄,則不需要
services/WebServiceName:WEB服務定位路徑,類似Servlet路徑;其中WebServiceName為定義的Web服務接口名稱。
用戶將訪問獲的文件直接保存,即可獲取對應WEB服務的WSDL描述文件。
2.2.2 參數(shù)類型定義(輸入、輸出參數(shù))
如果用戶希望使用函數(shù)定義中的輸出參數(shù)獲取響應結(jié)果時,自動生成的WSDL文件無法滿足,必須手動對自動生成的WSDL文件進行修改。
如定義java Interface接口如下:
int queryUser(long type,User[] users) ;
則使用java2WSDL生成的WSDL如下:
為了將User[]作為輸出參數(shù),必須修改自動生成的WSDL文件,在QueryUserResponse返回消息中,添加User[]參數(shù)定義,告知Axis在WSDL2java處理中,將User[]作為輸入/輸出參數(shù)處理。
2.2.3 server-config.wsdd
Axis會在WEB應用程序的WEB-INF/目錄下自動生成一個名字為server-config.wsdd的xml文件,其中記錄了已部署的WEB服務。每部署一個新的WEB服務時,Axis都會將新服務的描述信息加入到server-config.wsdd中。
如果需要在Web服務器啟動時,自動加載WEB服務,只需將server-config.wsdd與WEB應用描述文件web.xml一并放置在WEB-INF目錄下即可。
server-config.wsdd中的內(nèi)容可以手工更改獲取,也可通過發(fā)布獲取自動生成的文件。
a) 將WEB服務發(fā)布后,從WEB應用的WEB-INF目錄下,獲取自動生成的server-config.wsdd文件。
b) 手工更改時,將deploy.wsdd文件中的…中的內(nèi)容直接拷貝,粘貼到原始server-config.wsdd文件中單獨行即可。
2.2.4 如何將Axis集成到自己的Web應用中。
Axis是以Servlet的方式運行的,而Tomcat的作用相當于Servlets容器(Container),因此只要配置得當,就可以使Axis在Tomcat環(huán)境中運行,這一點也適用于Tomcat以外的其它應用服務器。在Tomcat中配置Axis的方法如下。
將axis-1_1/webapps/axis/WEB-INF/web.xml中的Servlet配置項復制到自己Web應用描述文件web.xml中對應位置上。通常應包括以下內(nèi)容。
在Servlet定義與servlet-mapping定義間,將本W(wǎng)EB應用的Servlet定義加入。
AxisServlet
Apache-Axis Servlet
org.apache.axis.transport.http.AxisServlet
AdminServlet
Axis Admin Servlet
org.apache.axis.transport.http.AdminServlet
100
SOAPMonitorService
SOAPMonitorService
org.apache.axis.monitor.SOAPMonitorService
SOAPMonitorPort
5001
100
AxisServlet
/axis/servlet/AxisServlet
AxisServlet
*.jws
AxisServlet
/services/*
SOAPMonitorService
/SOAPMonitor
wsdl
text/xml
xsd
text/xml
2.2.5 Axis提供了哪些開發(fā)工具
Apache Axis提供了WSDL2Java和Java2WSDL兩個開發(fā)工具。
WSDL2Java利用已知的WSDL文件生成服務端和客戶端代碼。該WSDL文件可以是由合作伙伴提供的,也可以是利用Java2WSDL生成的。Java2WSDL根據(jù)已有的Java類文件生成WSDL文件,Java類文件可以是接口類文件,并不需要實現(xiàn)細節(jié)。
此外Axis還提供了SoapMonitorApplet和TCPMon工具,可用于監(jiān)測Web服務。
1 如何開發(fā)Web服務的服務端和客戶端代碼
1.1 生成或取得WSDL文件
Java2WSDL是Axis提供的利用Java類文件得到WSDL文件的工具。類文件可以使用接口文件編譯生成。
生成WSDL文件以后,就可以利用Axis提供的WSDL2Java工具生成Web服務的服務端代碼和客戶端代碼了
注意事項 :
WSDL文件也可以由合作伙伴提供。這種情況下合作伙伴往往是Web服務的提供者或標準接口的制定者,開發(fā)者只要按照既定的WSDL文從件生成客戶端或服務端代碼就可以了。
1.2 開發(fā)客戶端
在開發(fā)客戶端時,WEB接口定義文件WSDL一般已經(jīng)提供,或者可以通過Internat獲取。如果未提供一般也提供了接口描述文檔,詳細描述了接口輸入、輸出參數(shù)定義,據(jù)此我們可以聲明Interface接口,通過Aixs提供的java2WSDL生成WSDL文件。
下面我們假定WSDL文件已經(jīng)提供;并且我們假定讀者對eclipse、ant已經(jīng)有一定了解。
WSDL2Java工具用于從WSDL文件生成客戶端存根(stub)代碼,服務端框架(skeleton)代碼以及WSDL中的數(shù)據(jù)類型文件(生成與之對應的Java代碼)。開發(fā)人員只需向框架代碼中補充相關的業(yè)務邏輯代碼即可得到完整的Web服務代碼,因此該工具極大地減輕了開發(fā)人員的編碼負擔。
axis_ant.jar包中已經(jīng)定義了Axis集成Ant的相關Ant任務定義。任務定義在axis-tasks.properties中
#properties file for taskdefing the public Axis taskdefs
axis-wsdl2java=org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask
axis-java2wsdl=org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask
axis-admin=org.apache.axis.tools.ant.axis.AdminClientTask
Ant任務名
對應Axis提供的工具
備注
axis-wsdl2java
WSDL2java
axis-java2wsdl
Java2WSDL
axis-admin
AdminClient
1. 假定應用工程目錄結(jié)構如下:
│ build.properties
│ build.xml
│ myAxis.wsdl
├─bin
└─src
2. build.properties文件內(nèi)容如下:
axis.home = D:\\java\\axis\\axis-1_2beta
wsdl.file = myAxis.wsdl
namespace.service = urn:MyAxis
package.service = com.MyAxis.client
3. Ant文件build.xml內(nèi)容如下:
定義Axis包所在類路徑-->
從axis-ant.jar包中,引入Axis的Ant任務定義-->
classpathref="axis.classpath" />
依據(jù)WSDL文件,生成客戶端代碼-->
url="${basedir}/${wsdl.file}"
deployscope="Request"
output="${generated.path.src}"
serverside="false"
skeletondeploy="false"
testcase="true"
noimports="false"
>
1.1 開發(fā)服務端
開發(fā)服務端程序的一般步驟如下:
l 根據(jù)接口定義,定義java Interface接口。
l 根據(jù)interface接口文件,使用java2WSDL生成WEB服務描述文件
l 根據(jù)WSDL文件,使用WSDL2java生成對應的服務端代碼
l 修改自動生成的實現(xiàn)代碼類[webapp]SoapBindingImpl.java,完成接口具體操作。
l 考慮到WEB服務為系統(tǒng)對外門戶,具體業(yè)務邏輯可能分模塊實現(xiàn),建議考慮參考門面模式完成interface定義;在服務端具體實現(xiàn)時,WEB服務接口部分向邏輯提供接口,由邏輯實現(xiàn)組件完成具體的邏輯操作。WEB服務部分僅完成SOAP協(xié)議解封裝等工作。
1. 假定工程路徑如下:
├─conf
├─generated
├─source
├─src
└─WebRoot
├─META-INF
└─WEB-INF
└─lib
2. build.properties Ant腳本使用屬性
wsdl.file = myAxis.wsdl
########接口文件com.myaxis.MyAxis.java;供java2WSDL使用#####
wsi.interface = com.myaxis.MyAxis
location = http://localhost/CmsWsi/services/CmsWsi
########期望生成的接口定義包與命名空間對應關系;供WSDL2java使用###
namespace.service = http://com. myaxis.MyAxis/1.00
package.service = com.myaxis.server
########期望生成的接口相關消息類與命名空間對應關系;供WSDL2java使用###
namespace.service.msg = http://com.myaxis.msg
package.service.msg = com.myaxis.server.msg
########WEB容器定義,共AdminClient發(fā)布、注銷WEB服務使用###
target.port = 80
target.server = localhost
target.appname = MyAxis
servletpath.admin = services/AdminService
########在ANT腳本中采用命令行方式時,發(fā)布調(diào)用的AdminClient位置##
location.admin = http://localhost/MyAxis/services/AdminService
3. build.xml
加載build.propertis定義-->
容器下的類路徑,Axis相關jar已拷貝到對應目錄下-->
引入Axis的Ant任務定義-->
classpathref="axis.classpath" />
初試化,構造WSDL2java生成代碼路徑,-->
依據(jù)java Interface定義,生成WSDL定義文件-->
location="${location}"
namespace="${namespace.service}"
output="${generated.path}/${wsdl.file}"
style="RPC"
>
根據(jù)WSDL文件,生成WEB服務的服務器端源碼;考慮到接口更改,版本管理的方便,生成代碼不直接導向src目錄;第一次運行后,需要手工將代碼拷貝到src;每次修改接口后,必須清空生成源目錄,通過比較工具修改src目錄下的源文件,否則Axis判斷[webapp]SoapBindingImpl.java已存在不會進行更新。-->
url="${basedir}/${wsdl.file}"
deployscope="Request"
output="${generated.path.src}"
serverside="true"
skeletondeploy="false"
testcase="true"
noimports="false"
>
拷貝Web服務發(fā)布、注銷腳本,deploy.wsdd和undeploy.wsdd-->
發(fā)布WEB服務到WEB容器,Axis在WEB-INF/下自動生成server-config.wsdd-->
腳本方式發(fā)布服務-->
命令行方式發(fā)布服務-->
fork="true"
failonerror="true">
這篇比較早,放在自己的blog里,順便貼過來,讓版本看看,是否可以加分。
Apache Axis開發(fā)WEB Service簡要說明(1)- -
1 介紹
本文并不是想介紹Web服務的原理、系統(tǒng)架構等,我們假設您已經(jīng)了解了關于Web服務的一些基本的概念、原理等知識。本文主要是針對那些已經(jīng)了解Web服務概念,但是還沒有親身體會Web服務所帶來令人歡欣鼓舞的特征的開發(fā)人員。在此我們認為你已經(jīng)具備了Java、XML等基礎知識,如果你還有其他開發(fā)環(huán)境的經(jīng)驗例如VB、VC那是再好不過的了。
1.1 Web服務
雖然我們并不想詳細講述Web服務的體系結(jié)構,但是大概的介紹一下還是有必要的。Web服務是一種新型的Web應用程序。不同于其他Web應用程序,它是自適應、自我描述、模塊化的應用程序,并可以跨越Web進行發(fā)布、定位以及調(diào)用。簡單的Web服務可以提供例如天氣預報或者航班信息的服務。一旦部署了Web服務,其他的應用程序就可以發(fā)現(xiàn)和調(diào)用所部署的服務。
1.2 AXIS項目
Axis框架來自 Apache 開放源代碼組織,它是基于JAVA語言的最新的 SOAP 規(guī)范(SOAP 1.2)和 SOAP with Attachments 規(guī)范(來自 Apache Group )的開放源代碼實現(xiàn)。有很多流行的開發(fā)工具都使用AXIS作為其實現(xiàn)支持Web服務的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。AXIS的最新版本是1.1,可以從http://ws.apache.org/axis/index.html下載。下圖是AXIS核心引擎的體系結(jié)構圖:
整個AXIS項目包括以下幾個部分:
1. 消息流子系統(tǒng)
消息流子系統(tǒng)提供了靈活的消息傳遞框架,這個消息傳遞框架包括處理程序、鏈、序列化程序和反序列化程序。處理程序是一個處理請求、響應和故障流的對象。處理程序可被組合在一起成為鏈,而且可以使用一個靈活的部署描述符來配置這些處理程序的順序。
2. 傳輸框架子系統(tǒng)
提供了一個傳輸框架,這個傳輸框架可以幫助您創(chuàng)建自己的可插式傳輸發(fā)送器和傳輸偵聽器。
3. 數(shù)據(jù)編碼子系統(tǒng)
AXIS完全按照 XML Schema 規(guī)范提供各種數(shù)據(jù)類型的自動序列化,并且提供功能擴展接口來使用您自己定制的序列化器和反序列化器。
4. 其他
AXIS完全支持 WSDL 以及日志記錄、出錯以及故障處理機制。它同時提供一些工具用來講WSDL文檔轉(zhuǎn)換成客戶端的調(diào)用框架以及根據(jù)類來產(chǎn)生WSDL定義文檔。
AXIS目前版本支持的標準是:W3C SOAP 1.1 和 1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP with Attachments API for Java);JAX-RPC(SUN公司:Java API for XML-Based RPC)1.0。
2 Axis使用
2.1 Axis運行需要哪些jar文件
對Axis解包后,將axis-1_1/webapps/axis/WEB-INF/lib/目錄下的jar文件復制到/usr/local/apache/htdocs/WEB-INF/lib目錄下(Web應用程序的目錄)。應包括以下jar文件。
axis-ant.jar
axis.jar
commons-discovery.jar
commons-logging.jar
jaxrpc.jar
log4j-1.2.8.jar
saaj.jar
wsdl4j.jar
2.2 Axis使用注意事項
2.2.1 獲取WSDL文件
Axis支持用戶通過網(wǎng)絡方式,從已發(fā)布WEB服務的機器上獲取WEB服務描述文件WSDL。用戶只需簡單在IE地址欄輸入如下格式訪問鏈接即可:
http://webappIp[/webapp]/services/WebServiceName?wsdl
其中:
webAppIp:運行WEB服務機器的地址。
[/webapp]:運行Axis WEB服務的Web應用名;如果應用使用跟目錄,則不需要
services/WebServiceName:WEB服務定位路徑,類似Servlet路徑;其中WebServiceName為定義的Web服務接口名稱。
用戶將訪問獲的文件直接保存,即可獲取對應WEB服務的WSDL描述文件。
2.2.2 參數(shù)類型定義(輸入、輸出參數(shù))
如果用戶希望使用函數(shù)定義中的輸出參數(shù)獲取響應結(jié)果時,自動生成的WSDL文件無法滿足,必須手動對自動生成的WSDL文件進行修改。
如定義java Interface接口如下:
int queryUser(long type,User[] users) ;
則使用java2WSDL生成的WSDL如下:
為了將User[]作為輸出參數(shù),必須修改自動生成的WSDL文件,在QueryUserResponse返回消息中,添加User[]參數(shù)定義,告知Axis在WSDL2java處理中,將User[]作為輸入/輸出參數(shù)處理。
2.2.3 server-config.wsdd
Axis會在WEB應用程序的WEB-INF/目錄下自動生成一個名字為server-config.wsdd的xml文件,其中記錄了已部署的WEB服務。每部署一個新的WEB服務時,Axis都會將新服務的描述信息加入到server-config.wsdd中。
如果需要在Web服務器啟動時,自動加載WEB服務,只需將server-config.wsdd與WEB應用描述文件web.xml一并放置在WEB-INF目錄下即可。
server-config.wsdd中的內(nèi)容可以手工更改獲取,也可通過發(fā)布獲取自動生成的文件。
a) 將WEB服務發(fā)布后,從WEB應用的WEB-INF目錄下,獲取自動生成的server-config.wsdd文件。
b) 手工更改時,將deploy.wsdd文件中的…中的內(nèi)容直接拷貝,粘貼到原始server-config.wsdd文件中單獨行即可。
2.2.4 如何將Axis集成到自己的Web應用中。
Axis是以Servlet的方式運行的,而Tomcat的作用相當于Servlets容器(Container),因此只要配置得當,就可以使Axis在Tomcat環(huán)境中運行,這一點也適用于Tomcat以外的其它應用服務器。在Tomcat中配置Axis的方法如下。
將axis-1_1/webapps/axis/WEB-INF/web.xml中的Servlet配置項復制到自己Web應用描述文件web.xml中對應位置上。通常應包括以下內(nèi)容。
在Servlet定義與servlet-mapping定義間,將本W(wǎng)EB應用的Servlet定義加入。
AxisServlet
Apache-Axis Servlet
org.apache.axis.transport.http.AxisServlet
AdminServlet
Axis Admin Servlet
org.apache.axis.transport.http.AdminServlet
100
SOAPMonitorService
SOAPMonitorService
org.apache.axis.monitor.SOAPMonitorService
SOAPMonitorPort
5001
100
AxisServlet
/axis/servlet/AxisServlet
AxisServlet
*.jws
AxisServlet
/services/*
SOAPMonitorService
/SOAPMonitor
wsdl
text/xml
xsd
text/xml
2.2.5 Axis提供了哪些開發(fā)工具
Apache Axis提供了WSDL2Java和Java2WSDL兩個開發(fā)工具。
WSDL2Java利用已知的WSDL文件生成服務端和客戶端代碼。該WSDL文件可以是由合作伙伴提供的,也可以是利用Java2WSDL生成的。Java2WSDL根據(jù)已有的Java類文件生成WSDL文件,Java類文件可以是接口類文件,并不需要實現(xiàn)細節(jié)。
此外Axis還提供了SoapMonitorApplet和TCPMon工具,可用于監(jiān)測Web服務。
1 如何開發(fā)Web服務的服務端和客戶端代碼
1.1 生成或取得WSDL文件
Java2WSDL是Axis提供的利用Java類文件得到WSDL文件的工具。類文件可以使用接口文件編譯生成。
生成WSDL文件以后,就可以利用Axis提供的WSDL2Java工具生成Web服務的服務端代碼和客戶端代碼了
注意事項 :
WSDL文件也可以由合作伙伴提供。這種情況下合作伙伴往往是Web服務的提供者或標準接口的制定者,開發(fā)者只要按照既定的WSDL文從件生成客戶端或服務端代碼就可以了。
1.2 開發(fā)客戶端
在開發(fā)客戶端時,WEB接口定義文件WSDL一般已經(jīng)提供,或者可以通過Internat獲取。如果未提供一般也提供了接口描述文檔,詳細描述了接口輸入、輸出參數(shù)定義,據(jù)此我們可以聲明Interface接口,通過Aixs提供的java2WSDL生成WSDL文件。
下面我們假定WSDL文件已經(jīng)提供;并且我們假定讀者對eclipse、ant已經(jīng)有一定了解。
WSDL2Java工具用于從WSDL文件生成客戶端存根(stub)代碼,服務端框架(skeleton)代碼以及WSDL中的數(shù)據(jù)類型文件(生成與之對應的Java代碼)。開發(fā)人員只需向框架代碼中補充相關的業(yè)務邏輯代碼即可得到完整的Web服務代碼,因此該工具極大地減輕了開發(fā)人員的編碼負擔。
axis_ant.jar包中已經(jīng)定義了Axis集成Ant的相關Ant任務定義。任務定義在axis-tasks.properties中
#properties file for taskdefing the public Axis taskdefs
axis-wsdl2java=org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask
axis-java2wsdl=org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask
axis-admin=org.apache.axis.tools.ant.axis.AdminClientTask
Ant任務名
對應Axis提供的工具
備注
axis-wsdl2java
WSDL2java
axis-java2wsdl
Java2WSDL
axis-admin
AdminClient
1. 假定應用工程目錄結(jié)構如下:
│ build.properties
│ build.xml
│ myAxis.wsdl
├─bin
└─src
2. build.properties文件內(nèi)容如下:
axis.home = D:\\java\\axis\\axis-1_2beta
wsdl.file = myAxis.wsdl
namespace.service = urn:MyAxis
package.service = com.MyAxis.client
3. Ant文件build.xml內(nèi)容如下:
定義Axis包所在類路徑-->
從axis-ant.jar包中,引入Axis的Ant任務定義-->
classpathref="axis.classpath" />
依據(jù)WSDL文件,生成客戶端代碼-->
url="${basedir}/${wsdl.file}"
deployscope="Request"
output="${generated.path.src}"
serverside="false"
skeletondeploy="false"
testcase="true"
noimports="false"
>
1.1 開發(fā)服務端
開發(fā)服務端程序的一般步驟如下:
l 根據(jù)接口定義,定義java Interface接口。
l 根據(jù)interface接口文件,使用java2WSDL生成WEB服務描述文件
l 根據(jù)WSDL文件,使用WSDL2java生成對應的服務端代碼
l 修改自動生成的實現(xiàn)代碼類[webapp]SoapBindingImpl.java,完成接口具體操作。
l 考慮到WEB服務為系統(tǒng)對外門戶,具體業(yè)務邏輯可能分模塊實現(xiàn),建議考慮參考門面模式完成interface定義;在服務端具體實現(xiàn)時,WEB服務接口部分向邏輯提供接口,由邏輯實現(xiàn)組件完成具體的邏輯操作。WEB服務部分僅完成SOAP協(xié)議解封裝等工作。
1. 假定工程路徑如下:
├─conf
├─generated
├─source
├─src
└─WebRoot
├─META-INF
└─WEB-INF
└─lib
2. build.properties Ant腳本使用屬性
wsdl.file = myAxis.wsdl
########接口文件com.myaxis.MyAxis.java;供java2WSDL使用#####
wsi.interface = com.myaxis.MyAxis
location = http://localhost/CmsWsi/services/CmsWsi
########期望生成的接口定義包與命名空間對應關系;供WSDL2java使用###
namespace.service = http://com. myaxis.MyAxis/1.00
package.service = com.myaxis.server
########期望生成的接口相關消息類與命名空間對應關系;供WSDL2java使用###
namespace.service.msg = http://com.myaxis.msg
package.service.msg = com.myaxis.server.msg
########WEB容器定義,共AdminClient發(fā)布、注銷WEB服務使用###
target.port = 80
target.server = localhost
target.appname = MyAxis
servletpath.admin = services/AdminService
########在ANT腳本中采用命令行方式時,發(fā)布調(diào)用的AdminClient位置##
location.admin = http://localhost/MyAxis/services/AdminService
3. build.xml
加載build.propertis定義-->
容器下的類路徑,Axis相關jar已拷貝到對應目錄下-->
引入Axis的Ant任務定義-->
classpathref="axis.classpath" />
初試化,構造WSDL2java生成代碼路徑,-->
依據(jù)java Interface定義,生成WSDL定義文件-->
location="${location}"
namespace="${namespace.service}"
output="${generated.path}/${wsdl.file}"
style="RPC"
>
根據(jù)WSDL文件,生成WEB服務的服務器端源碼;考慮到接口更改,版本管理的方便,生成代碼不直接導向src目錄;第一次運行后,需要手工將代碼拷貝到src;每次修改接口后,必須清空生成源目錄,通過比較工具修改src目錄下的源文件,否則Axis判斷[webapp]SoapBindingImpl.java已存在不會進行更新。-->
url="${basedir}/${wsdl.file}"
deployscope="Request"
output="${generated.path.src}"
serverside="true"
skeletondeploy="false"
testcase="true"
noimports="false"
>
拷貝Web服務發(fā)布、注銷腳本,deploy.wsdd和undeploy.wsdd-->
發(fā)布WEB服務到WEB容器,Axis在WEB-INF/下自動生成server-config.wsdd-->
腳本方式發(fā)布服務-->
命令行方式發(fā)布服務-->
fork="true"
failonerror="true">