




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Webservice開(kāi)發(fā)指南版權(quán)聲明本書(shū)著作權(quán)屬于金蝶軟件(中國(guó))有限公司所有,在未經(jīng)本公司許可的情況下,任何單位或個(gè)人不得以任何方式對(duì)本書(shū)的部分或全部?jī)?nèi)容擅自進(jìn)行增刪,改編,節(jié)錄,翻譯,翻印,改寫(xiě)。金蝶軟件(中國(guó))有限公司2015年8月BOSWebService1.1.BOSWebService原理21.2.發(fā)布WebService的約束31.3.BOSWebService發(fā)布31.3.1.發(fā)布流程31.3.2.發(fā)布WebService31.3.3.編輯WebService配置文件41.4.BOSWebService部署51.4.1.建立web工程51.4.2.部署發(fā)布文件51.4.3.測(cè)試
2、是否正確61.4.4.Web工程目錄及文件截圖61.5.客戶(hù)端代碼61.5.1.獲取wsdl服務(wù)描述文件61.5.2.下載工具71.5.3.建立一個(gè)新工程71.5.4.使用java客戶(hù)端111.5.5.importVoucher(憑證引入121.6.BOS webservice 安全性131.6.1.BOS webservice 安全性概述131.6.2.不啟用安全性131.6.3.啟用安全性131.6.4.如何安全性啟用141.7.EASLogin 登陸webservice 說(shuō)明141.7.1.EASLogin 接口說(shuō)明141.7.2.EASLogin 異常說(shuō)明151.7.3.EASLogi
3、n 和前面版本的差別161.8.webservice 異常查看162.WebService 客戶(hù)端開(kāi)發(fā)指南172.1.前提條件172.2.獲取WSDL文件172.3.生成客戶(hù)端182.3.1.生成Java客戶(hù)端182.3.2.建立一個(gè)新工程182.3.3.將獲取到的WSDL文件拷貝到工程的根目錄下:192.3.4.生成客戶(hù)端192.4.使用java客戶(hù)端232.5.生成C# 客戶(hù)端232.5.1.使用命令行232.5.2.運(yùn)行命令生成客戶(hù)端242.5.3.使用客戶(hù)端代碼253.webservice FAQ273.1.在EAS 上如何發(fā)布一個(gè)webservice ?273.2.如何調(diào)用一個(gè) we
4、bservice?273.3.有哪些工具能夠簡(jiǎn)單的測(cè)試 webservice?273.4.EASLogin 服務(wù)登陸如何判斷失敗273.5.調(diào)用webservice時(shí)報(bào) com.kingdee.bos.IllegalSessionStateException: Please login first 異常?273.6.EAS6.0調(diào)用webservice時(shí)報(bào)沒(méi)有 WSConfig.getSrvURL() 方法。283.7.調(diào)用webservice時(shí)報(bào).SocketTimeoutException: Read timed out 異常28BOSWebService1.1. BOSWebServic
5、e原理Webservice 主要由SOAP,WSDL, 以及UDDI 等幾塊技術(shù)組成,以XML格式進(jìn)行數(shù)據(jù)的傳輸。是建立可互操作的分布式應(yīng)用程序的新平臺(tái)Webservice的一個(gè)最基本的目的就是提供在各個(gè)不同平臺(tái)的不同應(yīng)用系統(tǒng)的協(xié)同工作能力。使各個(gè)異構(gòu)系統(tǒng)之間實(shí)現(xiàn)無(wú)縫交互。在本質(zhì)上是要為應(yīng)用程序之間提供數(shù)據(jù)通訊的標(biāo)準(zhǔn),為企業(yè)應(yīng)用之間動(dòng)態(tài)地提供大顆粒度的服務(wù),并不適合于非常精細(xì)的基于會(huì)話(huà)的方法調(diào)用以及復(fù)雜的事務(wù)(transaction)處理之中。1.2. 發(fā)布WebService的約束 在BOS Studio中發(fā)布webService時(shí),只能發(fā)布Entity和Façade兩種元數(shù)據(jù)類(lèi)型
6、成WebService服務(wù)端的代碼。 由于Entity或Façade函數(shù)參數(shù)和返回值可能包含很多復(fù)雜的業(yè)務(wù)類(lèi)型,在發(fā)布時(shí)會(huì)生成許多輔助類(lèi),一些復(fù)雜類(lèi)型在其他異構(gòu)系統(tǒng)中生成webService客戶(hù)端時(shí)不能很好的支持,因此建議在建立webService功能時(shí),最好使用Façade,并且提供簡(jiǎn)單類(lèi)型的輸入和返回參數(shù)。1.3. BOSWebService發(fā)布1.3.1. 發(fā)布流程 先建立需要發(fā)布的Façade,建立粗粒度的業(yè)務(wù)方法,業(yè)務(wù)方法盡可能提供簡(jiǎn)單數(shù)據(jù)類(lèi)型的數(shù)據(jù)參數(shù)和返回參數(shù)。1.3.2. 發(fā)布WebService 運(yùn)行BOS Studio,打開(kāi)“包分類(lèi)”視圖,在其
7、中選中要發(fā)布WebService的實(shí)體或Façade對(duì)象(可同時(shí)選中多個(gè)),點(diǎn)擊鼠標(biāo)右鍵,在彈出菜單中選擇“發(fā)布WebService”,將彈出“發(fā)布WebService”向?qū)В?選擇實(shí)體或Façade對(duì)象下要發(fā)布的方法,手工輸入或者點(diǎn)擊“瀏覽”按鈕來(lái)指定發(fā)布生成代碼存放的目錄,可以同時(shí)勾中“追加到配置文件”。這樣BOS Studio將會(huì)根據(jù)選中的對(duì)象和要發(fā)布的方法生成WebService代碼和wsdl描述1.3.3. 編輯WebService配置文件在“包分類(lèi)”視圖中,選擇要編輯其配置文件的解決方案,點(diǎn)擊工具欄上的“編輯WebService 配置文件”按鈕,將會(huì)彈出配置文件
8、編輯向?qū)г谄溟g,可以增加或刪除要發(fā)布的對(duì)象(方法),選擇好要發(fā)布的對(duì)象(方法)后,點(diǎn)擊“完成”按鈕,即可完成對(duì)配置文件的編輯。配置文件位于解決方案的根目錄下。1.4. BOSWebService部署 1.4.1. 部署發(fā)布文件發(fā)布成功以后,在臨時(shí)目錄里會(huì)生成一個(gè)wsdd文件和一個(gè)目錄,例如:D:webtestAcctCussentCheckFacade.wsddD:webtestcomkingdeeeasfiglappwebserviceWSAcctCussentCheckFacadeSrvProxy.javaWSAcctCussentCheckFacadeSrvProxy.java文件拷貝到
9、解決方案src目錄中,注意包名和路徑一致;AcctCussentCheckFacade.wsdd處理方法如下:找到解決方案的runtimeserverdeployeas.ear目錄,用解壓縮軟件打開(kāi)web.war,進(jìn)入WEB-INF目錄把AcctCussentCheckFacade.wsdd添加進(jìn)去;把AcctCussentCheckFacade.wsdd文件里的service節(jié)點(diǎn)內(nèi)容添加到server-config.wsdd文件。操作方法建議:提取server-config.wsdd文件到臨時(shí)目錄,用編輯工具打開(kāi),再打開(kāi)AcctCussentCheckFacade.wsdd,拷貝servic
10、e節(jié)點(diǎn)內(nèi)容粘貼到server-config.wsdd文件,注意XML格式一致;保存server-config.wsdd文件并拷回到web.war壓縮包里。1.4.2. 測(cè)試是否正確上面的步驟操作完成后,快測(cè)已經(jīng)可以看到新建的WebService。通過(guò)瀏覽器輸入服務(wù)的地址,訪問(wèn)服務(wù)是否正確如輸入:http:/server-ip:port/ormrpc/services BOS快測(cè)啟動(dòng)的默認(rèn)端口為568981.4.3. 部署到正式服務(wù)器1、在BIM中部署代碼和元數(shù)據(jù);2、把解決方案下改好的runtimeserverdeployeas.earweb.war文件拷貝到EAS服務(wù)器的serverdepl
11、oyeas.ear目錄中,3.將生成的Web Service的java代碼編譯為class,放在EAS服務(wù)器的easserverdeployeas.earweb.warWEB-INFclass下,把發(fā)布的wsdd文件中服務(wù)部分拷貝到server-config.wsdd中。4.重啟EAS服務(wù)器1.4.4. Web工程目錄及文件截圖1.5. 客戶(hù)端代碼1.5.1. 獲取wsdl服務(wù)描述文件WebService已經(jīng)成功部署到應(yīng)用服務(wù)器上(本文以Apusic為例進(jìn)行說(shuō)明),客戶(hù)端可以通過(guò)瀏覽器訪問(wèn)到已部署的WebService。要構(gòu)建相關(guān)的客戶(hù)端,就要獲取已經(jīng)部署的WebService的相應(yīng)的WSDL
12、文件,用鼠標(biāo)右鍵點(diǎn)擊藍(lán)色的部分“(wsdl)”,選取“目標(biāo)另存為”菜單,這時(shí)將出現(xiàn)選擇保存文件位置的對(duì)話(huà)框,在文件名處將文件的后綴名由xml改為wsdl,將wsdl文件保存至本地。1.5.2. 下載工具 通過(guò)下載eclipse(下載j2ee版本)或通過(guò)命令行來(lái)生成java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java 其中l(wèi)ib是axis包目錄生成客戶(hù)端代碼。1.5.3. 建立一個(gè)新工程 例如建立一個(gè)工程名為GenerateWSClient的Java工程:將獲取到的WSDL文件拷貝到工程的根目錄下用鼠標(biāo)右鍵點(diǎn)
13、擊要生成客戶(hù)端的WSDL文件,選取菜單“Web Services”-“Generate Client”將會(huì)彈出生成客戶(hù)端向?qū)鐖D,使用默認(rèn)值,點(diǎn)擊“Next >”,進(jìn)入下一步:依然使用默認(rèn)值,點(diǎn)擊“Next >”,進(jìn)入下一步:依然使用默認(rèn)值,點(diǎn)擊“Finish”,即可生成相應(yīng)的客戶(hù)端工程(是一個(gè)Web工程)1.5.4. 使用java客戶(hù)端新生成的工程中有一個(gè)JavaSource目錄,我們要使用的java代碼就位于這個(gè)目錄,例如上圖中的WSLoginProxy.java。以下是一個(gè)使用Java客戶(hù)端的例子:import java.rmi.RemoteException;import
14、com.kingdee.WSLoginProxy;/此為發(fā)布的代碼import com.client.WSContext;public class LoginTest public static void main(String args) try WSLoginProxy proxy = new WSLoginProxy();/* * web service客戶(hù)端登陸 * userName 用戶(hù)名 * password 密碼 * slnName eas * dcName 數(shù)據(jù)中心,對(duì)應(yīng)的是dataCenter中數(shù)據(jù)中心id * language 語(yǔ)言 L2簡(jiǎn)體 * dbType 數(shù)據(jù)庫(kù)類(lèi)型
15、0:sqlServer 1:db2 2:oracle * authPattern 驗(yàn)證方式 默認(rèn) "BaseDB" ; 其他認(rèn)證方式KEY可從easAuthPatterns.xml中獲取 */WSContext ctx = proxy.login("用戶(hù)", "", "eas", "數(shù)據(jù)中心id", "L2", 0); /成功登錄后打印sessionIdSystem.out.println(ctx.getSessionId(); /調(diào)用憑證業(yè)務(wù)webservice方法impo
16、rtVoucher(憑證引入),請(qǐng)看1.55節(jié) catch (RemoteException e) e.printStackTrace();1.5.5. importVoucher(憑證引入1、 憑證引入接口,兩個(gè)接口方法都可用,且用法一致2、 憑證 webService 接口生成客戶(hù)端,可參考 EASLogin 方法3、 憑證引入?yún)?shù):importVoucher(wsvoucher, int isVerify, int isCashflow)l 傳參數(shù)第1個(gè):WSWSVoucher 普通對(duì)象數(shù)組,見(jiàn)構(gòu)造EAS憑證字段以及含義說(shuō)明l 傳參數(shù)第2個(gè):isverify 0 不核銷(xiāo),暫存 1 核銷(xiāo),
17、暫存 2 不核銷(xiāo),提交 3 核銷(xiāo),提交l 傳參數(shù)第3個(gè):isImpCashflow是否引入現(xiàn)金流量 0 不引入1 引入4、 憑證引入代碼調(diào)用說(shuō)明5、 返回值String是一個(gè)長(zhǎng)度為憑證數(shù),寬度是5的字符串?dāng)?shù)據(jù)寬度的定義:外部系統(tǒng)憑證號(hào),憑證字,會(huì)計(jì)年度,會(huì)計(jì)期間,處理信息,異常信息,金蝶憑證號(hào)1.6. BOS webservice 安全性 1.6.1. BOS webservice 安全性概述BOS webservice 安全 有兩種模式,啟用安全性 和 不啟用安全性,默認(rèn)配置是不啟用安全性。1.6.2. 不啟用安全性在不啟用安全性,則訪問(wèn)業(yè)務(wù)webservice前,先成功調(diào)用 EASLogi
18、n 登陸的webservice服務(wù),則系統(tǒng)將記住相關(guān)登陸信息,下次調(diào)用業(yè)務(wù)方法是,直接從服務(wù)器中獲取相關(guān)登陸信息。如果多次調(diào)用 EASLogin webservice服務(wù),則以最后一次為準(zhǔn)。1.6.3. 啟用安全性在啟用安全性后,每次WEBSERVICE 訪問(wèn),必須帶上相關(guān)的 SessionID 信息,如下紅字部分。系統(tǒng)將根據(jù) SOAP頭中的SessionID 信息,獲取相關(guān)的上下文信息。<SOAP-ENV:Envelope xmlns:SOAP-ENV="/soap/envelope/" xmlns:SOAP-ENC
19、="/soap/encoding/" xmlns:xsi="/2001/XMLSchema-instance" xmlns:xsd="/2001/XMLSchema" xmlns:m0="http:/com.kingdee.eas.base.btp.app.BTPManager/isPropOwner/parameter/promote"><SOAP-ENV:Header><ns
20、1:SessionId xmlns:ns1="">ada894c0-8223-41dc-b816-61eb67dc38bd</ns1:SessionId></SOAP-ENV:Header><SOAP-ENV:Body><m:isPropOwner xmlns:m="http:/com.kingdee.eas.base.btp.app.BTPManager/Service"><m0:bosTypeString>BF76D8D1</m0:bosTypeString><m0:
21、propName>id</m0:propName></m:isPropOwner></SOAP-ENV:Body></SOAP-ENV:Envelope>1.6.4. 如何安全性啟用一、修改easSpetties文件 isRomoteLocate=falseisRomoteUserCheck=true二、修改easServereasserverdeployeas.ear web.war 壓縮文件中 WEB-INF 目錄下server-confi
22、g.wsdd 文件 . <handler name="Authenticate" type= "java:org.apache.axis.handlers.SimpleAuthenticationHandler"/> <handler name="LoginHandler" type="java:com.kingdee.bos.webservice.LoginHandler"/> . <transport name="http"> <requestFlo
23、w> . <handler type="LoginHandler"/> </requestFlow> </transport>1.7. EASLogin 登陸webservice 說(shuō)明1.7.1. EASLogin 接口說(shuō)明EASLogin 中有兩個(gè)方法 方法一、public WSContext login(String userName,String password,String slnName,String dcName,String language ,int dbType) throws AxisFault方法二、publ
24、ic WSContext login( String userName, String password, String slnName, String dcName, String language , int dbType, String authPattern) throws AxisFault參數(shù)說(shuō)明:userName: 登陸用戶(hù)名password: 登陸密碼slnName:解決方案名稱(chēng)(通常為 eas)dcName: 數(shù)據(jù)中心 numberlanguage: L1(英文)、L2(中文簡(jiǎn)體)、 L3(中文繁體)dbType: 數(shù)據(jù)中心數(shù)據(jù)庫(kù)類(lèi)型 0(MS SQL Server)、1(D
25、B2 UDB)、2(Oracle)(歷史遺留參數(shù))authPattern: EAS 的驗(yàn)證方式, 在方法一種默然為 BaseDB1.7.2. EASLogin 異常說(shuō)明在 BOS6.2 版本中,EASLogin 登陸出錯(cuò)將會(huì)返回 失敗返回報(bào)文SOAP 協(xié)議中 soapenv:Fault 標(biāo)簽的相關(guān)說(shuō)明<faultcode>供識(shí)別故障的代碼<faultstring>可供人閱讀的有關(guān)故障的說(shuō)明<faultactor>有關(guān)是誰(shuí)引發(fā)故障的信息<detail>存留涉及 Body 元素的應(yīng)用程序?qū)S缅e(cuò)誤信息1.7.3. EASLogin 和前面版本的差別EA
26、SLogin 在BOS 6.2 之前,登陸失敗后,返回WSContext對(duì)象,當(dāng) WSContext. sessionId 是為null 或 空 時(shí),表明登陸失敗,失敗的具體日志信息在 服務(wù)器日志中可以查看。BOS 6.2 修改為當(dāng)?shù)顷懯。瑢⒎祷?Fault 報(bào)文(通常客戶(hù)端引擎代碼會(huì)用異常方式表示), Fault 中將包含具體的錯(cuò)誤信息。同時(shí)服務(wù)器日志中也會(huì)打印出錯(cuò)誤日志。1.8. webservice 異常查看webservice 調(diào)用錯(cuò)誤,將可以在 EAS 相應(yīng)的系統(tǒng)日志中查看到相應(yīng)的信息。如 $EASHOME/ /server/profiles/server1/logs/ apusi
27、c.log.0有的異常信息也會(huì)通過(guò) SOAP 返回到客戶(hù)端。可參考返回SOAP的faultstring元素中的錯(cuò)誤詳細(xì)信息。2. WebService 客戶(hù)端開(kāi)發(fā)指南2.1. 前提條件WebService已經(jīng)成功部署到應(yīng)用服務(wù)器上(本文以Apusic為例進(jìn)行說(shuō)明),客戶(hù)端可以通過(guò)瀏覽器訪問(wèn)到已部署的WebService,例如通過(guò)以下地址訪問(wèn)到已部署的WebService:http:/localhost:6888/easws/services2.2. 獲取WSDL文件如上圖所示,應(yīng)用服務(wù)器已經(jīng)部署了相關(guān)的WebService。要構(gòu)建相關(guān)的客戶(hù)端,就要獲取已經(jīng)部署的WebService的相應(yīng)的WS
28、DL文件,用鼠標(biāo)右鍵點(diǎn)擊藍(lán)色的部分“(wsdl)”,選取“目標(biāo)另存為”菜單,這時(shí)將出現(xiàn)選擇保存文件位置的對(duì)話(huà)框,在文件名處將文件的后綴名由xml改為wsdl,將wsdl文件保存至本地。2.3. 生成客戶(hù)端2.3.1. 生成Java客戶(hù)端下面將以使用Eclipse3.1來(lái)生成java客戶(hù)端為例進(jìn)行說(shuō)明。Eclipse3.1可以到免費(fèi)下載。運(yùn)行后,要為Eclipse配置至少一個(gè)相應(yīng)的應(yīng)用服務(wù)器,例如Tomcat5.5。2.3.2. 建立一個(gè)新工程例如建立一個(gè)工程名為GenerateWSClient的Java工程:2.3.3. 將獲取到的WSDL文件拷貝到工程的根目錄下
29、:2.3.4. 生成客戶(hù)端用鼠標(biāo)右鍵點(diǎn)擊要生成客戶(hù)端的WSDL文件,選取菜單“Web Services”-“Generate Client”將會(huì)彈出生成客戶(hù)端向?qū)В喝鐖D,使用默認(rèn)值,點(diǎn)擊“Next >”,進(jìn)入下一步:依然使用默認(rèn)值,點(diǎn)擊“Next >”,進(jìn)入下一步:依然使用默認(rèn)值,點(diǎn)擊“Finish”,即可生成相應(yīng)的客戶(hù)端工程(是一個(gè)Web工程)。2.4. 使用java客戶(hù)端新生成的工程中有一個(gè)JavaSource目錄,我們要使用的java代碼就位于這個(gè)目錄,例如上圖中的WSLoginProxy.java。以下是一個(gè)使用Java客戶(hù)端的例子:import java.rmi.Remo
30、teException;import _111._19._168._192.easwebservice.services.easlogin.WSLoginProxy;import client.WSContext;public class LoginTest /* * param args */public static void main(String args) try WSLoginProxy proxy = new WSLoginProxy();WSContext ctx = proxy.login("fanfan", "", "eas
31、", "eas50", "l2", 0);System.out.println(ctx.getSessionId(); catch (RemoteException e) e.printStackTrace();所調(diào)用的方法中的參數(shù)可以從WebService提供者處獲得。2.5. 生成C# 客戶(hù)端在此,以Microsoft Visual Studio .Net 2003為例說(shuō)明如何生成C# 客戶(hù)端。用戶(hù)在正確安裝完Microsoft Visual Studio .Net 2003后,需要設(shè)置一個(gè)環(huán)境變量Path= C:Program Files
32、Microsoft Visual Studio .NET 2003SDKv1.1Bin,其中C:Program FilesMicrosoft Visual Studio .NET 2003是Microsoft Visual Studio .NET 2003的安裝路徑。2.5.1. 使用命令行運(yùn)行“cmd”,打開(kāi)命令行窗口,并進(jìn)入WSDL文件所在目錄(在此為C:wsdl目錄):2.5.2. 運(yùn)行命令生成客戶(hù)端運(yùn)行命令wsdl XXX.wsdl(XXX為wsdl文件的文件名),即可生成C# 的WebService客戶(hù)端代碼:輸入途中命令,按回車(chē)鍵,即可自動(dòng)生成C# 客戶(hù)端代碼:如上圖所示,生成了一
33、個(gè)文件WSLoginService.cs,這就是我們所需要的客戶(hù)斷代碼2.5.3. 使用客戶(hù)端代碼運(yùn)行Microsoft Visual Studio .NET 2003,建立一個(gè)工程,將剛剛生成的WSLoginService.cs文件拷貝到工程的根目錄,手工為該代碼配置合適的命名空間:這時(shí)就可以調(diào)用該客戶(hù)端代碼了。例如以下代碼:using System;namespace ConsoleApplication1/ <summary>/ Summary description for Class1./ </summary>class Class1/ <summary
34、>/ The main entry point for the application./ </summary>STAThreadstatic void Main(string args)WSLoginService proxy = new WSLoginService();WSContext ctx = proxy.login("fanfan", "", "eas", "eas50", "l2", 0);Console.WriteLine(ctx.sessionId);Con
35、sole.ReadLine();所調(diào)用的方法中的參數(shù)可以從WebService提供者處獲得。3. webservice FAQ3.1. 在EAS 上如何發(fā)布一個(gè)webservice ?請(qǐng)看 BOS開(kāi)發(fā)指南_WebService文檔3.2. 如何調(diào)用一個(gè) webservice?請(qǐng)看 BOS開(kāi)發(fā)指南_WebService客戶(hù)端開(kāi)發(fā)文檔3.3. 有哪些工具能夠簡(jiǎn)單的測(cè)試 webservice?可采用xmlspy 軟件。在 SOAPàCreate new SOAP requestà選擇wsdl 文件,點(diǎn)擊OK à 選擇測(cè)試的方法à 在返回的SOAP報(bào)文中,輸入相
36、應(yīng)的參數(shù)信息在SOAP àSend request to server xmlspy 將訪問(wèn)服務(wù),并列出返回的 SOAP 報(bào)文。3.4. EASLogin 服務(wù)登陸如何判斷失敗在 BOS6.2 之前,EASLogin 服務(wù)返回 WSContext, 當(dāng) WSContext. sessionId 是為null 或 空 時(shí),表明登陸失敗,失敗的具體日志信息在 服務(wù)器日志中可以查看。在 BOS6.2 登陸失敗,返回SOAP報(bào)文則BODY為FAULT標(biāo)簽(即客戶(hù)端webservice引擎將拋出異常)3.5. 調(diào)用webservice時(shí)報(bào) com.kingdee.bos.IllegalSess
37、ionStateException: Please login first 異常?1、在調(diào)用 業(yè)務(wù)的webservice前,需要先調(diào)用 EASLogin webservice 登陸。2、判斷調(diào)用 EASLogin webservice 是否成功。3.6. EAS6.0調(diào)用webservice時(shí)報(bào)沒(méi)有 WSConfig.getSrvURL() 方法。打補(bǔ)丁 PT0247173.7. 調(diào)用webservice時(shí)報(bào).SocketTimeoutException: Read timed out 異常在使用webservice客戶(hù)端調(diào)用 webservice時(shí),客戶(hù)端默認(rèn)會(huì)設(shè)置一個(gè)超時(shí)時(shí)間,當(dāng)調(diào)用超過(guò)該
38、時(shí)間后,客戶(hù)端將會(huì)報(bào) .SocketTimeoutException: Read timed out 異常。可以通過(guò)客戶(hù)端參數(shù)設(shè)置改變超時(shí)時(shí)間如果采用axis1客戶(hù)端:call = (Call) service.createCall(); call.setTimeout(TIMEOUT);如果采用axis2客戶(hù)端:ServiceClient call = new ServiceClient();call.setOptions(options);call.getOptions().setTimeOutInMilliSeconds(Constants.WSTIMEOUT);4. Webservic
39、e返回復(fù)雜對(duì)象 List 或者JAVABEAN中包含List axis返回對(duì)象的基本要求,Axis開(kāi)發(fā)的Webservice中不能直接返回List對(duì)象,只能通過(guò)數(shù)組的方式返回,當(dāng)然在直接返回List的例子中,服務(wù)端代碼是返回List,但通過(guò)傳輸后客戶(hù)端必須以數(shù)組的方式進(jìn)行解讀,因此建議直接返回?cái)?shù)組方式。4.1. 以下為例子源碼 服務(wù)端代碼: package com.kingdee.model;import java.util.List;/書(shū)本public class Book implements java.io.Serializable/* * */private static final
40、long serialVersionUID = -8798284029723517521L;/書(shū)本名稱(chēng)private String name;/書(shū)本價(jià)格private Double price;/一本書(shū)有多個(gè)作者進(jìn)行編寫(xiě) 最好只能用數(shù)組方式,請(qǐng)勿用其他方式private BookAuthor bookAuthor;public String getName() return name;public void setName(String name) = name;public Double getPrice() return price;public void setPri
41、ce(Double price) this.price = price;public BookAuthor getBookAuthor() return bookAuthor;public void setBookAuthor(BookAuthor bookAuthor) this.bookAuthor = bookAuthor;Package com.kingdee.model;/作者public class BookAuthor implements java.io.Serializable/* * */private static final long serialVersionUID
42、= -6434694774033892935L;/作者名稱(chēng)private String name;/作者簡(jiǎn)述private String desc;public String getName() return name;public void setName(String name) = name;public String getDesc() return desc;public void setDesc(String desc) this.desc = desc;package com.kingdee.service;import java.util.ArrayList
43、;import java.util.List;import com.kingdee.model.Book;import com.kingdee.model.BookAuthor;/書(shū)本訂購(gòu)public class BookOrder public static Book book=new Book();/設(shè)置要訂購(gòu)的書(shū)名稱(chēng)public String setBookName(String name)book.setName(name);BookAuthor authorList=new BookAuthor1;BookAuthor author=new BookAuthor();author.s
44、etName("bookAuthor");author.setDesc("authorDesc");authorList0=author;book.setBookAuthor(authorList);return "success"/根據(jù)名稱(chēng)返回書(shū)本,一個(gè)書(shū)本有多個(gè)作者public Book getBookByName(String name)if(name!=null&&!"".equalsIgnoreCase(name)&&name.equalsIgnoreCase(book.g
45、etName()return book;elsereturn null;/返回所有(多個(gè))書(shū)本public List getAllBooks()List bookList=new ArrayList();bookList.add(book);return bookList;4.2. 關(guān)鍵配置<!-定義的webservice名稱(chēng) -> <service name="BookService" provider="java:RPC"> <parameter name="className" value="com.kingdee.service.BookOrder" /> <parameter name="allowedMethods" value="*" /> <!- 這里定義了方法的參數(shù)以及返回值 可以不寫(xiě) ->
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年農(nóng)業(yè)生物技術(shù)在農(nóng)業(yè)生物抗逆性基因克隆育種中的應(yīng)用:基因編輯與抗逆性突破報(bào)告
- 滬教版七年級(jí)英語(yǔ)下冊(cè)Unit1-Unit8作文專(zhuān)題期末復(fù)習(xí)-課件
- 微分方程題目及答案
- 系統(tǒng)性硬化講課件
- 外語(yǔ)保送題目大全及答案
- 腦卒中患者的急救與管理的護(hù)理查房講課件
- DB2310-T 165-2025 李樹(shù)主要病蟲(chóng)害綜合防控技術(shù)規(guī)程
- 學(xué)生團(tuán)隊(duì)合作中的動(dòng)機(jī)激發(fā)策略研究
- 山東傳媒職業(yè)學(xué)院《生物課程標(biāo)準(zhǔn)解讀與分析》2023-2024學(xué)年第二學(xué)期期末試卷
- 眼球護(hù)理課件
- 2025年時(shí)事政治考試100題(含參考答案)
- 安裝服務(wù)合同范本版
- 人工智能設(shè)計(jì)倫理智慧樹(shù)知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- 《作物栽培學(xué)》課件-第八章甘蔗栽培
- 省級(jí)土壤樣品庫(kù)實(shí)施方案
- 走進(jìn)校園課堂體驗(yàn)學(xué)校生活——2018幼兒園參觀小學(xué)簡(jiǎn)報(bào)
- 手少陰心經(jīng)腧穴
- 回彈記錄表 (1).docx
- 河南POCT試劑項(xiàng)目投資計(jì)劃書(shū)(模板)
- 不良品統(tǒng)計(jì)表樣表
- 2016-2017學(xué)年廣西桂林市八年級(jí)(下)期末數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論