尝试从 APEX 应用程序下载报告时出错 - ORA-29273

问题描述 投票:0回答:1

我有一个 apex 应用程序,可以使用 Oracle sqldeveloper DB 中存储的信息下载在 JasperStudio 中设计的报告。 单击按钮即可下载报告,直接下载到我的下载文件夹。

这是 PL/SQL 代码,位于名为 VIEWPersonalInfo 的进程中,应该提取所需的报告:

-- assign value for Application Item
:APP_FILE_NAME := 'Customer_Personal_information' ; --- Name of Report on the Server
:APP_FILE_TYPE := 'PDF' ; --- the file format to be used
:APP_PARM_NAME := 'ID' ; ---- name of the parameter on the server
:APP_PARM_VALUE := :P2_ID; ----Name of the Page Item
-- call GET_REPORT procedure
   GET_REPORT ( p_file_name => :APP_FILE_NAME ,
                p_file_type => :APP_FILE_TYPE ,
                p_paramter_name => :APP_PARM_NAME ,
                p_paramter_value => :APP_PARM_VALUE  ) ;

这是名为 GET_REPORT 的过程,用于帮助连接到 JasperStudio,在 sqldeveloper 中完成:

 create or replace PROCEDURE                 GET_REPORT (p_file_name VARCHAR2 ,p_file_type VARCHAR2 ,p_paramter_name VARCHAR2 ,p_paramter_value VARCHAR2 )
IS
  v_blob                 BLOB;
  v_file_name            VARCHAR2 (100) := p_file_name||'.'||p_file_type;
  v_vcContentDisposition VARCHAR2 (100)  := 'inline';

  v_hostname   VARCHAR2(100) := 'IP'; -- your hostname, eg: localhost
  v_port       NUMBER       :=   'port'; -- port for your JasperReports Server, eg: 8081
  v_username   VARCHAR2(100) := 'jasperadmin'; -- jasperreports server username 
  v_password   VARCHAR2(100) := 'jasperadmin'; -- jaspereports server password
  v_jasper_string VARCHAR2(100) := v_username || ';' || v_password;
  v_login_url  VARCHAR2(100) :=  'http://' || v_hostname || ':' || v_port || '/jasperserver/rest/login';
  -- modify below URL before use!
  -- you should modify the line below; change /Pretius/ to your own name
  -- before you add a line try your URL in a web browser
  v_report_url VARCHAR2(100) := 
    'http://' || v_hostname || ':' || v_port || '/jasperserver/rest_v2/reports/reports/' || v_file_name;
BEGIN
  -- log into jasper server
  v_blob := apex_web_service.make_rest_request_b(
    p_url => v_login_url,
    p_http_method => 'GET',
    p_parm_name => apex_util.string_to_table('j_username;j_password',';'),
    p_parm_value => apex_util.string_to_table(v_jasper_string,';')
  );
  -- download file
  v_blob := apex_web_service.make_rest_request_b(
    p_url => v_report_url,
    p_http_method => 'GET',
    p_parm_name => apex_util.string_to_table(p_paramter_name,';'),
    p_parm_value => apex_util.string_to_table(p_paramter_value,';')
  );
  --OWA_UTIL.mime_header ('application/pdf', FALSE);  -- view your pdf file
  OWA_UTIL.MIME_HEADER( 'application/octet', FALSE ); -- download your pdf file
  HTP.p('Content-Length: ' || DBMS_LOB.GETLENGTH(v_blob));
  HTP.p('Content-Disposition: ' || v_vcContentDisposition ||'; filename="' || v_file_name || '"');
  OWA_UTIL.http_header_close;
  WPG_DOCLOAD.DOWNLOAD_FILE(v_blob);
  APEX_APPLICATION.STOP_APEX_ENGINE;
EXCEPTION
  WHEN OTHERS THEN
    RAISE;
END;

当我尝试下载时,出现错误

ORA-29273: HTTP request failed

可能是什么问题?

oracle-sqldeveloper oracle-apex
1个回答
0
投票

错误堆栈中应该有额外的错误代码;您发布的错误只是表明某事出了问题,但下一个错误说明了是什么

根据您目前所说的,我怀疑是关于

ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝。

这意味着您(实际上是您的 DBA)必须创建一个。

© www.soinside.com 2019 - 2024. All rights reserved.