oracle-databaseplsqloracle12c

APEX_WEB_SERVICE.MAKE_REST_REQUEST results in ORA-29248: an unrecognized WRL was used to open a wallet


I am trying to access a rest webservice over SSL/TLS using APEX_WEB_SERVICE.MAKE_REST_REQUEST on Oracle 12c/Apex 5.1. This results in the error message ORA-29248: an unrecognized WRL was used to open a wallet. I have put the necessary certificates into the oracle wallet and stored it at the location specified in the code. It is accessible for the oracle user. Full code and error message below.

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;

Errormessage:

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

The ORA-29248 in english means:

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

Solution

  • I found the quite simple solution. The wallet path must be prefixed with file: like this:

    -- 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');