Отправка большого сообщения с использованием http-запроса, когда режим потоковой передачи отключен на OSB
Я реализовал процедуру Store для вызова веб-службы SOAP с использованием пакета UTL_HTTP. Когда у меня большие сообщения, я реализовал код на основе чанков, как это:
if req_length_byte <=32767 then
UTL_HTTP.set_header (http_req, 'Content-Type', 'text/xml;charset=UTF-8');
UTL_HTTP.set_header (http_req, 'Content-Length', req_length_byte);
UTL_HTTP.set_header (http_req, 'SOAPAction', action);
UTL_HTTP.write_text (http_req, req);
UTL_HTTP.set_body_charset(http_req,'UTF-8');
else
req_length := length(req);
UTL_HTTP.set_header (http_req, 'Content-Type', 'text/xml;charset=UTF-8');
UTL_HTTP.set_header (http_req, 'Transfer-Encoding', 'chunked');
--UTL_HTTP.set_header (http_req, 'Content-Length', req_length);
UTL_HTTP.set_header (http_req, 'SOAPAction', action);
BEGIN
WHILE (offset < req_length) LOOP
DBMS_LOB.read (req, amount, offset, buffer);
UTL_HTTP.write_text (http_req, buffer);
offset := offset + amount;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
BEGIN
dbms_output.put_line('End of data reached');
END;
WHEN OTHERS THEN
RAISE;
END;
END IF;
Но моя Oracle Service BUS (OSB) отключила опцию Chunked Streaming Mode. И теперь, при использовании большого запроса сообщения, я получаю ORA-29276: transfer timeout
, Я пытался отправить сообщение без UTL_HTTP.set_header (http_req, 'Transfer-Encoding', 'chunked');
и с оператором цикла, но я получаю ORA-06502: PL/SQL: numeric or value error
,
С этим сценарием (опция отключена и большие сообщения) есть ли какой-то поворот, который я могу реализовать здесь? Благодарю.