今天看了下外包軟件公司的開發的接口說明,有數據庫和WS兩種接口。
我考慮使用WS接口。
客戶端可以使用AJax調用Web Service。
現在考慮服務器端domino 調用 Web Service了。當然你可以構造整個 SOAP Request 包去訪問,然後自己解析返回的XML,也可用現成的一些工具。
lotus scirpt 調用WS,如果在Windows 平臺下,使用MS的soaptookit,然後創建一個ActiveX對象SOAP。
可惜我的在AS400平臺下。用不了,只能用Java了,需要引用幾個Jar包。下載SoapConnect 的Jar包
然後在代理調用。
另外一個辦法:用第三方java包axis,到官方網站下載axis , 把相關的lib目錄裏jar 包放到notes或domino 目錄下的JVM/ext目錄。
調用org.apache.axis.client 裏面的方法。
工作步驟:
首先使用soapUI 測試WebService 連接,分析WSDL,瞭解這個WS端的調用的操作方法 ,參數,以及正常返回的XML 結果。
然後是domino服務端JAVA代理程序的編寫調試,axis2 是axis的升級,調用更爲簡單。下載後設置好JAVA_HOME變量爲JRE所在的路徑。利用WSDL2JAVA生成兩個JAVA文件,代碼過程需要調用這兩個java文件裏的方法。
我這邊的WS端是要進行NTLM的登錄認證。網上搜了資料,再自己摸索調試。成功post 了Request並得到Response。代碼片段:
LzServiceStub stub=new LzServiceStub();
LzServiceStub.GetRoadInfoData request =new LzServiceStub.GetRoadInfoData();
HttpTransportProperties.Authenticator httpAuth=new HttpTransportProperties.Authenticator();
httpAuth.setUsername("****");
httpAuth.setPassword("**");
httpAuth.setHost("********");
httpAuth.setDomain("*******);
httpAuth.setPort(8001);
ServiceClient SCilent=stub._getServiceClient();
SCilent.getOptions().setProperty(HTTPConstants.AUTHENTICATE, httpAuth);
stub._setServiceClient(SCilent);
LzServiceStub.GetRoadInfoDataResponse reponse=stub.getRoadInfoData(request);
GetRoadInfoDataResult_type0 result = reponse.getGetRoadInfoDataResult();
結果返回的是一個.net 得DataSet類型。這個是.net 的複合數據類型,經過WS後成爲一個XML複合元素。好在Axis2有足夠的智能去處理它,它自動生成一個類似******_type0 的類來對應於這個DataSet。然後提供了以系列的內置處理方法來解讀這個複合數據類型。