[Home] [Help]
PACKAGE BODY: APPS.HZ_HTTP_PKG
Source
1 PACKAGE BODY hz_http_pkg AS
2 /*$Header: ARHHTTPB.pls 120.5 2010/12/14 13:11:35 rgokavar ship $*/
3
4 /*PROCEDURE enable_debug;
5
6 PROCEDURE disable_debug;
7 */
8
9 --g_debug BOOLEAN := FALSE;
10 g_debug_count NUMBER := 0;
11 --------------------------------------
12 -- private procedures and functions
13 --------------------------------------
14 --
15 -- PRIVATE PROCEDURE enable_debug
16 -- DESCRIPTION
17 -- Turn on debug mode.
18 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
19 -- HZ_UTILITY_V2PUB.enable_debug
20 -- MODIFICATION HISTORY
21 --------------------------------------
22 /*PROCEDURE enable_debug IS
23 BEGIN
24 g_debug_count := g_debug_count + 1;
25 IF g_debug_count = 1 THEN
26 IF fnd_profile.value('HZ_API_FILE_DEBUG_ON') = 'Y' OR
27 fnd_profile.value('HZ_API_DBMS_DEBUG_ON') = 'Y'
28 THEN
29 hz_utility_v2pub.enable_debug;
30 g_debug := TRUE;
31 END IF;
32 END IF;
33 END enable_debug;
34 */
35
36 --------------------------------------
37 -- PRIVATE PROCEDURE disable_debug
38 -- DESCRIPTION
39 -- Turn off debug mode.
40 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
41 -- HZ_UTILITY_V2PUB.disable_debug
42 -- MODIFICATION HISTORY
43 --------------------------------------
44 /*PROCEDURE disable_debug IS
45 BEGIN
46 IF g_debug THEN
47 g_debug_count := g_debug_count - 1;
48 IF g_debug_count = 0 THEN
49 hz_utility_v2pub.disable_debug;
50 g_debug := FALSE;
51 END IF;
52 END IF;
53 END disable_debug;
54 */
55
56 PROCEDURE write(
57 c IN OUT NOCOPY utl_tcp.connection,
58 value VARCHAR2 := NULL)
59 IS
60 b pls_integer;
61 l_debug_prefix VARCHAR2(30) := '';
62 BEGIN
63 b := utl_tcp.write_line(c, value);
64 --enable_debug;
65 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
66 hz_utility_v2pub.debug(p_message=>'The text line transmitted :'|| substrb(value,1,4000),
67 p_prefix =>l_debug_prefix,
68 p_msg_level=>fnd_log.level_statement);
69 END IF;
70 --disable_debug;
71 END write;
72
73 PROCEDURE write_header(
74 c IN OUT NOCOPY utl_tcp.connection,
75 name VARCHAR2,
76 value VARCHAR2)
77 IS
78 l_debug_prefix VARCHAR2(30) := '';
79 BEGIN
80 --enable_debug;
81 write(c, name||': '||value);
82 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
83 hz_utility_v2pub.debug(p_message=>'The header is : '|| substrb(name||': '||value,1,4000),
84 p_prefix =>l_debug_prefix,
85 p_msg_level=>fnd_log.level_statement);
86 END IF;
87 --disable_debug;
88 END write_header;
89
90 PROCEDURE sethostpostpath(
91 url VARCHAR2,
92 proxyserver VARCHAR2,
93 proxyport NUMBER,
94 host OUT NOCOPY VARCHAR2,
95 port IN OUT NOCOPY NUMBER,
96 path OUT NOCOPY VARCHAR2)
97 IS
98 temp VARCHAR2(400);
99 slash NUMBER;
100 colon NUMBER;
101 BEGIN
102 IF proxyserver IS NOT NULL THEN
103 host := proxyserver;
104 port := proxyport;
105 path := url;
106 ELSE
107 temp := SUBSTRB(url, instrb(url, 'http://')+7);
108 slash := INSTRB(temp,'/');
109 IF slash > 0 THEN
110 host := SUBSTRB(temp, 1, slash-1);
111 path := SUBSTRB(temp, slash);
112 ELSE
113 host := temp;
114 path := '/';
115 END IF;
116 colon := instrb(host, ':');
117 IF colon > 0 THEN
118 port := TO_NUMBER(substrb(host, colon+1));
119 host := SUBSTRB(host,1,colon-1);
120 END IF;
121 END IF;
122 END sethostpostpath;
123
124 --------------------------------------
125 -- PRIVATE PROCEDURE get_response_from
126 -- DESCRIPTION
127 -- Gets an http-format response from the tcp socket and returns it into
128 -- resp. Non-http-formatted responses are returned into err_resp.
129 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
130 -- hz_utility_v2pub
131 -- utl_tcp
132 -- MODIFICATION HISTORY
133 -- 03-27-2002 J. del Callar Added err_resp parameter to get non-http
134 -- error messages for inclusion in log.
135 --------------------------------------
136 PROCEDURE get_response_from (
137 c in OUT NOCOPY utl_tcp.connection,
138 resp OUT NOCOPY VARCHAR2,
139 content_type OUT NOCOPY VARCHAR2,
140 err_resp OUT NOCOPY VARCHAR2
141 ) IS
142 line VARCHAR2(32767);
143 firstline BOOLEAN := TRUE;
144 header BOOLEAN := TRUE;
145 success BOOLEAN := TRUE;
146 l_debug_prefix VARCHAR2(30) := '';
147 BEGIN
148 --enable_debug;
149 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
150 hz_utility_v2pub.debug(p_message=>'get_response_from (+)',
151 p_prefix=>l_debug_prefix,
152 p_msg_level=>fnd_log.level_procedure);
153 END IF;
154 WHILE success LOOP
155 line := utl_tcp.get_line(c);
156 IF firstline THEN
157 IF line NOT LIKE '%HTTP%200%OK%' THEN
158 success := FALSE;
159 err_resp := line || utl_tcp.get_text(c, 32767-LENGTHB(line));
160 END IF;
161 firstline := FALSE;
162 ELSE
163 IF header THEN
164 IF line = utl_tcp.crlf THEN
165 header := false;
166 ELSE
167 IF UPPER(line) LIKE 'CONTENT-TYPE:%' THEN
168 content_type := RTRIM(RTRIM(RTRIM(LTRIM(SUBSTRB(line,14))),fnd_global.local_chr(10)),fnd_global.local_chr(13));
169 END IF;
170 END IF;
171 ELSE
172 resp := resp || line;
173 END IF;
174 END IF;
175 END LOOP;
176 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
177 hz_utility_v2pub.debug(p_message=>'The response is :' || SUBSTRB(resp, 1, 4000),
178 p_prefix =>l_debug_prefix,
179 p_msg_level=>fnd_log.level_statement);
180 IF err_resp IS NOT NULL THEN
181 hz_utility_v2pub.debug(p_message=>'The error response is :' || SUBSTRB(err_resp, 1, 4000),
182 p_prefix =>l_debug_prefix,
183 p_msg_level=>fnd_log.level_statement);
184 END IF;
185 END IF;
186 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
187 hz_utility_v2pub.debug(p_message=>'get_response_from (-)',
188 p_prefix=>l_debug_prefix,
189 p_msg_level=>fnd_log.level_procedure);
190 END IF;
191
192 --disable_debug;
193 EXCEPTION
194 WHEN utl_tcp.end_of_input THEN
195 IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
196 hz_utility_v2pub.debug(p_message=>'The response is :' || SUBSTRB(resp, 1, 4000),
197 p_prefix=>'ERROR',
198 p_msg_level=>fnd_log.level_error);
199 END IF;
200 IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
201 hz_utility_v2pub.debug(p_message=>'The error response is :' || SUBSTRB(err_resp, 1, 4000),
202 p_prefix=>'ERROR',
203 p_msg_level=>fnd_log.level_error);
204 END IF;
205 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
206 hz_utility_v2pub.debug(p_message=>'get_response_from (-)',
207 p_prefix=>l_debug_prefix,
208 p_msg_level=>fnd_log.level_procedure);
209 END IF;
210 --disable_debug;
211 END get_response_from;
212
213 --------------------------------------
214 -- PUBLIC PROCEDURE post
215 -- DESCRIPTION
216 -- Implements HTTP post functionality.
217 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
218 -- hz_utility_v2pub
219 -- utl_tcp
220 -- MODIFICATION HISTORY
221 -- 07-22-2002 J. del Callar Added for backward compatibility.
222 --------------------------------------
223 PROCEDURE post(
224 doc VARCHAR2,
225 content_type VARCHAR2,
226 url VARCHAR2,
227 resp OUT NOCOPY VARCHAR2,
228 resp_content_type OUT NOCOPY VARCHAR2,
229 proxyserver VARCHAR2 := NULL,
230 proxyport NUMBER := 80,
231 x_return_status IN OUT NOCOPY VARCHAR2,
232 x_msg_count IN OUT NOCOPY NUMBER,
233 x_msg_data IN OUT NOCOPY VARCHAR2)
234 IS
235 l_err_resp VARCHAR2(32767) := NULL;
236 BEGIN
237 x_return_status := fnd_api.g_ret_sts_success;
238
239 post(doc,
240 content_type,
241 url,
242 resp,
243 resp_content_type,
244 proxyserver,
245 proxyport,
246 l_err_resp,
247 x_return_status,
248 x_msg_count,
249 x_msg_data);
250
251 IF l_err_resp IS NOT NULL THEN
252 x_return_status := fnd_api.g_ret_sts_unexp_error;
253 fnd_message.set_name('AR','HZ_HTTP_POST_FAILED');
254 fnd_message.set_token('RETRY', '1');
255 fnd_message.set_token('LASTMSG', NVL(l_err_resp, '<NULL>'));
256 fnd_msg_pub.add;
257 END IF;
258 END post;
259
260 --------------------------------------
261 -- PUBLIC PROCEDURE post
262 -- DESCRIPTION
263 -- Implements HTTP post functionality.
264 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
265 -- hz_utility_v2pub
266 -- utl_tcp
267 -- MODIFICATION HISTORY
268 -- 03-27-2002 J. del Callar Added err_resp parameter to get non-http
269 -- error messages for inclusion in log.
270 --------------------------------------
271 PROCEDURE post(
272 doc VARCHAR2,
273 content_type VARCHAR2,
274 url VARCHAR2,
275 resp OUT NOCOPY VARCHAR2,
276 resp_content_type OUT NOCOPY VARCHAR2,
277 proxyserver VARCHAR2 := NULL,
278 proxyport NUMBER := 80,
279 err_resp OUT NOCOPY VARCHAR2,
280 x_return_status IN OUT NOCOPY VARCHAR2,
281 x_msg_count IN OUT NOCOPY NUMBER,
282 x_msg_data IN OUT NOCOPY VARCHAR2)
283 IS
284 port NUMBER := 80;
285 host VARCHAR2(400);
286 path VARCHAR2(400);
287 line VARCHAR2(32767);
288 firstline BOOLEAN := TRUE;
289 head BOOLEAN := TRUE;
290 success BOOLEAN := TRUE;
291 c utl_tcp.connection;
292 l_debug_prefix VARCHAR2(30) := '';
293 BEGIN
294 --enable_debug;
295 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
296 hz_utility_v2pub.debug(p_message=>'post (+)',
297 p_prefix=>l_debug_prefix,
298 p_msg_level=>fnd_log.level_procedure);
299 END IF;
300 sethostpostpath(url, proxyserver,proxyport, host, port, path);
301 c := utl_tcp.open_connection(host,port);
302 write(c, 'POST '|| path||' HTTP/1.0');
303 write_header(c, 'Content-Type', content_type);
304 write_header(c, 'Content-Length', lengthb(doc));
305 write(c);
306 write(c, doc);
307 utl_tcp.flush(c);
308 get_response_from(c, resp, resp_content_type, err_resp);
309 utl_tcp.close_connection(c);
310 -- Debug info.
311 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
312 hz_utility_v2pub.debug(p_message=>'post (-)',
313 p_prefix=>l_debug_prefix,
314 p_msg_level=>fnd_log.level_procedure);
315 END IF;
316 --disable_debug;
317 EXCEPTION
318 WHEN OTHERS THEN
319 IF c.remote_host IS NOT NULL THEN
320 utl_tcp.close_connection(c);
321 END IF;
322 fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
323 fnd_message.set_token('ERROR' ,SQLERRM);
324 fnd_msg_pub.add;
325 x_return_status := fnd_api.g_ret_sts_unexp_error;
326 --disable_debug;
327 END post;
328
329 --------------------------------------
330 -- PUBLIC PROCEDURE get
331 -- DESCRIPTION
332 -- Implements HTTP post functionality.
333 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
334 -- hz_utility_v2pub
335 -- utl_tcp
336 -- MODIFICATION HISTORY
337 -- 07-22-2002 J. del Callar Added for backward compatibility.
338 --------------------------------------
339 PROCEDURE get(
340 url VARCHAR2,
341 resp OUT NOCOPY VARCHAR2,
342 resp_content_type OUT NOCOPY VARCHAR2,
343 proxyserver VARCHAR2 := NULL,
344 proxyport NUMBER := 80,
345 x_return_status IN OUT NOCOPY VARCHAR2,
346 x_msg_count IN OUT NOCOPY NUMBER,
347 x_msg_data IN OUT NOCOPY VARCHAR2)
348 IS
349 l_err_resp VARCHAR2(32767) := NULL;
350 BEGIN
351 x_return_status := fnd_api.g_ret_sts_success;
352
353 get(url,
354 resp,
355 resp_content_type,
356 proxyserver,
357 proxyport,
358 l_err_resp,
359 x_return_status,
360 x_msg_count,
361 x_msg_data);
362
363 IF l_err_resp IS NOT NULL THEN
364 x_return_status := fnd_api.g_ret_sts_unexp_error;
365 fnd_message.set_name('AR','HZ_HTTP_POST_FAILED');
366 fnd_message.set_token('RETRY', '1');
367 fnd_message.set_token('LASTMSG', NVL(l_err_resp, '<NULL>'));
368 fnd_msg_pub.add;
369 END IF;
370 END get;
371
372 --------------------------------------
373 -- PUBLIC PROCEDURE get
374 -- DESCRIPTION
375 -- Implements HTTP get functionality.
376 -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
377 -- hz_utility_v2pub
378 -- utl_tcp
379 -- MODIFICATION HISTORY
380 -- 03-27-2002 J. del Callar Added err_resp parameter to get non-http
381 -- error messages for inclusion in log.
382 --------------------------------------
383 PROCEDURE get(
384 url VARCHAR2,
385 resp OUT NOCOPY VARCHAR2,
386 resp_content_type OUT NOCOPY VARCHAR2,
387 proxyserver VARCHAR2 := NULL,
388 proxyport NUMBER := 80,
389 err_resp OUT NOCOPY VARCHAR2,
390 x_return_status IN OUT NOCOPY VARCHAR2,
391 x_msg_count IN OUT NOCOPY NUMBER,
392 x_msg_data IN OUT NOCOPY VARCHAR2)
393 IS
394 port NUMBER := 80;
395 host VARCHAR2(400);
396 path VARCHAR2(400);
397 msg VARCHAR2(32767);
398 c utl_tcp.connection;
399 l_debug_prefix VARCHAR2(30) := '';
400 BEGIN
401 --enable_debug;
402 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
403 hz_utility_v2pub.debug(p_message=>'get (+)',
404 p_prefix=>l_debug_prefix,
405 p_msg_level=>fnd_log.level_procedure);
406 END IF;
407 sethostpostpath( url, proxyserver, proxyport, host, port, port);
408 c := utl_tcp.open_connection(host, port);
409 write(c, 'GET '||path||' HTTP/1.0');
410 write(c);
411 utl_tcp.flush(c);
412 get_response_from(c, resp, resp_content_type, err_resp);
413 utl_tcp.close_connection(c);
414 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
415 hz_utility_v2pub.debug(p_message=>'get (-)',
416 p_prefix=>l_debug_prefix,
417 p_msg_level=>fnd_log.level_procedure);
418 END IF;
419 --disable_debug;
420 EXCEPTION
421 WHEN OTHERS THEN
422 IF c.remote_host IS NOT NULL THEN
423 utl_tcp.close_connection(c);
424 END IF;
425 fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
426 fnd_message.set_token('ERROR' ,SQLERRM);
427 fnd_msg_pub.add;
428 x_return_status := fnd_api.g_ret_sts_unexp_error;
429 --disable_debug;
430 END get;
431
432 END hz_http_pkg;