DBA Data[Home] [Help]

PACKAGE BODY: APPS.WF_EVENT_XML

Source


1 package body WF_EVENT_XML as
2 /* $Header: wfevxmlb.pls 120.1 2005/07/02 03:48:18 appldev ship $ */
3 -----------------------------------------------------------------------------
4 function findTable(x_message in varchar2, p_tablename in varchar2)
5                 return xmldom.DOMNodeList is
6   l_parser         xmlparser.parser;
7   l_doc            xmldom.DOMDocument;
8   l_node_name      varchar2(255);
9   l_node_list        xmldom.DOMNodeList;
10   l_doc_node         xmldom.DOMNode;
11   l_length           integer;
12 begin
13 
14   l_parser := xmlparser.newParser;
15 
16   -- CTILLEY bug 2708622
17   xmlparser.setPreserveWhitespace(l_parser, false);
18 
19   -- Parse the message and the document
20   xmlparser.ParseBuffer(l_parser, x_message);
21   l_doc := xmlparser.getDocument(l_parser);
22 
23   /*
24   ** Find The master node
25   */
26   l_node_list := xmldom.getElementsByTagName(l_doc,
27                            wf_event_xml.masterTagName);
28   l_length := xmldom.getLength(l_node_list);
29   if l_length = 0 then
30     Wf_Core.Token('REASON', 'Could not find XML base node ' ||
31 	wf_event_xml.masterTagName);
32     Wf_Core.Raise('WFSQL_INTERNAL');
33   end if;
34 
35   -- There should never be more than one on the list, so we want the first.
36   l_doc_node := xmldom.item(l_node_list, 0);
37   l_node_name := xmldom.getNodeName(l_doc_node);
38   if l_node_name <> wf_event_xml.masterTagName then
39     Wf_Core.Token('REASON', 'Could not find XML base node in list' ||
40 	wf_event_xml.masterTagName);
41     Wf_Core.Raise('WFSQL_INTERNAL');
42   end if;
43 
44   /*
45   ** Find the table node
46   */
47   l_node_list := xmldom.getElementsByTagName(xmldom.makeElement(l_doc_node),
48                  p_tablename);
49   l_length := xmldom.getLength(l_node_list);
50   if l_length = 0 then
51     Wf_Core.Token('REASON', 'Could not find XML table node ' ||
52 	p_tablename);
53     Wf_Core.Raise('WFSQL_INTERNAL');
54   end if;
55 
56   -- There should never be more than one on the list, so we want the first.
57   l_doc_node := xmldom.item(l_node_list, 0);
58   l_node_name := xmldom.getNodeName(l_doc_node);
59   if l_node_name <> p_tablename then
60     Wf_Core.Token('REASON', 'Could not find XML table node in list' ||
61        p_tablename);
62     Wf_Core.Raise('WFSQL_INTERNAL');
63   end if;
64 
65   l_node_list := xmldom.getChildNodes(l_doc_node);
66 
67   return l_node_list;
68 exception
69   when others then
70     wf_core.context('Wf_Event_XML', 'findTable', x_message);
71     raise;
72 
73 end findTable;
74 
75 function newTag (p_doc in xmldom.DOMDocument,
76                     p_node in xmldom.DOMNode,
77                     p_tag in varchar2,
78                     p_data in varchar2 default NULL) return xmldom.DOMNode is
79       l_element xmldom.DOMElement;
80       l_node xmldom.DOMNode;
81       l_text xmldom.DOMText;
82       l_text_node xmldom.DOMNode;
83 
84 begin
85 
86       -- Create an instance of the node
87       l_element := xmldom.createElement(p_doc, p_tag);
88       l_node := xmldom.makeNode(l_element);
89 
90       if p_data is not null then
91          -- Append the data to the node
92          l_text := xmldom.createTextNode(p_doc, p_data);
93          l_text_node := xmldom.makeNode(l_text);
94          l_text_node := xmldom.appendChild(l_node, l_text_node);
95       end if;
96 
97       -- Append the new TAG node to the parent.
98       l_node := xmldom.appendChild(p_node, l_node);
99 
100       return l_node;
101 
102 exception
103       when xmldom.INDEX_SIZE_ERR then
104          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
105          raise;
106 
107       when xmldom.DOMSTRING_SIZE_ERR then
108          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
109          raise;
110 
111       when xmldom.HIERARCHY_REQUEST_ERR then
112          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
113          raise;
114 
115       when xmldom.WRONG_DOCUMENT_ERR then
116          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
117          raise;
118 
119       when xmldom.INVALID_CHARACTER_ERR then
120          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
121          raise;
122 
123       when xmldom.NO_DATA_ALLOWED_ERR then
124          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
125          raise;
126 
127       when xmldom.NO_MODIFICATION_ALLOWED_ERR then
128          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
129          raise;
130 
131       when xmldom.NOT_FOUND_ERR then
132          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
133          raise;
134 
135       when xmldom.NOT_SUPPORTED_ERR then
136          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
137          raise;
138 
139       when xmldom.INUSE_ATTRIBUTE_ERR then
140          wf_core.context('WF_EVENT_XML', 'NewTag', p_tag);
141          raise;
142 
143 end newTag;
144 
145 -- For debugging only.
146 procedure printElements(doc xmldom.DOMDocument) is
147    nl xmldom.DOMNodeList;
148    len number;
149    n xmldom.DOMNode;
150 begin
151    -- get all elements
152    nl := xmldom.getElementsByTagName(doc, '*');
153    len := xmldom.getLength(nl);
154 
155    -- loop through elements
156    -- ### uncomment this for debug purpose
157    --    dbms_output.put('[');
158    --    for i in 0..len-1 loop
159    --       n := xmldom.item(nl, i);
160    --       dbms_output.put(xmldom.getNodeName(n) || ', ');
161    --    end loop;
162    --    dbms_output.put_line(']');
163 end printElements;
164 
165 /*get XML Parser version*/
166 
167 Function XMLVersion
168 return varchar2
169 is language java name 'oracle.xml.parser.v2.XMLParser.getReleaseVersion() returns java.lang.String';
170 
171 
172 end WF_EVENT_XML;