Декодирование элемента данных Base64 в ответ Webservice - PullRequest
0 голосов
/ 05 апреля 2020

Я звоню Oracle Fusion runReport Webservice, который должен запустить отчет и вернуть вывод в Encoded Base64 XML. Вот пример ответа

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <runReportResponse xmlns="http://xmlns.oracle.com/oxp/service/PublicReportService">
         <runReportReturn>
            <reportBytes>PD94==</reportBytes>
<reportContentType>text/xml</reportContentType>
            <reportFileID>documents/xmlpwsADwzcugWHW8869757286509792083.tmp</reportFileID>
            <reportLocale xsi:nil="true"/>
         </runReportReturn>
      </runReportResponse>
   </soapenv:Body>
</soapenv:Envelope>

Я использую Oracle 11g PL / SQL, чтобы вызвать и проанализировать ответ для сохранения полученных данных в таблице базы данных. Проблема, которую я не могу декодировать "// runReportResponse / runReportReturn / reportContentType" в XMLTYPE, так как нет функции базы данных, которая сделает это. Когда я использовал приведенный ниже код для извлечения данных в BLOB, я получаю следующую ошибку:

 SELECT
        XMLCAST(XMLQUERY('declare default element namespace "http://xmlns.oracle.com/oxp/service/PublicReportService"; 
        //runReportResponse/runReportReturn/reportBytes'
        PASSING l_xmldata RETURNING CONTENT) AS BLOB)
    INTO blob_in
    FROM dual;

Ошибка (и): - 1706 Ошибка (и): ORA-01706: слишком большое значение результата пользовательской функции

Я пытался использовать функции UTL_ENCODE.BASE64_DECODE и UTL_RAW.CAST_TO_VARCHAR2, но возвращаемый кодированный XML больше, чем VARCHAR2, и попытка разделить строку на более мелкие строки повредила вывод.

I Спасибо за любые советы, как преобразовать в XMLTYPE.

С наилучшими пожеланиями

...