C Troubleshooting Oracle REST Data Services

This appendix contains information on troubleshooting Oracle REST Data Services.

Topics:

C.1 Enabling Detailed Request Error Messages

To enable detailed request error messages, add the following setting to the Oracle REST Data Services configuration file named: defaults.xml:

<entry key="debug.printDebugToScreen">true</entry>

When this setting is present in defaults.xml, any request that produces an error response includes a detailed message, including a stack trace. This setting must not be enabled on productions systems due to the risk of sensitive information being revealed to an attacker.

C.2 ORDS User Defined Service

The following table lists the ORDS user defined services:

Table C-1 List of ORDS user defined service

Service Response
--HTTP 200
BEGIN
  ORDS.define_service(
    p_module_name    => 'test1',
    p_base_path      => 'test1/',
    p_pattern        => 'ok/',
    p_method         => 'GET',
    p_source_type    => ORDS.source_type_collection_feed,
    p_source         => 'SELECT * FROM dual',
    p_items_per_page => 0);
  COMMIT;
END;
/
>curl -i -X GET --user DEMO:demo -k http://localhost:8082/ords/demo/test1/ok/
HTTP/1.1 200 OK Date: Thu, 19 Mar 2020 17:18:05 GMT 
Content-Type: application/json
ETag: "BLNTmyd/ZM889Q0GlgJ1t7lkSYo2kpAVIv4CY5dvtp9NI/Em1DJRzpmE5Bg/4GiKifewtzuJA6i+YCgdxETWWQ=="
Transfer-Encoding: chunked
--HTTP 200 , p_source_type => ORDS.source_type_collection_feed,
BEGIN
  ORDS.define_service( 
      p_module_name => 'test2',  
      p_base_path => 'test2/', 
      p_pattern => 'norows/', 
      p_method => 'GET', 
      p_source_type => ORDS.source_type_collection_feed, 
      p_source => 'SELECT * FROM dual where 1 = 2', p_items_per_page => 0); 
  COMMIT; 
END; 
/
>curl  --head  -i -X  GET --user DEMO:demo -k http://localhost:8082/ords/demo/test2/norows/
HTTP/1.1 200 OK
Date: Thu, 19 Mar 2020 17:18:28 GMT
Content-Type: application/json
ETag: "aZVsHTwewrbbkl6wHNcTa3RFFdEsbdtDRBTSlR93r/vBmDvVsgud2rFqLDI65UKxzSElnAAMQdlBj/sB9ywWqQ=="
Transfer-Encoding: chunked

create table no_rows (col1 int); 
--HTTP 200 , p_source_type => ORDS.source_type_collection_feed, 
BEGIN
  ORDS.define_service( 
     p_module_name => 'test2b', 
     p_base_path => 'test2b/',
     p_pattern => 'norows/', 
     p_method => 'GET', 
     p_source_type => ORDS.source_type_collection_feed, 
     p_source => 'SELECT * FROM no_rows', p_items_per_page => 0); 
  COMMIT; 
END; 
/

>curl  --head  -i -X  GET --user DEMO:demo -k http://localhost:8082/ords/demo/test2b/norows/
HTTP/1.1 200 OK
Date: Thu, 19 Mar 2020 17:18:34 GMT
Content-Type: application/json
ETag: "Ns/g/hFxVWYPHUyZT53HNl6EMVlQUXD5wmz3eoO15dlY6nSVkk2FX3sNw3Yvq87SdLYAlCLeuqb4N4DQrcy+0Q=="
Transfer-Encoding: chunked
--HTTP 404 , p_source_type => ORDS.source_type_collection_item, 
BEGIN
  ORDS.define_service( 
    p_module_name => 'test2c', 
    p_base_path => 'test2c/', 
    p_pattern => 'norows/',
    p_method => 'GET', 
    p_source_type => ORDS.source_type_collection_item, 
    p_source => 'SELECT * FROM dual where 1 = 2', 
    p_items_per_page => 0); 
  COMMIT; 
END; 
/
>curl  --head  -i -X  GET --user DEMO:demo -k http://localhost:8082/ords/demo/test2c/norows/
HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 16127
--HTTP 404 
BEGIN
  ORDS.define_service( 
    p_module_name => 'test3', 
    p_base_path => 'test3/', 
    p_pattern => 'doesnotexist/', 
    p_method => 'GET', 
    p_source_type => ORDS.source_type_collection_feed, 
    p_source => 'SELECT 10 as A FROM doesnotexist', 
    p_items_per_page => 0); 
  COMMIT; 
END; 
/
>curl  --head  -i -X  GET --user DEMO:demo -k http://localhost:8082/ords/demo/test3/doesnotexist/
HTTP/1.1 403 Forbidden
Content-Type: text/html
Error-Reason: error="missing.object"; error_description*=UTF-8'
'The request could not be processed because a table or view referenced
0by the SQL statement being evaluated is not accessible or does not exist
Content-Length: 16327
--HTTP 555 
BEGIN
  ORDS.define_service(
    p_module_name => 'test4', 
    p_base_path => 'test4/', 
    p_pattern => 'badsyntax/', 
    p_method => 'GET', 
    p_source_type => ORDS.source_type_collection_feed, 
    p_source => 'SELECT 10', 
    p_items_per_page => 0); 
  COMMIT; 
END; 
/
>curl  --head  -i -X  GET --user DEMO:demo -k http://localhost:8082/ords/demo/test4/badsyntax/
HTTP/1.1 500 Server Error
Content-Type: text/html
Error-Reason: error="resource.generator.evaluation"; error_description*=UTF-8'
'The request could not be processed because an error occurred whilst attempting
 to evaluate the SQL statement associated with this resource. Please check the
 SQL statement is correctly formed and executes without error. 
SQL Error Code ORA-00923 FROM keyword not found where expected  Error Message.
Content-Length: 16514

C.3 Configuring Application Express Static Resources with Oracle REST Data Services

When using Oracle REST Data Services, a blank page might be displayed when attempting to access an Oracle Application Express page, for example, when attempting to display https://example/ords/. This problem is caused by an improper configuration of Application Express static resources, which causes the JavaScript and CSS resources required by Application Express not to be found and the Application Express page not to render correctly.

The specific cause can be any of the following:

  • Forgetting to ensure that the Application Express static images are located on the same server as the Oracle REST Data Services instance

  • Forgetting to deploy i.war on WebLogic Server

  • Specifying an incorrect path when using the java -jar ords.war static command to generate i.war

  • Configuring Application Express to use a nondefault context path for static resources (/i) and not specifying the same context path (using the --context-path option) when using java -jar ords.war static

  • Moving, renaming, or deleting the folder pointed to by i.war after deploying i.war

  • When running in Standalone mode, entering an incorrect path (or not specifying a path) when prompted on the first run of Standalone mode

  • When running in Standalone mode, entering an incorrect path with the --static-images option

  • Upgrading to a new version of Application Express and forgetting to reconfigure and redeploy i.war to point to the static resources for the new Application Express version, or in Standalone mode forgetting to update the location by using the --apex-images option

To help in diagnosing the problem, you can try to access the apex_version.txt file. For example, if your Application Express deployment is located at https://example.com/ords/ and your static resources have been deployed at https://example.com/i/, use a browser to access the following URL:

https://example.com/i/apex_version.txt

If you get a 404 Not Found error, then check the preceding list of possible specific causes, including i.war not being deployed or not pointing to a folder containing Application Express static resources.

If a plain text file is displayed, it should contain text like the following:

Application Express Version:  4.2.1

Check that the version number matches the version of Application Express that is deployed on the database. If the numbers do not match, check if you have made an error mentioned in the last item in the preceding list of possible specific causes, because Oracle REST Data Services is not configured to use the correct version of the Application Express static resources to match the Application Express version in the database.

If you need help in solving the problem, check the information in this book about creating and deploying i.war for your environment, such as WebLogic Server.

You can also get detailed help on the static listener command by entering the following at a command prompt:

java -jar ords.war help static