Wednesday, February 22, 2012

Oracle Database 呼叫外部地址定位網路服務(Web Service)

先至Oracle Database Web Service 下載 Web Services Callout Utility
按照說明(10.htm 或11.htm)至少完成 步驟1. Preparing the Oracle Client and Oracle Database Server

在完成上述步驟之後, 可以在$ORACLE_HOME/bin下找到"jpub"的script,複製一份(我的環境是 Oracle 11g, $ORACLE_HOME/jdk的版本是"1.5.0_30")
$ cp jpub jpub1.5
修改 jpub1.5, 以下為jpub1.5的內容

#! /bin/sh
#
# jpub - shell for invoking the JPublisher tool
# Usage: jpub <-J-javavm-options> <-jpub-options>
#
# %W% %E%



unset JAVA_HOME
JAVA_HOME=$ORACLE_HOME/jdk
export JAVA_HOME


TMPCLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$ORACLE_HOME/jdbc/lib/ojdbc5_g.jar:$ORACLE_HOME/jlib/orai18n.jar:$ORACLE_HOME/sqlj/lib/runtime12.jar:$ORACLE_HOME/jlib/orai18n.jar:$ORACLE_HOME/jlib/orai18n-mapping.jar:$ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/javavm/lib/aurora.zip:$ORACLE_HOME/sqlj/lib/dbwsa.jar:$ORACLE_HOME/rdbms/jlib/xdb.jar:$ORACLE_HOME/lib/xsu12.jar:$ORACLE_HOME/jlib/jndi.jar:$ORACLE_HOME/rdbms/jlib/aqapi.jar:$ORACLE_HOME/rdbms/jlib/jmscommon.jar:$ORACLE_HOME/lib/xmlparserv2.jar:$CLASSPATH
export TMPCLASSPATH
TMP_C_CLASSPATH=$TMPCLASSPATH
export TMP_C_CLASSPATH LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib:$JAVA_HOME/lib
export LD_LIBRARY_PATH


switches=-Xmx1024M 


JRE64FLAG=
export JRE64FLAG
files=
switcharg=


javavm=$JAVA_HOME/bin/java


while [ $# -gt 0 ]
do
 case "$1" in
 -J-classpath) TMPCLASSPATH="$2"
 shift;;
 -classpath) TMP_C_CLASSPATH="$2"
 shift;;
 -J-*) switcharg=`echo $1 | cut -c3-`
 switches="$switches $switcharg";;
 -vm=*) javavm=`echo $1 | cut -c5-` ;;
 *) files="$files $1";;
 esac
 shift
done 
exec $javavm $JRE64FLAG -classpath $TMPCLASSPATH $switches oracle.jpub.java.Main -C-classpath=$TMP_C_CLASSPATH $files


然後執行(為一行的指令,若看到分行為版本格式的緣故)
$ jpub1.5 -httpproxy=proxy.my_company.com:80 -proxywsdl=http://address.tgos.nat.gov.tw/ADDR_WS/Multiple_MatchLocate/Multiple_MatchLocate.asmx?WSDL -endpoint=http://address.tgos.nat.gov.tw/ADDR_WS/Multiple_MatchLocate/Multiple_MatchLocate.asmx


Multiple ports available. To publish a particular port, use -proxyopts=port:Multiple_MatchLocateSoap12, or -proxyopts=port:Multiple_MatchLocateSoap.
Use the default port Multiple_MatchLocateSoap12.
tmp/src/genproxy/Multiple_MatchLocateSoap12ClientJPub.java
plsql_wrapper.sql
plsql_dropper.sql
plsql_grant.sql
plsql_revoke.sql
plsql_proxy.jar
Please run plsql_wrapper.sql in the user schema, load the generated jar file and run plsql_grant.sql in the SYS schema.


使用jpub(jpub操作手冊)的測試對象為台灣地址定位服務(內政部資訊中心提供的網路服務-Web Service-元件),其WSDL的位址:
http://address.tgos.nat.gov.tw/ADDR_WS/Multiple_MatchLocate/Multiple_MatchLocate.asmx?WSDL
Endpoint 網址:
http://address.tgos.nat.gov.tw/ADDR_WS/Multiple_MatchLocate/Multiple_MatchLocate.asmx?
依jpub 所需要輸入的參數對應,則會產生幾個PL/SQL wrapper package(應用程式套件)及 SOAP proxy jar檔。
依照指示,在使用呼叫的使用者下("MVDEMO")執行"plsql_wrapper.sql",並使用"loadjava"將"plsql_proxy.jar"載入資料庫:修改"plsql_grant.sql",將"<USER>"置換成要呼叫的使用者名稱("MVDEMO"),再以SYS執行"plsql_grant.sql"。
以上就完成了從Oracle DB 呼叫外部Web Service的PL/SQL程式界面。

No comments: