domino 調用 WebService 接口

今天看了下外包軟件公司的開發的接口說明,有數據庫和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。然後提供了以系列的內置處理方法來解讀這個複合數據類型。

 

 

發佈了30 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章