APEX_WEB_SERVICE.MAKE_REST_REQUEST 导致 ORA-29248:使用无法识别的 WRL 打开钱包

Posted

技术标签:

【中文标题】APEX_WEB_SERVICE.MAKE_REST_REQUEST 导致 ORA-29248:使用无法识别的 WRL 打开钱包【英文标题】:APEX_WEB_SERVICE.MAKE_REST_REQUEST results in ORA-29248: an unrecognized WRL was used to open a wallet 【发布时间】:2017-08-10 16:22:35 【问题描述】:

我正在尝试在 Oracle 12c/Apex 5.1 上使用 APEX_WEB_SERVICE.MAKE_REST_REQUEST 通过 SSL/TLS 访问 REST Web 服务。这会导致错误消息ORA-29248: an unrecognized WRL was used to open a wallet。我已将必要的证书放入 oracle 钱包并将其存储在代码中指定的位置。 oracle 用户可以访问它。完整代码和错误消息如下。

DECLARE
    l_clob           CLOB;
    l_param_names    apex_application_global.vc_arr2;
    l_param_values   apex_application_global.vc_arr2;
BEGIN

    apex_web_service.g_request_headers(1).name    := 'Content-Type';
    apex_web_service.g_request_headers(1).VALUE   := 'application/x-www-form-urlencoded';

    apex_web_service.g_request_headers(2).name    := 'apikey';
    apex_web_service.g_request_headers(2).VALUE   := 'this_is_the_api_key';

    l_param_names(1)                              := 'fist_param_name';
    l_param_values(1)                             := 'first_param_value';

    l_param_names(2)                              := 'second_param_name';
    l_param_values(2)                             := 'second_param_value';

    -- Get the XML response from the web service.
    l_clob :=
        APEX_WEB_SERVICE.make_rest_request(
            p_url           => 'https://example.com/rest/webservice',
            p_http_method   => 'POST', 
            p_parm_name     => l_param_names, 
            p_parm_value    => l_param_names,
            p_wallet_path   => '/path/to/wallet/dir', 
            p_wallet_pwd    => 'walletpassword');

    -- Display the whole document returned.
    DBMS_OUTPUT.put_line(l_clob);

END;

错误信息:

ORA-29273: HTTP-Anforderung nicht erfolgreich
ORA-29248: Ein nicht erkannter WRL wurde zum Öffnen eines Wallets verwendet
ORA-06512: in "SYS.UTL_HTTP", Zeile 368
ORA-06512: in "SYS.UTL_HTTP", Zeile 1118
ORA-06512: in "APEX_050100.WWV_FLOW_WEB_SERVICES", Zeile 666
ORA-06512: in "APEX_050100.WWV_FLOW_WEB_SERVICES", Zeile 880
ORA-06512: in "APEX_050100.WWV_FLOW_WEBSERVICES_API", Zeile 236
ORA-06512: in Zeile 20

ORA-29248 的英文意思是:

ORA-29248: an unrecognized WRL was used to open a wallet

【问题讨论】:

【参考方案1】:

我找到了非常简单的解决方案。钱包路径必须以file: 为前缀,如下所示:

-- Get the XML response from the web service.
l_clob :=
    APEX_WEB_SERVICE.make_rest_request(
        p_url           => 'https://example.com/rest/webservice',
        p_http_method   => 'POST', 
        p_parm_name     => l_param_names, 
        p_parm_value    => l_param_names,
        p_wallet_path   => 'file:/path/to/wallet/dir', 
        p_wallet_pwd    => 'walletpassword');

【讨论】:

以上是关于APEX_WEB_SERVICE.MAKE_REST_REQUEST 导致 ORA-29248:使用无法识别的 WRL 打开钱包的主要内容,如果未能解决你的问题,请参考以下文章