[英]xml soap response parse pdf file oracle
我正在使用一個 SOAP 基礎服務,它返回一個 pdf 文件作為響應,我想將響應解析為 blob 類型。 我有下面的代碼來使用soap服務,但是我得到了pdf文件,但它打開失敗或下載為無效文件。
declare
p_ref_no varchar2(100) := '290313008810';
l_key varchar2(100) := post_shipments_shipper.getKey('LIVE');
l_envelope CLOB;
l_xml XMLTYPE;
l_result varchar2(2000);
l_pdf clob;
l_pdf_file blob;
pragma autonomous_transaction;
begin
l_envelope := '<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sms="http://track.smsaexpress.com/secom/SMSAWebserviceIntl">
<soapenv:Body>
<sms:getPDF>
<sms:awbNo>'||p_ref_no||'</sms:awbNo>
<sms:passKey>'||l_key||'</sms:passKey>
</sms:getPDF>
</soapenv:Body>
</soapenv:Envelope>';
-- Get the XML response from the web service.
l_xml := APEX_WEB_SERVICE.make_request(
p_url => 'http://track.smsaexpress.com/SECOM/SMSAwebServiceIntl.asmx',
p_action => 'http://track.smsaexpress.com/secom/SMSAWebserviceIntl/getPDF',
p_envelope => l_envelope
);
-- Display the whole SOAP document returned.
-- DBMS_OUTPUT.put_line('l_xml= ' || l_xml.getClobVal());
-- RETURN l_xml.getClobVal();
l_pdf := APEX_WEB_SERVICE.parse_xml_clob(
p_xml => l_xml,
p_xpath => '//getPDFResult',
p_ns => 'xmlns="http://track.smsaexpress.com/secom/SMSAWebserviceIntl"'
);
l_pdf_file := APEX_WEB_SERVICE.CLOBBASE642BLOB(l_pdf);
delete from shipment_labels;
insert into shipment_labels values (l_pdf_file,'abc.pdf','application/pdf',l_pdf);
commit;
end;
我正在嘗試解析 pdf 文件並插入到列類型為 blob 的表中,但是文件內容無效並且無法作為媒體打開。
我認為問題出在您的parse_xml_clob
調用中。 如果您查看保存在表中的 l_pdf 值,我認為它們將如下所示:
<getPDFResult xmlns="http://track.smsaexpress.com/secom/SMSAWebserviceIntl">...your base64Binary...</getPDFResult>
但是您只需要內部文本。 根據文檔中的示例,您希望 XPath 返回<getPDFResult>
節點內的文本節點,而不是節點本身。
l_pdf := APEX_WEB_SERVICE.parse_xml_clob(
p_xml => l_xml,
p_xpath => '//getPDFResult/text()',
p_ns => 'xmlns="http://track.smsaexpress.com/secom/SMSAWebserviceIntl"'
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.