程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 通過PL/SQL訪問Web Services

通過PL/SQL訪問Web Services

編輯:Oracle數據庫基礎

在Web Services紅得發紫的今天,到處都在談論和使用Web Services;當然,其中有不小一部分是屬於業界炒作。Oracle也始終走在技術的最前沿,早在9i時代就發布了擴展包來支持PL/SQL訪問Web Services,並且在Oracle 10g版本中使得該功能變得更加強大;這都源於引入了UTL_DBWS包,其實它是封裝了JPublisher,使得PL/SQL開發者只需要使用簡單的幾個API就能調用Web Services了。 下面我將通過一個實例向你展示如何通過PL/SQL調用Web Services,本文的重點是PL/SQL調用Web Services實現上,對於如何發布Web Services,你可以參考本人的另一篇基礎性文章《用OC4J和Axis構建Web Services》或者其他參考資料。

首先,我們來搭建運行環境吧,你得從Oracle OTN下載並安裝Oracle Database(企業版、標准版、個人版均可,但切勿安裝快捷版,因為它沒有提供sqlj組件及相關命令)。如果你已安裝好該數據庫,可跳過該步驟。

然後,需要下載對應版本的UTL_DBWS:

Pre 10g: dbws-callout-utility.zip

10g: dbws-callout-utility-10R2.zip

下載完成後,需要解壓該文件到<Oracle_install_dir>/sqlj/lib目錄下,我們還需要使用loadJava將這些jar文件加載到SYS schema中,供所有用戶使用該擴展包,命令如下:

<Oracle_install_dir>/bin/loadJava -u sys/passWord -r -v -f -s -grant public -noverify -genmissing <Oracle_install_dir>/sqlj/lib /dbwsclIEnt.jar

其實在Oracle的文檔中是聲稱10g是自帶UTL_DBWS包的,不過我下載最新的Oracle並完全安裝後,也沒有發現UTL_DBWS的半點蹤影,也只好自己拷貝並執行loadJava了。

好了,現在萬事俱備,只剩寫程序測試了,在編碼測試之前,我們假設你已經將《用OC4J和Axis構建Web Services》文章裡hellows已經部署好了,並能正常的調用sayHello方法了;當然,你發布其他的Web Services服務也同樣可行的。下面我們就創建一個function來進行測試,測試代碼如下:CREATE OR REPLACE FUNCTION call_sayHello (username IN VARCHAR2)
RETURN VARCHAR2
AS
l_service UTL_DBWS.service;
l_call UTL_DBWS.call;
l_result ANYDATA; l_wsdl_url VARCHAR2(1024);
l_service_name VARCHAR2(200);
l_Operation_name VARCHAR2(200);
l_input_params UTL_DBWS.anydata_list;
BEGIN
l_wsdl_url := 'http://localhost:8888/hellows/helloService?WSDL';
l_service_name := 'helloService';
l_Operation_name := 'sayHello';

l_service := UTL_DBWS.create_service (
wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),
service_name => l_service_name);

l_call := UTL_DBWS.create_call (
service_handle => l_service,
port_name => NULL,
operation_name => l_Operation_name);

l_input_params(1) := ANYDATA.ConvertVarchar2(username);

l_result := UTL_DBWS.invoke (
call_handle => l_call,
input_params => l_input_params);

UTL_DBWS.release_call (call_handle => l_call);
UTL_DBWS.release_service (service_handle => l_service);

RETURN ANYDATA.AccessVarchar2(l_result);
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END call_sayHello;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved