Web Services 在oracle 12 c pl/sql中调用(使用)web服务

z2acfund  于 2022-11-15  发布在  Oracle
关注(0)|答案(1)|浏览(182)

我正在尝试调用/使用一个返回静态字符串的Web服务。下面的代码在执行时抛出了一个错误(滚动到下面)。感谢帮助。
Oracle版本:12.2.0.1
已设置Oracle Wallet,UTL_HTTP、UTL_SMTP、UTL_TCP存在执行权限
对URL进行了置乱,实际的URL确实返回静态字符串

CREATE OR REPLACE FUNCTION WS_TST
    RETURN VARCHAR2
IS
    v_req           UTL_HTTP.req;
    v_resp          UTL_HTTP.resp;

    v_msg           VARCHAR2 (32767);
    v_entire_msg    VARCHAR2 (32767) := NULL;

    v_RR            NUMBER;

    v_wallet_path   VARCHAR2 (32767);

    --v_url                VARCHAR2(32767) :=  'https://dcaopppm.com/RecalcSer/api/AT/RR?stat=3&Do=01/01/2015&SType=P&Dob=01/01/1990';
    
BEGIN
    v_wallet_path := 'file:/u01/app/oracle/admin/DEVDBINST/wallet';

    UTL_HTTP.set_wallet (v_wallet_path, NULL);

    v_req := UTL_HTTP.begin_request (url => v_url, method => 'GET');

    v_resp := UTL_HTTP.get_response (r => v_req);

    BEGIN
        LOOP
            UTL_HTTP.read_text (r => v_resp, data => v_msg);
            v_entire_msg := v_entire_msg || v_msg;
            DBMS_OUTPUT.PUT_LINE ('v_entire_msg: ' || v_entire_msg);
        END LOOP;
    EXCEPTION
        WHEN UTL_HTTP.end_of_body
        THEN
            NULL;
    END;

    v_entire_msg := REPLACE (v_entire_msg, CHR (13));
    v_entire_msg := REPLACE (v_entire_msg, CHR (10));
    v_entire_msg :=
        REPLACE (v_entire_msg, '<?xml version="1.0" encoding="utf-8"?>');
    v_entire_msg :=
        REPLACE (v_entire_msg,
                 '<double xmlns="http://www.webservicex.net/">');    
    v_entire_msg := REPLACE (v_entire_msg, '</double>');

    DBMS_OUTPUT.put_line ('v_entire_msg: ' || v_entire_msg);

    BEGIN
        v_RR := TO_CHAR (v_entire_msg);
    EXCEPTION
        WHEN OTHERS
        THEN
            v_RR := NULL;
    END;

    UTL_HTTP.end_response (r => v_resp);

    RETURN v_RR;
END WS_TST;

执行时出错:

Error at line 1
ORA-29273: HTTP request failed
ORA-28759: failure to open file
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1127
ohtdti5x

ohtdti5x1#

问题就在这两行:

v_wallet_path := 'file:/u01/app/oracle/admin/DEVDBINST/wallet';
 UTL_HTTP.set_wallet (v_wallet_path, NULL);

请确保您的wallet确实在此存储库中。请记住,这应该指向wallet所在的文件夹,而不是wallet文件本身。还要确保wallet文件名为ewallet.p12
如果一切就绪,请确保您的钱包上实际上没有密码。
最后我想到的是你的数据库无法读取这个文件夹。试着也授予这个文件夹的读取权限。
这是过去对我有效的方法。请务必回来反馈是否有效!祝你好运!

相关问题