You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从APEX应用下载Jasper报表时触发ORA-29273错误,求问题原因

ORA-29273: HTTP请求失败问题排查(APEX调用Jasper报表场景)

场景描述

我有一个APEX应用,原本可通过点击按钮,将JasperStudio设计、存储于JasperReports Server的报表直接下载到本地下载文件夹。点击按钮触发的名为VIEWPersonalInfo的Process代码如下:

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

用于连接JasperReports Server的GET_REPORT存储过程代码如下:

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,以下是可能的问题及排查方向:

可能的问题及排查点

  • Jasper服务器连接参数未正确配置
    存储过程中v_hostname、v_port使用了占位符'IP'和'port',必须替换为JasperReports Server真实的IP/主机名和端口号。同时确认数据库服务器能ping通目标Jasper服务器,端口未被防火墙拦截。
  • REST登录接口调用方式错误
    JasperReports Server的/jasperserver/rest/login接口在部分版本中要求使用POST请求而非GET,且参数需以表单形式传递。可以先手动用Postman或浏览器测试登录接口,确认正确的请求方式和参数格式。
  • 报表URL路径错误
    检查v_report_url中的路径是否与Jasper Server中报表的实际存储路径匹配。比如报表是否存储在/reports/目录下,文件名是否正确。建议先在浏览器中直接访问拼接后的报表URL(带上ID=xxx参数),验证是否能正常返回PDF文件。
  • 数据库网络访问权限不足
    Oracle数据库所在服务器可能无法访问JasperReports Server地址,比如防火墙规则限制、未配置代理。可在数据库服务器上执行curl <Jasper登录URL>或wget <Jasper登录URL>测试网络连通性。
  • APEX Web Service与数据库权限问题
    确认APEX_WEB_SERVICE包已授予足够权限,同时检查数据库的UTL_HTTP访问控制列表(ACL)是否允许访问目标Jasper服务器地址。若需要代理访问,需在UTL_HTTP中配置正确的代理参数。
  • 报表参数传递异常
    确认Jasper报表中的参数名确实为ID,且:P2_ID传入的数值不为空、格式符合报表要求。可临时将p_paramter_value替换为固定有效值测试,排除参数问题。

内容的提问来源于stack exchange,提问作者Omatayo Holder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:00:55