產(chǎn)品二次開(kāi)發(fā)培訓(xùn)10webservice2組件開(kāi)發(fā)手冊(cè)_第1頁(yè)
產(chǎn)品二次開(kāi)發(fā)培訓(xùn)10webservice2組件開(kāi)發(fā)手冊(cè)_第2頁(yè)
產(chǎn)品二次開(kāi)發(fā)培訓(xùn)10webservice2組件開(kāi)發(fā)手冊(cè)_第3頁(yè)
產(chǎn)品二次開(kāi)發(fā)培訓(xùn)10webservice2組件開(kāi)發(fā)手冊(cè)_第4頁(yè)
產(chǎn)品二次開(kāi)發(fā)培訓(xùn)10webservice2組件開(kāi)發(fā)手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、文檔控制/Control修改審閱人分發(fā)日期分發(fā)人分發(fā)對(duì)象備注日期審閱人版本備注日期作者版本備注2011-12-21V1.0草稿目錄第一章引言編寫目的5文檔約定5. 5第二章概述72.1總體設(shè)計(jì)7第三章系統(tǒng)功能3.7服務(wù). 9運(yùn)行管理9運(yùn)行日志10超時(shí). 11用戶帳號(hào)設(shè)置11運(yùn)行日志備份12輔助功能12第四章WEBSERVICE 數(shù)據(jù)接口134.14.2組織架構(gòu)接口13附件接口15第五章WEBSERVICE 服務(wù)端開(kāi)發(fā)5.4開(kāi)發(fā)和部署流程18開(kāi)發(fā) SPRING BEAN18實(shí)現(xiàn)擴(kuò)展19導(dǎo)入并發(fā)布19第六章WEBSER

2、VICE 客戶端開(kāi)發(fā)6.76.8JAVA 客戶端19.NET 客戶端20DOMINO 客戶端21認(rèn)證23附件上傳23流程表單數(shù)據(jù)24流程參數(shù)25時(shí)間類型26第七章FAQ27第八章附錄288.1SOAP 消息的結(jié)構(gòu)28第一章 引言1.1 編寫目的本文可以指導(dǎo)技術(shù)如何在 EKP-J 產(chǎn)品中利用 WebService2 組件來(lái)開(kāi)發(fā)、部署和發(fā)布WebService , 以及在集成的第系統(tǒng)中, 如何開(kāi)發(fā)客戶端程序來(lái)產(chǎn)品中的WebService。系統(tǒng)管理也可以參考此文檔來(lái)管理 WebService2 組件的日常運(yùn)行,WebService 的運(yùn)行狀況。1.2 文檔約定

3、本文檔采用 MS word(兼容 office2003)編寫,采用風(fēng)格編寫,正文風(fēng)格為:五號(hào)中文宋體、五號(hào)英文 Ariai 字體、行距 1.5 行。針對(duì)需要重點(diǎn)主要的段落,采用紅色描色。針對(duì)代碼片段,采用斜體字加框的樣式,為了排版美觀,建議保留 eclipse 的樣式,如下:1.3擴(kuò)展點(diǎn)和擴(kuò)展的容器,此容器與 Java 容器的生命周期一致。根據(jù) plugin.xml插件工廠:的配置,自動(dòng)把相應(yīng)的配置信息到工廠容器中,以備擴(kuò)展點(diǎn)的提供方調(diào)用。WSDL: 網(wǎng)絡(luò)服務(wù)描述語(yǔ)言(Web ServiDescription Language),是用于描述 Web Service以及如何對(duì)它們進(jìn)行的 XML

4、語(yǔ)言。SOAP:一種基于 XML 的輕量級(jí)協(xié)議,用于在分布式環(huán)境換信息,它使應(yīng)用程序通過(guò)HTTP 來(lái)交換信息。Servi。CXF 來(lái)自于 XFire 項(xiàng)目,實(shí)現(xiàn)了 ESB(企業(yè)服務(wù)總線)。JAX-WS 規(guī)范:提供了一組 XML web servi的 JAVA API。JAX-WS 允許開(kāi)發(fā)者可以選擇RPC-oriented 或者 message-oriented 來(lái)實(shí)現(xiàn)自己的 web servi。在 JAX-WS 中,一個(gè)Apache CXF:一個(gè)開(kāi)源的 Servi框架,它提供了 Frontend 編程 API 來(lái)構(gòu)建和開(kāi)發(fā)public sic SysElement getSalesByAre

5、a(String area) /在這里編寫您的業(yè)務(wù)邏輯調(diào)用可以轉(zhuǎn)換為一個(gè)基于 XML 的協(xié)議例如 SOAP。在使用 JAX-WS 過(guò)程中,開(kāi)發(fā)者不需要編寫任何生成和處理 SOAP 消息的代碼。JAX-WS 的運(yùn)行時(shí)實(shí)現(xiàn)會(huì)將這些 API 的調(diào)用轉(zhuǎn)換成為對(duì)應(yīng)的 SOAP 消息。MTOM:全稱 Message TransmisOptimization Mechanism,即消息傳輸優(yōu)化機(jī)制。使用MTOM 的目的在于優(yōu)化對(duì)較大的二進(jìn)制負(fù)載的傳輸,如上傳文檔和等。第二章 概述Web Service 是一個(gè)開(kāi)放的標(biāo)準(zhǔn),適用于處理異構(gòu)系統(tǒng)之間的通信和。WebService2 組件對(duì)系統(tǒng)中的 Web Serv

6、ice 進(jìn)行管理,提供對(duì) WebService 的發(fā)布和查找機(jī)制、安全認(rèn)證服務(wù)、運(yùn)行日志和審計(jì)功能以及服務(wù)運(yùn)行的和。WebService2 組件簡(jiǎn)化了 WebService 的部署和開(kāi)發(fā)過(guò)程,使開(kāi)發(fā)可以專注于業(yè)務(wù)實(shí)現(xiàn),并且提供了一些輔助工具和數(shù)據(jù)接口以提高開(kāi)發(fā)效率。2.1 總體設(shè)計(jì)2.1.1總體結(jié)構(gòu)圖2.1.2設(shè)計(jì)思路WebService2 組件是基于 Apache CXF 開(kāi)源框架,采用 JAX-WS 規(guī)范設(shè)計(jì)和開(kāi)發(fā)的。系統(tǒng)在底層處理對(duì)webservice 的安全認(rèn)證和服務(wù)運(yùn)行,并WebService 的執(zhí)行情況。開(kāi)發(fā)根據(jù)業(yè)務(wù)編寫 Spring Bean,在插件工廠中添加 WebServic

7、e 擴(kuò)展,然后導(dǎo)入(類似定時(shí)任務(wù))即可完成 WebService 的發(fā)布。2.1.3功能介紹WebService2 組件的主要功能有服務(wù)管理、運(yùn)行日志及審計(jì)、超時(shí)和帳號(hào)設(shè)置等。服務(wù)提供對(duì)系統(tǒng)中 Web Service 的集中管理。信息定義了服務(wù)的名稱、接口及說(shuō)明等信息。運(yùn)行管理包括啟動(dòng)服務(wù)、停止服務(wù)、啟動(dòng)類型設(shè)置、安全認(rèn)證設(shè)置、用戶最大連接控制等功能。運(yùn)行日志W(wǎng)ebService 的執(zhí)行情況,為審計(jì)分析服務(wù)提供依據(jù)。的信息包括服務(wù)名稱、服務(wù)標(biāo)識(shí)、用戶、客戶端 IP 地址、服務(wù)啟動(dòng)時(shí)間、服務(wù)結(jié)束時(shí)間,執(zhí)行結(jié)果和錯(cuò)誤信息等;可以根據(jù)這些信息搜索日志;可以對(duì)指定的 WebService 開(kāi)啟 Soa

8、p 消息功能,記錄服務(wù)端完整的入站消息和出站消息內(nèi)容。超時(shí)顯示所有運(yùn)行時(shí)間超過(guò)最大運(yùn)行時(shí)長(zhǎng)設(shè)定的服務(wù)。用戶帳號(hào)設(shè)置設(shè)置 WebService 用戶帳號(hào)信息。包括用戶名、可的 WebService、可以使用的客戶端 IP 等。運(yùn)行日志備份支持定期自動(dòng)轉(zhuǎn)移日志到備份表中,并且可以定期日志備份表中的數(shù)據(jù)。輔助功能包括Java 客戶端、查看 WSDL、服務(wù)接口幫助等功能。第三章 系統(tǒng)功能3.1 服務(wù)管理系統(tǒng)中 WebService 的信息,包括服務(wù)名稱、服務(wù)接口及實(shí)現(xiàn)類名、接口幫助說(shuō)明等。如下所示:這些信息定義在各功能模塊的 plugin.xml 文件中,由 WebService2 組件管理,可以在系

9、統(tǒng)中導(dǎo)入這些信息?!皩?dǎo)入 WEB 服務(wù)”功能將插件工廠的擴(kuò)展中定義的 WebService 信息更新到系統(tǒng)數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)中已存在此 WebService 則更新信息,包括服務(wù)名稱、服務(wù)接口及實(shí)現(xiàn)類名、接口幫助說(shuō)明文檔,其它運(yùn)行配置參數(shù)不變;如果不存在則添加此 WebService,啟動(dòng)類型默認(rèn)自動(dòng)。服務(wù)成功導(dǎo)入后會(huì)啟動(dòng)所有啟動(dòng)類型為自動(dòng)的 WebService,無(wú)需重啟 EKP 即可供外部。WebService 的過(guò)程在第五章中有詳細(xì)描述,在此略過(guò)。3.2 運(yùn)行管理包括啟動(dòng)服務(wù)、停止服務(wù)、啟動(dòng)類型設(shè)置、安全認(rèn)證設(shè)置、用戶最大連接控制等功能。運(yùn)行配置信息如下圖所示,可以對(duì)每個(gè) WebServ

10、ice 單獨(dú)配置運(yùn)行參數(shù)。啟動(dòng)服務(wù):?jiǎn)?dòng)選定的 WebService,支持批量操作。服務(wù)成功啟動(dòng)后才可以被外部;停止服務(wù):停止選定的 WebService,支持批量操作;已停止的服務(wù)不能被外部訪問(wèn);路徑:客戶端WebService 的 URL 路徑,由系統(tǒng)分配,此項(xiàng)為只讀;允許:默認(rèn)情況下,客戶端需要提供用戶口令等認(rèn)證信息才能服務(wù),如果允許,則服務(wù)端關(guān)閉驗(yàn)證,客戶端服務(wù)無(wú)需提供認(rèn)證信息;服務(wù)狀態(tài):分為“已啟動(dòng)”和“已停止”兩種狀態(tài),管理員可以在系統(tǒng)運(yùn)行的過(guò)程中啟動(dòng)或停止 WebService,服務(wù)成功啟動(dòng)后就可以被外部,無(wú)需重啟服務(wù)器;啟動(dòng)類型:分為自動(dòng)、手動(dòng)、禁用三種類型。默認(rèn)情況下,系統(tǒng)啟

11、動(dòng)時(shí)會(huì)加載自動(dòng)類型的服務(wù);用戶最大連接數(shù):可以限制客戶端連續(xù)服務(wù)的次數(shù),防止客戶端不正常的頻繁調(diào)用 webservice,給 EKP 系統(tǒng)的運(yùn)行造成壓力;服務(wù)最大運(yùn)行時(shí)長(zhǎng):設(shè)置服務(wù)的運(yùn)行時(shí)間限制,超時(shí)的服務(wù)會(huì)在超時(shí)模塊中顯示;用戶設(shè)置:設(shè)置可以此 WebService 的用戶帳號(hào)。服務(wù)端可以對(duì)客戶端的信息進(jìn)行驗(yàn)證,包括用戶口令、IP 地址等;消息日志:在 Log4j 日志文件 Landray.msg.log 中Soap 消息以供調(diào)試,運(yùn)行模式下請(qǐng)關(guān)閉此項(xiàng),重啟服務(wù)后生效。3.3運(yùn)行日志W(wǎng)ebService 的執(zhí)行情況,為審計(jì)分析服務(wù)提供依據(jù)。的信息包括服務(wù)名稱、服務(wù)標(biāo)識(shí)、用戶、客戶端 IP 地

12、址、服務(wù)啟動(dòng)時(shí)間、服務(wù)結(jié)束時(shí)間,執(zhí)行結(jié)果和錯(cuò)誤信息等;可以根據(jù)這些信息搜索日志;也可以運(yùn)行配置信息中對(duì)指定的 WebService 開(kāi)啟 Soap消息功能,服務(wù)端完整的入站消息和出站消息內(nèi)容。執(zhí)行結(jié)果的分類:1、 成功:WebService 正常被執(zhí)行;2、 服務(wù)異常:WebService 執(zhí)行過(guò)程中發(fā)生異常,此時(shí)系統(tǒng)會(huì)在日志中異常堆棧的信息,同時(shí)把錯(cuò)誤提示信息和異常堆棧返回給客戶端;3、用戶:客戶端提供的登錄名或錯(cuò)誤,會(huì)被;4、5、IP 地址:客戶端機(jī)器的 IP 地址未被允許此 WebService;超限:用戶調(diào)用服務(wù)的頻率超過(guò)“用戶最大連接次數(shù)”的限制,會(huì)被。搜索:可以通過(guò)服務(wù)名稱、服務(wù)啟

13、動(dòng)和結(jié)束時(shí)間、執(zhí)行結(jié)果等搜索運(yùn)行日志。3.4超時(shí)顯示所有運(yùn)行時(shí)間超過(guò)服務(wù)最大運(yùn)行時(shí)長(zhǎng)設(shè)定的服務(wù)。服務(wù)最大運(yùn)行時(shí)長(zhǎng)在WebService 的運(yùn)行配置信息中設(shè)置。3.5 用戶帳號(hào)設(shè)置設(shè)置 WebService 用戶帳號(hào)信息。包括用戶名、可的 WebService、可以使用的客戶端 IP 等。用戶名:供外部系統(tǒng)使用的用戶名稱,作為顯示和外部系統(tǒng)活動(dòng)信息的標(biāo)識(shí);登錄 ID:外部系統(tǒng)WebService 的憑據(jù);可的 WEB 服務(wù):用戶可以的 WebService,一個(gè)用戶帳號(hào)可以多個(gè) WebService,一個(gè) WebService 也可以被多個(gè)用戶帳號(hào);可使用的客戶端 IP:限制可以WebServi

14、ce 的客戶端機(jī)器,默認(rèn)為空時(shí)不限制客戶端 IP。多個(gè) IP 地址之間用“,” 或者“;” 分隔, 如: 7,2。IP 地址的格式為 a.b.c.d 或者 a.b.c.*或者 a.b.*.*,其中*表示 0-255之間的任意數(shù)值,如:192.168.5.*, 10.1.*.*。3.6運(yùn)行日志備份支持定期自動(dòng)轉(zhuǎn)移日志到備份表中,并且可以定期日志備份表中的數(shù)據(jù)。3.7輔助功能生成客戶端代碼:自動(dòng)生成 WebService 的客戶端 JAVA 代碼和服務(wù)接口存根,并提供打包;查看 Wsdl:顯示完整 Wsdl 文本,供客戶端開(kāi)發(fā)和測(cè)試時(shí)使用。當(dāng) WebService 正常啟動(dòng)后,可以查看到完整的 W

15、sdl 文本。第四章 WebService 數(shù)據(jù)接口由于 WebService 協(xié)議是采用 XML 文本格式來(lái)交換數(shù)據(jù),因此需要將文本信息轉(zhuǎn)換成系統(tǒng)可以識(shí)別的數(shù)據(jù)。為了方便開(kāi)發(fā)開(kāi)發(fā) WebService 服務(wù)端程序,WebService2 組件提供 了組 織 架 構(gòu) 轉(zhuǎn) 換 和 附 件 保存 等 常 用 接 口 , 這 些 接 口 位 于com.landray.kmss.sys.webservice2.erfa包中。4.1 組織架構(gòu)接口4.1.1接口定義com.landray.kmss.sys.webservice2.erfa.ISysWsService4.1.2功能描述將客戶端發(fā)送的 JSo

16、n 格式的組織架構(gòu)數(shù)據(jù)轉(zhuǎn)換為 EKP 系統(tǒng)的組織架構(gòu)對(duì)象SysElement,供 EKP 系統(tǒng)的 WebService 使用。4.1.3調(diào)用方式使用 Spring 的 Set 方式注入“sysWsService”后即可調(diào)用此接口,如下所示:/*流程主文檔Form*/public class KmRevieramterForm / 流程發(fā)起人private String docCreator;public String getDocCreator() return docCreator;public void setDocCreator(String docCreator) this.docCr

17、eator = docCreator;/*啟動(dòng)流程4.1.4數(shù)據(jù)格式客戶端必須按如下格式發(fā)送組織架構(gòu)的數(shù)據(jù)到 EKP 服務(wù)端:?jiǎn)沃档母袷綖轭愋? 值,多值的格式為類型 1: 值 1 ,類型 2: 值 2.。支持的類型有主鍵(Id)、(No、DeptNo、tNo、GroupNo)、登錄名(LoginName)、關(guān)鍵字(Keyword)、LDAP的 DN 值(LdapDN),其中表示群組。表示個(gè)人,Dept 表示機(jī)構(gòu)/部門,t 表示崗位,Group4.1.5接口方法方法名參 數(shù)返回值描 述findSysElementjsonObjStr(Json 字符串)組 織 架 構(gòu) 對(duì) 象SysElement

18、根據(jù) JSON 對(duì)象字串查找單個(gè)組織架構(gòu)findSysListjsonArrStr(Json 字符串)組織架構(gòu)對(duì)象鏈表( List)根據(jù) JSON 數(shù)組字串查找多個(gè)組織架構(gòu)*/public class KmReviewWebservierviceImp implements IKmReviewWebserviervice / 注入組織架構(gòu)數(shù)據(jù)接口服務(wù)private ISysWsServiysWsService;public void setSysWsService(ISysWsServiysWsService) this.sysWsService = sysWsService;public S

19、tring addReview(KmRevieramterForm webForm) throws Exception / 調(diào)用接口獲取流程發(fā)起人SysElement creator = sysWsService.findSysElement (webForm.getDocCreator();4.2 附件接口4.2.1接口定義com.landray.kmss.sys.webservice2.erfa.ISysWsAttService4.2.2功能描述將客戶端發(fā)送的附件內(nèi)容保 EKP 系統(tǒng)里,并與主文檔關(guān)聯(lián)。4.2.3調(diào)用方式使用 Spring 的 Set 方式注入“sysWsAttServic

20、e”后即可調(diào)用此接口,如下所示:/*流程主文檔Form*/public class KmRevieramterForm / 附件內(nèi)容列表privaistaentForm attaentForms = newArrayListaentForm();public ListaentForm getaentForms() return attaentForms;public void setaentForms(ListaentForm attaentForms) this.attaentForms = attaentForms;/*啟動(dòng)流程*/public class KmReviewWebservi

21、erviceImp implements IKmReviewWebserviervice / 注入附件數(shù)據(jù)接口服務(wù)private ISysWsAttServiysWsAttService;4.2.4附件對(duì)象(AttaentForm)附件對(duì)象封裝了單個(gè)附件的信息,包括附件的文件內(nèi)容??蛻舳送ㄟ^(guò)傳遞附件對(duì)象來(lái)上 傳 附 件 。 附 件 對(duì) 象 的 類 定 義 在 com.landray.kmss.sys.webservice2.forms.AttaentForm。類的參數(shù)定義如下:客戶端可以使用 MTOM 編碼(二進(jìn)制編碼)和標(biāo)準(zhǔn)文本編碼(BASE64 編碼)兩種方式傳輸附件內(nèi)容,詳見(jiàn)第六章“We

22、bService 客戶端開(kāi)發(fā)”第 5 節(jié)。屬性名類 型缺省值描 述fdKey字符串(String)fdAttaent附件的關(guān)鍵字,本 模 式 下 為 fdAtta ent,表單模式下為附件控件的 idfdFileName字符串(String)無(wú)附件文件名fdAttaent字節(jié)數(shù)組(byte)無(wú)附件內(nèi)容,格式為字節(jié)編碼public void setSysWsAttService(ISysWsAttServiysWsAttService) this.sysWsAttService = sysWsAttService;public String addReview(KmRevieramterForm

23、 webForm) throws Exception / 附件內(nèi)容列表ListaentForm attForms = webForm.getaentForms();/ 校驗(yàn)附件大小sysWsAttService.validateAttSize(attForms);String mId = kmReviewMainService.add(form, reqontext); String m Name = form.getMClass().getName();/ 保存附件sysWsAttServiave(attForms, mId, mName);4.2.5接口方法方法名參 數(shù)參數(shù)說(shuō)明返回值描 述

24、saveattForms附 件 鏈 表(Lista entForm)附件的數(shù)據(jù)庫(kù)主鍵保存多個(gè)附件mId主文檔 IDmName主文檔的 m類名saveattForm附件AttaentForm附件的數(shù)據(jù)庫(kù)主鍵保存單個(gè)附件mId主文檔 IDmName主文檔的 m類名validateAtt SizeattForms附 件 鏈 表(Lista entForm)無(wú)校驗(yàn)附件的大小,包括單個(gè)附件的長(zhǎng)度和文檔所有附件的長(zhǎng)度,默認(rèn)為系統(tǒng)的附件最大長(zhǎng)度配置。第五章 WebService 服務(wù)端開(kāi)發(fā)5.1 開(kāi)發(fā)和部署流程在中開(kāi)發(fā)和部署 WebService 的過(guò)程如下:1、 編寫一個(gè) Spring Bean 實(shí)現(xiàn)業(yè)務(wù)

25、邏輯;2、 在 WebService 擴(kuò)展中定義 WebService 的基礎(chǔ)信息;3、 在系統(tǒng)管理模塊中點(diǎn)擊導(dǎo)入的服務(wù)信息。WebService 成功導(dǎo)入后會(huì)被自動(dòng)啟動(dòng),無(wú)需重啟 EKP 即可供外部。5.2 開(kāi)發(fā) Spring Bean1、 SpringBean的服務(wù)接口必須繼承com.landray.kmss.sys.webservice2.erfa.ISysWebservice,同時(shí)在接口上使用WebService 注解將其標(biāo)識(shí)為 WebService 接口。如下所示:2、 編寫服務(wù)實(shí)現(xiàn)類,無(wú)特殊要求,如下所示:3、添加 spring bean 配置,無(wú)特殊要求,如下所示:public

26、clasrveyService implements ISurveyService private String excludeName;privateleastPonit;public SurveyResult vote(String username,po) WebServicepublicerface ISurveyService extends ISysWebservice public SurveyResult vote(String username,po);5.3 實(shí)現(xiàn)擴(kuò)展在功能模塊中添加 WebService 的擴(kuò)展配置,實(shí)現(xiàn) Web 服務(wù)的擴(kuò)展點(diǎn),如下所示:serviceNa

27、me:Web 服務(wù)的名稱,如:?jiǎn)?dòng)Web 服務(wù),此項(xiàng)必填且唯一;流程、投票等,用于標(biāo)識(shí)一個(gè)serviceClass : Web 服 務(wù) 的 接 口 類 名 , 包 含 類 路 徑 , 如 :com.landray.kmss.sys.news.service.ISysNewsMainService,此項(xiàng)必填且唯一;serviceBean : Web 服務(wù)實(shí)現(xiàn)類在 spring 中的 ID , 此類必須實(shí)現(xiàn)com.landray.kmss.sys.webservice2.erfa.ISysWebservice 接口,必填項(xiàng);serviceDoc: 幫助文檔的根路徑,內(nèi)容包括如何調(diào)用 Web 服務(wù)以

28、及各項(xiàng)參數(shù)說(shuō)明等,文件類型為 HTML 或者 JSP 格式,比如:/ekp/sys/news/help/WsReadme.html,必填項(xiàng)。5.4導(dǎo)入并發(fā)布在 EKP 系統(tǒng)中的 WebService2 模塊(/sys/webservice2.index)- 模塊設(shè)置,或者系統(tǒng)管理模塊 - 參數(shù)配置 - WEB 服務(wù)管理中選擇“導(dǎo)入 WEB 服務(wù)”。當(dāng)出現(xiàn)導(dǎo)入成功的提示后,在 WebService2 模塊 - 系統(tǒng)服務(wù)中,可以看到服務(wù)已被更新并發(fā)布(啟動(dòng)狀態(tài)),這時(shí) WebService 已經(jīng)可以被外部系統(tǒng)了。第六章 WebService 客戶端開(kāi)發(fā)6.1 JAVA 客戶端系統(tǒng)可以自動(dòng)生成 We

29、bService 客戶端的 JAVA 代碼。在 WebService2 模塊服務(wù) - WebService 列表(/sys/webservice2.index)- 系統(tǒng)- 查看頁(yè)面,點(diǎn)擊“Java 客戶端”??蛻舳舜a壓縮包的內(nèi)容如下:Com 目錄:服務(wù)接口的客戶端接口;AddSoapHeader.java:封裝了 Soap 消息頭,在 WebService 服務(wù)端要求驗(yàn)證的模式下提供客戶端認(rèn)證信息。Cperties:配置文件,包括了 WebService 的地址、用戶登錄 ID、等信息,其中是 MD5 密文。WebServiceCnt.java:WebService 客戶端的主類,負(fù)責(zé)調(diào)用

30、Webservice。WebServiceConfig.java:負(fù)責(zé)配置文件。6.2.NET 客戶端1、 生成客戶端類2、 準(zhǔn)備 soapheader 類public class AuthHeader : SoapHeaderprivate string userName = string.Empty; private string passWord = string.Empty; public AuthHeader()this.NamespaceInitialize();public AuthHeader(string userName, string passWord)this.user

31、Name = userName; this.passWord = passWord;XmlNamespaceDeclarationspublic XmlSerializerNamespaxmlns; private void NamespaceInitialize()xmlns = new XmlSerializerNamespa();wsdl/nologo /n:Landray.EKP.Cnt3、 建立客戶端類和 soapheader 直接關(guān)系,類增加如下屬性:方法增加如下屬性:4、 調(diào)用服務(wù)6.3 Domino 客戶端建議采用 axis 方式調(diào)用 webservice。開(kāi)發(fā)步驟如下:1、

32、到axis1.42、 解壓縮,并用命令行到 axis 中 lib 文件夾下執(zhí)行命令,生成客戶端存根 java -classpathmons-logging-1.0.mons-discovery-0.2.jar;jaxrpc.jar;wsdl4j-1.5.1ISurveyServiervice cnt = new ISurveyServiervice();cnt.AuthHeaderValue = new AuthHeader(); cnt.AuthHeaderValue.UserName = admin;cnt.AuthHeaderValue.PassWord = Util.md5(1234)

33、;surveyResult result = cnt.vote(test, 5);SoapHeaderAttribute(authHeaderValue)public AuthHeader authHeaderValue = new AuthHeader();xmlns.Add(tns, );XmlElement(Namespace = ,ElementName = user)public string UserNameget return userName; set userName = value; XmlElement(Namespace = ,ElementName = passwor

34、d)public string PassWordget return passWord; set passWord = value; .jar;saaj.jar;activation.jar;.jar.apache.axis.wsdl.WSDL2Java-ocnt3、 將 lib 中 jar 包放入 domino 服務(wù)器中4、 新建 JS 庫(kù),將存根按照原有包路徑放入 JS 庫(kù)中5、 新建 JAVA,引入創(chuàng)建的 JS 庫(kù),并采用如下代碼調(diào)用 WS:注:wsdl 地址,需要根據(jù)情況更改。String endpoURL =;Serviervice = new Service();Call call

35、 = (Call) service.createCall();call.setEndpoAddreew .URL(endpoURL); call.setSOAPActionURI(/+ RequestSOAPHeader);/ 設(shè)置操作的名稱call.setOperationName(new QName(ISurveyService, vote);/ 設(shè)置soap頭信息SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(/,tns:RequestSOAPHeader); soapHeaderElement.setNamespa

36、ceURI(/);soapHeaderElement.addChildElement(tns:userName).setValue(admin); soapHeaderElement.addChildElement(tns:password).setValue(password);soapHeaderElement.addChildElement(tns:serviceName).setValue(投票調(diào)查);call.addHeader(soapHeaderElement);call.setReturnType(new QName(urn:SurveyResult, ns1:voteResp

37、onse),SurveyResult.class);/設(shè)置參數(shù)類型call.addParameter(arg0, XMLType.XSD_STRING, ParameterMode.IN); call.addParameter(arg1, XMLType.XSD_, ParameterMode.IN);/ 執(zhí)行調(diào)用SurveyResult rs = (SurveyResult) call.invoke(new Object new String(zhangsan), neweger(88) );6.4認(rèn)證在 WebService 服務(wù)端要求驗(yàn)證的模式(關(guān)閉)下,客戶端需要添加 Soap 消息頭

38、以提供認(rèn)證信息。消息頭的格式如下所示:tns:RequestSOAPHeader:一個(gè) SOAP 請(qǐng)求的消息頭,xmlns:tns 指定命名空間;tns: user:WebService 用戶的登錄 ID;tns:password:對(duì)應(yīng) WebService 用戶帳號(hào)的,要求使用 MD5 加密。,則客戶端不需要添加 Soap 消如果 WebService 服務(wù)端不要求驗(yàn)證,即開(kāi)啟了息頭。6.5 附件上傳附件接口目前支持 MTOM 編碼(二進(jìn)制編碼)和標(biāo)準(zhǔn)文本編碼(BASE64 編碼)兩種方式傳輸附件內(nèi)容。標(biāo)準(zhǔn)文本編碼為默認(rèn)格式。6.5.1選擇編碼格式而對(duì)于純文本的數(shù)據(jù),建議使用標(biāo)準(zhǔn)編碼。對(duì)較大

39、的二進(jìn)制負(fù)載的傳輸,如上傳文檔和等,建議使用 MTOM 編碼。因?yàn)闃?biāo)準(zhǔn)文本編碼使用 Base64 對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行編碼,這要求每三個(gè)字節(jié)對(duì)應(yīng)符,從而使得數(shù)據(jù)的大小增加三分之一。MTOM 能夠以原始字節(jié)形式傳輸二進(jìn)制數(shù)據(jù),這會(huì)縮短編碼 /時(shí)間并生成較小的消息。MTOM 編碼主要針對(duì)二進(jìn)制數(shù)據(jù)有優(yōu)勢(shì)。要使用 MTOM 編碼處理消息,需要開(kāi)啟 MTOM 功能,請(qǐng)參考 JAVA 客戶端代碼。6.5.2約束不建議使用 WebService 協(xié)議傳輸大附件(附件總長(zhǎng)度大于 100M)。.6.5.3參考代碼客戶端上傳附件需要傳遞附件對(duì)象,附件對(duì)象的定義請(qǐng)參考第四章“WebService 數(shù)據(jù)接口-附件對(duì)象”

40、。參考代碼如下所示:6.6 流程表單數(shù)據(jù)流程表單數(shù)據(jù)是采用 Json 格式傳輸,而流程表單原始數(shù)據(jù)的格式為 xml,定義在km_review_main 表中的 extend_data_xml 字段里。因此開(kāi)發(fā)需要提取出流程表單中輸入項(xiàng)的控件 ID 和控件值,組裝成 Json 格式。其中明細(xì)表是按列來(lái)設(shè)置,格式為明細(xì)表 id.列 id:列值 1,列值 2,列值 3.,每列單獨(dú)組一個(gè)集合。參考代碼如下:/*創(chuàng)建附件對(duì)象列表*/privaistaentForm createAllAtts() throws Exception ListaentForm attForms = new ArrayList

41、aentForm(); String fileName = 采購(gòu)訂單說(shuō)明書1.doc;AttaentForm attForm01 = createAtt(fileName); fileName = 采購(gòu)訂單說(shuō)明書2.doc;AttaentForm attForm02 = createAtt(fileName);attForms.add(attForm01); attForms.add(attForm02); return attForms;/*創(chuàng)建附件對(duì)象*/private AttaentForm createAtt(String fileName) throws Exception Atta

42、entForm attForm = new AttaentForm(); attForm.setFdFileName(fileName);/ 設(shè)置附件關(guān)鍵字,表單模式下為附件控件的idattForm.setFdKey(fd_2eddbf161a3268);byte data = file2bytes(C: + fileName); attForm.setFdAttaent(data);return attForm;6.7 流程參數(shù)流程參數(shù)是采用 JSon 格式傳輸,格式為auditNode:意見(jiàn), futureNodeId:節(jié)點(diǎn)名, changeNodeHandlers:節(jié)點(diǎn)名 1:用戶 ID

43、1;戶 ID2.。用戶 ID2., 節(jié)點(diǎn)名 2:用戶 ID1;用6.7.1參數(shù)定義6.7.2參考代碼/ 流程參數(shù)String floram = auditNode:請(qǐng)審核, futureNodeId:N7, changeNodeHandlers:N7:1183b0b84ee4f581bba001c47a78b2d9;131d019fbac 792eab0f0a684c8a8d0ec;form.setFloram(floram);序號(hào)屬性名類 型缺省值描 述1auditNode字符串(Json)無(wú)意見(jiàn)2futureNodeId字符串(Json)無(wú)流向下一節(jié)點(diǎn)的 ID,需要人工決策時(shí)設(shè)置此參數(shù)3changeNodeHandler

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論