• UTL_DBWS


    from:http://oracle-base.com/articles/10g/utl_dbws-10g.php

    In a previous article I presented a method for Consuming Web Services using a basic SOAP implementation. This article provides similar functionality, but this time using the UTL_DBWS package, which is essentially a PL/SQL wrapper over JPublisher.

    First, download the latest copy of the dbwsclient.jar file:

    Extract the jar file from the zip file into the "$ORACLE_HOME/sqlj/lib" directory.

    The jar file can be loaded into the SYS schema for everyone to access, or into an individual schema that needs access to the web client. To make sure you avoid errors during the load, set the JAVA_POOL_SIZE initialization parameter to at least 150M.

    export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
    
    # Load into the SYS schema.
    export PATH=$ORACLE_HOME/bin:$PATH
    cd $ORACLE_HOME/sqlj/lib
    # 10gR2
    loadjava -u sys/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb102.jar
    # 11g and 12c
    loadjava -u sys/password -r -v -f -genmissing -s -grant public dbwsclientws.jar dbwsclientdb11.jar
    
    # Load into an individual schema.
    export PATH=$ORACLE_HOME/bin:$PATH
    cd $ORACLE_HOME/sqlj/lib
    # 10gR2
    loadjava -u scott/tiger -r -v -f -genmissing dbwsclientws.jar dbwsclientdb102.jar
    # 11g & 12c
    loadjava -u scott/tiger -r -v -f -genmissing dbwsclientws.jar dbwsclientdb11.jar

    In Oracle 10g the UTL_DBWS package is loaded by default. In Oracle 9i, 11g and 12c the package must be loaded using the specification and body provided in the zip file. The execute privilege should be granted on the ULT_DBWS package to any users needing access to the functionality.

    $ cd $ORACLE_HOME/sqlj/lib
    $ sqlplus / as sysdba
    
    SQL> @utl_dbws_decl
    SQL> @utl_dbws_body
    
    SQL> CREATE PUBLIC SYNONYM utl_dbws FOR sys.utl_dbws;
    SQL> GRANT EXECUTE ON sys.utl_dbws TO test;

    The function below uses the UTL_DBWS package to access a web services from PL/SQL. The URL of the WDSL file describing the web service is shown here (http://oracle-base.com/webservices/server.php?wsdl). The web service accepts two number parameters and returns the sum of those values.

    CREATE OR REPLACE FUNCTION add_numbers (p_int_1 IN NUMBER,
                                            p_int_2 IN NUMBER)
      RETURN NUMBER
    AS
      l_service          UTL_DBWS.service;
      l_call             UTL_DBWS.call;
      
      l_wsdl_url         VARCHAR2(32767);
      l_namespace        VARCHAR2(32767);
      l_service_qname    UTL_DBWS.qname;
      l_port_qname       UTL_DBWS.qname;
      l_operation_qname  UTL_DBWS.qname;
    
      l_xmltype_in       SYS.XMLTYPE;
      l_xmltype_out      SYS.XMLTYPE;
      l_return           NUMBER;
    BEGIN
      l_wsdl_url        := 'http://oracle-base.com/webservices/server.php?wsdl';
      l_namespace       := 'http://oracle-base.com/webservices/';
    
      l_service_qname   := UTL_DBWS.to_qname(l_namespace, 'Calculator');
      l_port_qname      := UTL_DBWS.to_qname(l_namespace, 'CalculatorPort');
      l_operation_qname := UTL_DBWS.to_qname(l_namespace, 'ws_add');
    
      l_service := UTL_DBWS.create_service (
        wsdl_document_location => URIFACTORY.getURI(l_wsdl_url),
        service_name           => l_service_qname);
    
      l_call := UTL_DBWS.create_call (
        service_handle => l_service,
        port_name      => l_port_qname,
        operation_name => l_operation_qname);
    
      l_xmltype_in := SYS.XMLTYPE('<?xml version="1.0" encoding="utf-8"?>
        <ws_add xmlns="' || l_namespace || '">
          <int1>' || p_int_1 || '</int1>
          <int2>' || p_int_2 || '</int2>
        </ws_add>');
      l_xmltype_out := UTL_DBWS.invoke(call_Handle => l_call,
                                       request     => l_xmltype_in);
      
      UTL_DBWS.release_call (call_handle => l_call);
      UTL_DBWS.release_service (service_handle => l_service);
    
      l_return := l_xmltype_out.extract('//return/text()').getNumberVal();
      RETURN l_return;
    END;
    /

    The output below shows the function in action.

    SELECT add_numbers(1, 5) FROM dual;
    
    ADD_NUMBERS(1,5)
    ----------------
                   6
    
    SQL>
    
    SELECT add_numbers(10, 15) FROM dual;
    
    ADD_NUMBERS(10,15)
    ------------------
                    25
    
    SQL>

    For more information see:


  • 相关阅读:
    Git原理与命令大全
    【网络安全】加解密算法最详解
    陪你阅读《区块链:从数字货币到信用社会》序一
    Splunk初识
    红帽学习记录[RHCE] ISCSI远程块储存
    DNS 域名系统与邮件服务器
    红帽学习记录[RHCE] 防火墙与网络合作
    红帽学习笔记[RHCE]网络配置与路由转发
    红帽学习笔记[RHCE]OpenLDAP 服务端与客户端配置
    红帽学习笔记[RHCSA] 第二周
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299016.html
Copyright © 2020-2023  润新知