Example 5-21: Implementation of xml_http helper package

CREATE OR REPLACE PACKAGE BODY xml_http AS

  PROCEDURE xmlDocForResponse(response         VARCHAR2,
                              content_type     VARCHAR2,
                              xmldoc       OUT xmldom.DOMDocument) IS
  BEGIN
    IF response IS NOT NULL THEN
      IF content_type LIKE 'text/xml%' OR
         content_type LIKE 'application/xml%' THEN
        xmldoc := xml.parse(response);
      END IF;
    END IF;
  END;

  PROCEDURE post(doc             VARCHAR2,
                 url             VARCHAR2,
                 resp        OUT xmldom.DOMDocument,
                 proxyServer     VARCHAR2 := NULL,
                 proxyPort       NUMBER   := 80)
  IS
    response     VARCHAR2(32767);
    content_type VARCHAR2(400);
  BEGIN
    http.post(doc,'text/xml',
              url,response,content_type,proxyServer,proxyPort);
    xmlDocForResponse(response,content_type,resp);
  END;

  PROCEDURE post(doc xmldom.DOMDocument,
                 url VARCHAR2,
                 resp OUT xmldom.DOMDocument,
                 proxyServer VARCHAR2 := NULL,
                 proxyPort   NUMBER   := 80)
  IS
    response     VARCHAR2(32767);
    content_type VARCHAR2(400);
  BEGIN
    http.post(xpath.extract(doc),'text/xml',
              url,response,content_type,proxyServer,proxyPort);
    xmlDocForResponse(response,content_type,resp);
  END;

  PROCEDURE get(url             VARCHAR2,
                resp        OUT xmldom.DOMDocument,
                proxyServer     VARCHAR2 := NULL,
                proxyPort       NUMBER   := 80) IS
    response VARCHAR2(32767);
    content_type VARCHAR2(400);
  BEGIN
    http.get(url,response,content_type,proxyServer,proxyPort);
    xmlDocForResponse(response,content_type,resp);
  END;

END;