Problem with XML [message #547576] |
Wed, 14 March 2012 15:55 |
|
Hey guys,
Actually Im doing a WS call. My problem is that UTL_HTTP.READ_TEXT has a limit of 32k and I am trying to read a bigger XML.
So I was wondering if theres a method to that can help me with this.
FUNCTION BE_P_INVOCAR_SERVICIO (
soap_request IN CLOB,
action IN VARCHAR2)
RETURN VARCHAR2 AS
soap_respond CLOB; --SOAP XML COMPLETO DE LA RESPUESTA
http_req utl_http.req; --HTTP DEL REQUEST
http_resp utl_http.resp; --HTTP DEL RESPONSE
xml_respuesta XMLType; --XML CON EL QUE SE RECIBE LA RESPUESTA COMPLETA Y SE EXTRAE CASA SUBXML
Pv_error VARCHAR2(3000); --VARIABLE PARA MANEJAR EL ERROR
xml_string VARCHAR2(32000); --VARIABLE VARCHAR PARA LA SALIDA XML
url_wsdl VARCHAR2(200); --VARIABLE PARA LA URL
LV_MENSAJEERROR VARCHAR2(200);
BEGIN
-- TOMA LA URL DE LA TABLA PARAMETRIZADA
SELECT valor
INTO url_wsdl
FROM MC_ALCANCE_PARAMETROS
WHERE parametro = 'url';
-- SETEO DEL HEADER
http_req:= UTL_HTTP.BEGIN_REQUEST(url_wsdl,'POST','HTTP/1.1');
UTL_HTTP.SET_HEADER(http_req, 'Content-Type', 'text/xml');
UTL_HTTP.SET_HEADER(http_req, 'Content-Length', length(soap_request));
UTL_HTTP.SET_HEADER(http_req, 'SOAPAction', action); -- SET DEL METODO
UTL_HTTP.SET_TRANSFER_TIMEOUT(3000); -- SET DEL TIMEOUT
UTL_HTTP.WRITE_TEXT(http_req, soap_request); -- SET DEL REQUEST
BEGIN
http_resp:= UTL_HTTP.GET_RESPONSE(http_req); -- CONSUMO DEL SERVICIO
EXCEPTION
WHEN OTHERS THEN
Pv_error := 'ERROR OBTENIENDO RESPONSE : VERIFIQUE..' || SQLERRM;
INSERT INTO mc_websvr_errores(fecha_adicion, error)
VALUES (SYSDATE, Pv_error);
END;
UTL_HTTP.READ_TEXT(http_resp, soap_respond); -- ASIGNACION DEL RESPOND
UTL_HTTP.END_RESPONSE(http_resp); -- CIERRE DE RESPUESTA
xml_respuesta:= sys.xmltype.CREATEXML(soap_respond); --CREA EL XML
COMMIT;
IF(xml_respuesta IS NOT NULL) THEN
xml_string := xml_respuesta.GETSTRINGVAL(); --PASA EL XML A VARCHAR
ELSE
RETURN NULL;
END IF;
RETURN xml_string;
EXCEPTION
WHEN UTL_HTTP.REQUEST_FAILED THEN
Pv_error := SUBSTR('Request_Failed 1: ' || SUBSTR(Utl_Http.Get_Detailed_Sqlerrm, 1, 282), 1, 300);
RETURN NULL;
WHEN UTL_HTTP.Http_Server_Error THEN
Pv_error := SUBSTR('Http_Server_Error 1: ' || SUBSTR(Utl_Http.Get_Detailed_Sqlerrm, 1, 282), 1, 300);
RETURN NULL;
WHEN UTL_HTTP.Http_Client_Error THEN
Pv_error := SUBSTR('Http_Client_Error: 1' || SUBSTR(Utl_Http.Get_Detailed_Sqlerrm, 1, 282), 1, 300);
WHEN OTHERS THEN
Pv_error := 'ERROR EN BE_P_INVOCAR_SERVICIO: VERIFIQUE..' || SQLERRM;
INSERT INTO mc_websvr_errores(fecha_adicion, error) VALUES (SYSDATE, Pv_error);
RETURN NULL;
END BE_P_INVOCAR_SERVICIO;
|
|
|
|
|