File Coverage

blib/lib/UDDI/Lite.pm
Criterion Covered Total %
statement 53 122 43.4
branch 0 56 0.0
condition 0 39 0.0
subroutine 20 33 60.6
pod n/a
total 73 250 29.2


line stmt bran cond sub pod time code
1             # ======================================================================
2             #
3             # Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com)
4             # SOAP::Lite is free software; you can redistribute it
5             # and/or modify it under the same terms as Perl itself.
6             #
7             # $Id$
8             #
9             # ======================================================================
10              
11             package UDDI::Lite;
12 3     3   24845 use 5.006;
  3         10  
  3         113  
13 3     3   15 use strict;
  3         6  
  3         245  
14             {
15             our $VERSION = 0.718;
16             }
17             # ======================================================================
18              
19             package UDDI::Constants;
20             our $VERSION = 0.718;
21              
22             BEGIN
23             {
24             use vars
25 3     3   13 qw(%UDDI_VERSIONS $ELEMENTS $ATTRIBUTES $WITHNAMES $NAMESPACE $GENERIC);
  3         9  
  3         6287  
26              
27 3     3   2044 %UDDI_VERSIONS = (
28             1 => {
29             ELEMENTS => {
30             address => { addressLine => 1 },
31             authToken => { authInfo => 1 },
32             bindingDetail => { bindingTemplate => 1 },
33             bindingTemplate => {
34             accessPoint => 1,
35             description => 1,
36             hostingRedirector => 1,
37             tModelInstanceDetails => 1
38             },
39             bindingTemplates => { bindingTemplate => 1 },
40             businessDetail => { businessEntity => 1 },
41             businessDetailExt => { businessEntityExt => 1 },
42             businessEntity => {
43             businessServices => 1,
44             categoryBag => 1,
45             contacts => 1,
46             description => 1,
47             discoveryURLs => 1,
48             identifierBag => 1,
49             name => 1
50             },
51             businessEntityExt => { businessEntity => 1 },
52             businessInfo =>
53             { description => 1, name => 1, serviceInfos => 1 },
54             businessInfos => { businessInfo => 1 },
55             businessList => { businessInfos => 1 },
56             businessService => {
57             bindingTemplates => 1,
58             categoryBag => 1,
59             description => 1,
60             name => 1
61             },
62             businessServices => { businessService => 1 },
63             categoryBag => { keyedReference => 1 },
64             contact => {
65             address => 1,
66             description => 1,
67             email => 1,
68             personName => 1,
69             phone => 1
70             },
71             contacts => { contact => 1 },
72             delete_binding => { authInfo => 1, bindingKey => 1 },
73             delete_business => { authInfo => 1, businessKey => 1 },
74             delete_service => { authInfo => 1, serviceKey => 1 },
75             delete_tModel => { authInfo => 1, tModelKey => 1 },
76             discard_authToken => { authInfo => 1 },
77             discoveryURLs => { discoveryUrl => 1 },
78             dispositionReport => { result => 1 },
79             findQualifiers => { findQualifier => 1 },
80             find_binding => { findQualifiers => 1, tModelBag => 1 },
81             find_business => {
82             categoryBag => 1,
83             discoveryURLs => 1,
84             findQualifiers => 1,
85             identifierBag => 1,
86             name => 1,
87             tModelBag => 1
88             },
89             find_service => {
90             categoryBag => 1,
91             findQualifiers => 1,
92             name => 1,
93             tModelBag => 1
94             },
95             find_tModel => {
96             categoryBag => 1,
97             findQualifiers => 1,
98             identifierBag => 1,
99             name => 1
100             },
101             get_bindingDetail => { bindingKey => 1 },
102             get_businessDetail => { businessKey => 1 },
103             get_businessDetailExt => { businessKey => 1 },
104             get_registeredInfo => { authInfo => 1 },
105             get_serviceDetail => { serviceKey => 1 },
106             get_tModelDetail => { tModelKey => 1 },
107             identifierBag => { keyedReference => 1 },
108             instanceDetails =>
109             { description => 1, instanceParms => 1, overviewDoc => 1 },
110             overviewDoc => { description => 1, overviewURL => 1 },
111             registeredInfo => { businessInfos => 1, tModelInfos => 1 },
112             result => { errInfo => 1 },
113             save_binding => { authInfo => 1, bindingTemplate => 1 },
114             save_business =>
115             { authInfo => 1, businessEntity => 1, uploadRegister => 1 },
116             save_service => { authInfo => 1, businessService => 1 },
117             save_tModel =>
118             { authInfo => 1, tModel => 1, uploadRegister => 1 },
119             serviceDetail => { businessService => 1 },
120             serviceInfo => { name => 1 },
121             serviceInfos => { serviceInfo => 1 },
122             serviceList => { serviceInfos => 1 },
123             tModel => {
124             categoryBag => 1,
125             description => 1,
126             identifierBag => 1,
127             name => 1,
128             overviewDoc => 1
129             },
130             tModelBag => { tModelKey => 1 },
131             tModelDetail => { tModel => 1 },
132             tModelInfo => { name => 1 },
133             tModelInfos => { tModelInfo => 1 },
134             tModelInstanceDetails => { tModelInstanceInfo => 1 },
135             tModelInstanceInfo =>
136             { description => 1, instanceDetails => 1 },
137             tModelList => { tModelInfos => 1 },
138             validate_categorization => {
139             businessEntity => 1,
140             businessService => 1,
141             keyValue => 1,
142             tModel => 1,
143             tModelKey => 1
144             }
145             },
146             ATTRIBUTES => {
147             accessPoint => { URLType => 2 },
148             address => { sortCode => 2, useType => 2 },
149             authToken => { generic => 2, operator => 2 },
150             bindingDetail =>
151             { generic => 2, operator => 2, truncated => 2 },
152             bindingTemplate => { bindingKey => 2, serviceKey => 2 },
153             businessDetail =>
154             { generic => 2, operator => 2, truncated => 2 },
155             businessDetailExt =>
156             { generic => 2, operator => 2, truncated => 2 },
157             businessEntity =>
158             { authorizedName => 2, businessKey => 2, operator => 2 },
159             businessInfo => { businessKey => 2 },
160             businessList =>
161             { generic => 2, operator => 2, truncated => 2 },
162             businessService => { businessKey => 2, serviceKey => 2 },
163             contact => { useType => 2 },
164             delete_binding => { generic => 2 },
165             delete_business => { generic => 2 },
166             delete_service => { generic => 2 },
167             delete_tModel => { generic => 2 },
168             description => { lang => 2 },
169             discard_authToken => { generic => 2 },
170             discoveryUrl => { useType => 2 },
171             dispositionReport =>
172             { generic => 2, operator => 2, truncated => 2 },
173             email => { useType => 2 },
174             errInfo => { errCode => 2 },
175             find_binding =>
176             { generic => 2, maxRows => 2, serviceKey => 2 },
177             find_business => { generic => 2, maxRows => 2 },
178             find_service =>
179             { businessKey => 2, generic => 2, maxRows => 2 },
180             find_tModel => { generic => 2, maxRows => 2 },
181             get_authToken => { cred => 2, generic => 2, userID => 2 },
182             get_bindingDetail => { generic => 2 },
183             get_businessDetail => { generic => 2 },
184             get_businessDetailExt => { generic => 2 },
185             get_registeredInfo => { generic => 2 },
186             get_serviceDetail => { generic => 2 },
187             get_tModelDetail => { generic => 2 },
188             hostingRedirector => { bindingKey => 2 },
189             keyedReference =>
190             { keyName => 2, keyValue => 2, tModelKey => 2 },
191             phone => { useType => 2 },
192             registeredInfo =>
193             { generic => 2, operator => 2, truncated => 2 },
194             result => { errno => 2, keyType => 2 },
195             save_binding => { generic => 2 },
196             save_business => { generic => 2 },
197             save_service => { generic => 2 },
198             save_tModel => { generic => 2 },
199             serviceDetail =>
200             { generic => 2, operator => 2, truncated => 2 },
201             serviceInfo => { businessKey => 2, serviceKey => 2 },
202             serviceList =>
203             { generic => 2, operator => 2, truncated => 2 },
204             tModel =>
205             { authorizedName => 2, operator => 2, tModelKey => 2 },
206             tModelDetail =>
207             { generic => 2, operator => 2, truncated => 2 },
208             tModelInfo => { tModelKey => 2 },
209             tModelInstanceInfo => { tModelKey => 2 },
210             tModelList => { generic => 2, operator => 2, truncated => 2 },
211             validate_categorization => { generic => 2 }
212             },
213             WITHNAMES => [
214             qw/accessPoint address addressLine authInfo authToken bindingDetail bindingKey bindingTemplate bindingTemplates businessDetail businessDetailExt businessEntity businessEntityExt businessInfo businessInfos businessKey businessList businessService businessServices categoryBag contact contacts description discoveryURLs discoveryUrl dispositionReport email errInfo findQualifier findQualifiers hostingRedirector identifierBag instanceDetails instanceParms keyValue keyedReference name overviewDoc overviewURL personName phone registeredInfo result serviceDetail serviceInfo serviceInfos serviceKey serviceList tModel tModelBag tModelDetail tModelInfo tModelInfos tModelInstanceDetails tModelInstanceInfo tModelKey tModelList uploadRegister/
215             ],
216             NAMESPACE => 'urn:uddi-org:api',
217             GENERIC => '1.0', # string, not number; '.0' matters
218             },
219             2 => {
220             ELEMENTS => {
221             add_publisherAssertions =>
222             { authInfo => 1, publisherAssertion => 1 },
223             address => { addressLine => 1 },
224             assertionStatusItem => {
225             fromKey => 1,
226             keyedReference => 1,
227             keysOwned => 1,
228             toKey => 1
229             },
230             assertionStatusReport => { assertionStatusItem => 1 },
231             authToken => { authInfo => 1 },
232             bindingDetail => { bindingTemplate => 1 },
233             bindingTemplate => {
234             accessPoint => 1,
235             description => 1,
236             hostingRedirector => 1,
237             tModelInstanceDetails => 1
238             },
239             bindingTemplates => { bindingTemplate => 1 },
240             businessDetail => { businessEntity => 1 },
241             businessDetailExt => { businessEntityExt => 1 },
242             businessEntity => {
243             businessServices => 1,
244             categoryBag => 1,
245             contacts => 1,
246             description => 1,
247             discoveryURLs => 1,
248             identifierBag => 1,
249             name => 1
250             },
251             businessEntityExt => { businessEntity => 1 },
252             businessInfo =>
253             { description => 1, name => 1, serviceInfos => 1 },
254             businessInfos => { businessInfo => 1 },
255             businessList => { businessInfos => 1 },
256             businessService => {
257             bindingTemplates => 1,
258             categoryBag => 1,
259             description => 1,
260             name => 1
261             },
262             businessServices => { businessService => 1 },
263             categoryBag => { keyedReference => 1 },
264             contact => {
265             address => 1,
266             description => 1,
267             email => 1,
268             personName => 1,
269             phone => 1
270             },
271             contacts => { contact => 1 },
272             delete_binding => { authInfo => 1, bindingKey => 1 },
273             delete_business => { authInfo => 1, businessKey => 1 },
274             delete_publisherAssertions =>
275             { authInfo => 1, publisherAssertion => 1 },
276             delete_service => { authInfo => 1, serviceKey => 1 },
277             delete_tModel => { authInfo => 1, tModelKey => 1 },
278             discard_authToken => { authInfo => 1 },
279             discoveryURLs => { discoveryURL => 1 },
280             dispositionReport => { result => 1 },
281             findQualifiers => { findQualifier => 1 },
282             find_binding => { findQualifiers => 1, tModelBag => 1 },
283             find_business => {
284             categoryBag => 1,
285             discoveryURLs => 1,
286             findQualifiers => 1,
287             identifierBag => 1,
288             name => 1,
289             tModelBag => 1
290             },
291             find_relatedBusinesses => {
292             businessKey => 1,
293             findQualifiers => 1,
294             keyedReference => 1
295             },
296             find_service => {
297             categoryBag => 1,
298             findQualifiers => 1,
299             name => 1,
300             tModelBag => 1
301             },
302             find_tModel => {
303             categoryBag => 1,
304             findQualifiers => 1,
305             identifierBag => 1,
306             name => 1
307             },
308             get_assertionStatusReport =>
309             { authInfo => 1, completionStatus => 1 },
310             get_bindingDetail => { bindingKey => 1 },
311             get_businessDetail => { businessKey => 1 },
312             get_businessDetailExt => { businessKey => 1 },
313             get_publisherAssertions => { authInfo => 1 },
314             get_registeredInfo => { authInfo => 1 },
315             get_serviceDetail => { serviceKey => 1 },
316             get_tModelDetail => { tModelKey => 1 },
317             identifierBag => { keyedReference => 1 },
318             instanceDetails =>
319             { description => 1, instanceParms => 1, overviewDoc => 1 },
320             keysOwned => { fromKey => 1, toKey => 1 },
321             overviewDoc => { description => 1, overviewURL => 1 },
322             publisherAssertion =>
323             { fromKey => 1, keyedReference => 1, toKey => 1 },
324             publisherAssertions => { publisherAssertion => 1 },
325             registeredInfo => { businessInfos => 1, tModelInfos => 1 },
326             relatedBusinessInfo => {
327             businessKey => 1,
328             description => 1,
329             name => 1,
330             sharedRelationships => 1
331             },
332             relatedBusinessInfos => { relatedBusinessInfo => 1 },
333             relatedBusinessesList =>
334             { businessKey => 1, relatedBusinessInfos => 1 },
335             result => { errInfo => 1 },
336             save_binding => { authInfo => 1, bindingTemplate => 1 },
337             save_business =>
338             { authInfo => 1, businessEntity => 1, uploadRegister => 1 },
339             save_service => { authInfo => 1, businessService => 1 },
340             save_tModel =>
341             { authInfo => 1, tModel => 1, uploadRegister => 1 },
342             serviceDetail => { businessService => 1 },
343             serviceInfo => { name => 1 },
344             serviceInfos => { serviceInfo => 1 },
345             serviceList => { serviceInfos => 1 },
346             set_publisherAssertions =>
347             { authInfo => 1, publisherAssertion => 1 },
348             sharedRelationships => { keyedReference => 1 },
349             tModel => {
350             categoryBag => 1,
351             description => 1,
352             identifierBag => 1,
353             name => 1,
354             overviewDoc => 1
355             },
356             tModelBag => { tModelKey => 1 },
357             tModelDetail => { tModel => 1 },
358             tModelInfo => { name => 1 },
359             tModelInfos => { tModelInfo => 1 },
360             tModelInstanceDetails => { tModelInstanceInfo => 1 },
361             tModelInstanceInfo =>
362             { description => 1, instanceDetails => 1 },
363             tModelList => { tModelInfos => 1 },
364             validate_values =>
365             { businessEntity => 1, businessService => 1, tModel => 1 }
366             },
367             ATTRIBUTES => {
368             accessPoint => { URLType => 2 },
369             add_publisherAssertions => { generic => 2 },
370             address => { sortCode => 2, tModelKey => 2, useType => 2 },
371             addressLine => { keyName => 2, keyValue => 2 },
372             assertionStatusItem => { completionStatus => 2 },
373             assertionStatusReport => { generic => 2, operator => 2 },
374             authToken => { generic => 2, operator => 2 },
375             bindingDetail =>
376             { generic => 2, operator => 2, truncated => 2 },
377             bindingTemplate => { bindingKey => 2, serviceKey => 2 },
378             businessDetail =>
379             { generic => 2, operator => 2, truncated => 2 },
380             businessDetailExt =>
381             { generic => 2, operator => 2, truncated => 2 },
382             businessEntity =>
383             { authorizedName => 2, businessKey => 2, operator => 2 },
384             businessInfo => { businessKey => 2 },
385             businessList =>
386             { generic => 2, operator => 2, truncated => 2 },
387             businessService => { businessKey => 2, serviceKey => 2 },
388             contact => { useType => 2 },
389             delete_binding => { generic => 2 },
390             delete_business => { generic => 2 },
391             delete_publisherAssertions => { generic => 2 },
392             delete_service => { generic => 2 },
393             delete_tModel => { generic => 2 },
394             description => { lang => 2 },
395             discard_authToken => { generic => 2 },
396             discoveryURL => { useType => 2 },
397             dispositionReport =>
398             { generic => 2, operator => 2, truncated => 2 },
399             email => { useType => 2 },
400             errInfo => { errCode => 2 },
401             find_binding =>
402             { generic => 2, maxRows => 2, serviceKey => 2 },
403             find_business => { generic => 2, maxRows => 2 },
404             find_relatedBusinesses => { generic => 2, maxRows => 2 },
405             find_service =>
406             { businessKey => 2, generic => 2, maxRows => 2 },
407             find_tModel => { generic => 2, maxRows => 2 },
408             get_assertionStatusReport => { generic => 2 },
409             get_authToken => { cred => 2, generic => 2, userID => 2 },
410             get_bindingDetail => { generic => 2 },
411             get_businessDetail => { generic => 2 },
412             get_businessDetailExt => { generic => 2 },
413             get_publisherAssertions => { generic => 2 },
414             get_registeredInfo => { generic => 2 },
415             get_serviceDetail => { generic => 2 },
416             get_tModelDetail => { generic => 2 },
417             hostingRedirector => { bindingKey => 2 },
418             keyedReference =>
419             { keyName => 2, keyValue => 2, tModelKey => 2 },
420             name => { lang => 2 },
421             phone => { useType => 2 },
422             publisherAssertions =>
423             { authorizedName => 2, generic => 2, operator => 2 },
424             registeredInfo =>
425             { generic => 2, operator => 2, truncated => 2 },
426             relatedBusinessesList =>
427             { generic => 2, operator => 2, truncated => 2 },
428             result => { errno => 2, keyType => 2 },
429             save_binding => { generic => 2 },
430             save_business => { generic => 2 },
431             save_service => { generic => 2 },
432             save_tModel => { generic => 2 },
433             serviceDetail =>
434             { generic => 2, operator => 2, truncated => 2 },
435             serviceInfo => { businessKey => 2, serviceKey => 2 },
436             serviceList =>
437             { generic => 2, operator => 2, truncated => 2 },
438             set_publisherAssertions => { generic => 2 },
439             sharedRelationships => { direction => 2 },
440             tModel =>
441             { authorizedName => 2, operator => 2, tModelKey => 2 },
442             tModelDetail =>
443             { generic => 2, operator => 2, truncated => 2 },
444             tModelInfo => { tModelKey => 2 },
445             tModelInstanceInfo => { tModelKey => 2 },
446             tModelList => { generic => 2, operator => 2, truncated => 2 },
447             validate_values => { generic => 2 }
448             },
449             WITHNAMES => [
450             qw/accessPoint address addressLine assertionStatusItem assertionStatusReport authInfo authToken bindingDetail bindingKey bindingTemplate bindingTemplates businessDetail businessDetailExt businessEntity businessEntityExt businessInfo businessInfos businessKey businessList businessService businessServices categoryBag completionStatus contact contacts description discoveryURL discoveryURLs dispositionReport email errInfo findQualifier findQualifiers fromKey hostingRedirector identifierBag instanceDetails instanceParms keyedReference keysOwned name overviewDoc overviewURL personName phone publisherAssertion publisherAssertions registeredInfo relatedBusinessInfo relatedBusinessInfos relatedBusinessesList result serviceDetail serviceInfo serviceInfos serviceKey serviceList sharedRelationships tModel tModelBag tModelDetail tModelInfo tModelInfos tModelInstanceDetails tModelInstanceInfo tModelKey tModelList toKey uploadRegister/
451             ],
452             NAMESPACE => 'urn:uddi-org:api_v2',
453             GENERIC => '2.0',
454             },
455             3 => {
456             ELEMENTS => {
457             add_publisherAssertions =>
458             { authInfo => 1, publisherAssertion => 1 },
459             address => { addressLine => 1 },
460             assertionStatusItem => {
461             fromKey => 1,
462             keyedReference => 1,
463             keysOwned => 1,
464             toKey => 1
465             },
466             assertionStatusReport => { assertionStatusItem => 1 },
467             authToken => { authInfo => 1 },
468             bindingDetail =>
469             { bindingTemplate => 1, listDescription => 1 },
470             bindingTemplate => {
471             accessPoint => 1,
472             categoryBag => 1,
473             description => 1,
474             Signature => 1,
475             hostingRedirector => 1,
476             tModelInstanceDetails => 1
477             },
478             bindingTemplates => { bindingTemplate => 1 },
479             businessDetail => { businessEntity => 1 },
480             businessEntity => {
481             businessServices => 1,
482             categoryBag => 1,
483             contacts => 1,
484             description => 1,
485             discoveryURLs => 1,
486             Signature => 1,
487             identifierBag => 1,
488             name => 1
489             },
490             businessInfo =>
491             { description => 1, name => 1, serviceInfos => 1 },
492             businessInfos => { businessInfo => 1 },
493             businessList => { businessInfos => 1, listDescription => 1 },
494             businessService => {
495             bindingTemplates => 1,
496             categoryBag => 1,
497             description => 1,
498             Signature => 1,
499             name => 1
500             },
501             businessServices => { businessService => 1 },
502             categoryBag => {
503             keyedReference => 1,
504             keyedReferenceGroup => 1,
505             keyedReferenceGroup => 1
506             },
507             contact => {
508             address => 1,
509             description => 1,
510             email => 1,
511             personName => 1,
512             phone => 1
513             },
514             contacts => { contact => 1 },
515             delete_binding => { authInfo => 1, bindingKey => 1 },
516             delete_business => { authInfo => 1, businessKey => 1 },
517             delete_publisherAssertions =>
518             { authInfo => 1, publisherAssertion => 1 },
519             delete_service => { authInfo => 1, serviceKey => 1 },
520             delete_tModel => { authInfo => 1, tModelKey => 1 },
521             discard_authToken => { authInfo => 1 },
522             discoveryURLs => { discoveryURL => 1 },
523             dispositionReport => { result => 1 },
524             findQualifiers => { findQualifier => 1 },
525             find_binding => {
526             authInfo => 1,
527             categoryBag => 1,
528             findQualifiers => 1,
529             find_tModel => 1,
530             tModelBag => 1
531             },
532             find_business => {
533             authInfo => 1,
534             categoryBag => 1,
535             discoveryURLs => 1,
536             findQualifiers => 1,
537             find_relatedBusinesses => 1,
538             find_tModel => 1,
539             identifierBag => 1,
540             name => 1,
541             tModelBag => 1
542             },
543             find_relatedBusinesses => {
544             authInfo => 1,
545             businessKey => 1,
546             findQualifiers => 1,
547             fromKey => 1,
548             keyedReference => 1,
549             toKey => 1
550             },
551             find_service => {
552             authInfo => 1,
553             categoryBag => 1,
554             findQualifiers => 1,
555             find_tModel => 1,
556             name => 1,
557             tModelBag => 1
558             },
559             find_tModel => {
560             authInfo => 1,
561             categoryBag => 1,
562             findQualifiers => 1,
563             identifierBag => 1,
564             name => 1
565             },
566             get_assertionStatusReport =>
567             { authInfo => 1, completionStatus => 1 },
568             get_bindingDetail => { authInfo => 1, bindingKey => 1 },
569             get_businessDetail => { authInfo => 1, businessKey => 1 },
570             get_operationalInfo => { authInfo => 1, entityKey => 1 },
571             get_publisherAssertions => { authInfo => 1 },
572             get_registeredInfo => { authInfo => 1 },
573             get_serviceDetail => { authInfo => 1, serviceKey => 1 },
574             get_tModelDetail => { authInfo => 1, tModelKey => 1 },
575             identifierBag => { keyedReference => 1 },
576             instanceDetails => {
577             description => 1,
578             instanceParms => 1,
579             instanceParms => 1,
580             overviewDoc => 1
581             },
582             keyedReferenceGroup => { keyedReference => 1 },
583             keysOwned => { fromKey => 1, toKey => 1, toKey => 1 },
584             listDescription =>
585             { actualCount => 1, includeCount => 1, listHead => 1 },
586             operationalInfo => {
587             authorizedName => 1,
588             created => 1,
589             modified => 1,
590             modifiedIncludingChildren => 1,
591             nodeID => 1
592             },
593             operationalInfos => { operationalInfo => 1 },
594             overviewDoc =>
595             { description => 1, overviewURL => 1, overviewURL => 1 },
596             publisherAssertion => {
597             Signature => 1,
598             fromKey => 1,
599             keyedReference => 1,
600             toKey => 1
601             },
602             publisherAssertions => { publisherAssertion => 1 },
603             registeredInfo => { businessInfos => 1, tModelInfos => 1 },
604             relatedBusinessInfo => {
605             businessKey => 1,
606             description => 1,
607             name => 1,
608             sharedRelationships => 1
609             },
610             relatedBusinessInfos => { relatedBusinessInfo => 1 },
611             relatedBusinessesList => {
612             businessKey => 1,
613             listDescription => 1,
614             relatedBusinessInfos => 1
615             },
616             result => { errInfo => 1 },
617             save_binding => { authInfo => 1, bindingTemplate => 1 },
618             save_business => { authInfo => 1, businessEntity => 1 },
619             save_service => { authInfo => 1, businessService => 1 },
620             save_tModel => { authInfo => 1, tModel => 1 },
621             serviceDetail => { businessService => 1 },
622             serviceInfo => { name => 1 },
623             serviceInfos => { serviceInfo => 1 },
624             serviceList => { listDescription => 1, serviceInfos => 1 },
625             set_publisherAssertions =>
626             { authInfo => 1, publisherAssertion => 1 },
627             sharedRelationships =>
628             { keyedReference => 1, publisherAssertion => 1 },
629             tModel => {
630             categoryBag => 1,
631             description => 1,
632             Signature => 1,
633             identifierBag => 1,
634             name => 1,
635             overviewDoc => 1
636             },
637             tModelBag => { tModelKey => 1 },
638             tModelDetail => { tModel => 1 },
639             tModelInfo => { description => 1, name => 1 },
640             tModelInfos => { tModelInfo => 1 },
641             tModelInstanceDetails => { tModelInstanceInfo => 1 },
642             tModelInstanceInfo =>
643             { description => 1, instanceDetails => 1 },
644             tModelList => { listDescription => 1, tModelInfos => 1 }
645             },
646             ATTRIBUTES => {
647             accessPoint => { useType => 2 },
648             address =>
649             { sortCode => 2, tModelKey => 2, useType => 2, lang => 2 },
650             addressLine => { keyName => 2, keyValue => 2 },
651             assertionStatusItem => { completionStatus => 2 },
652             bindingDetail => { truncated => 2 },
653             bindingTemplate => { bindingKey => 2, serviceKey => 2 },
654             businessDetail => { truncated => 2 },
655             businessEntity => { businessKey => 2 },
656             businessInfo => { businessKey => 2 },
657             businessList => { truncated => 2 },
658             businessService => { businessKey => 2, serviceKey => 2 },
659             contact => { useType => 2 },
660             description => { lang => 2 },
661             discoveryURL => { useType => 2 },
662             dispositionReport => { truncated => 2 },
663             email => { useType => 2 },
664             errInfo => { errCode => 2 },
665             find_binding =>
666             { listHead => 2, maxRows => 2, serviceKey => 2 },
667             find_business => { listHead => 2, maxRows => 2 },
668             find_relatedBusinesses => { listHead => 2, maxRows => 2 },
669             find_service =>
670             { businessKey => 2, listHead => 2, maxRows => 2 },
671             find_tModel => { listHead => 2, maxRows => 2 },
672             get_authToken => { cred => 2, userID => 2 },
673             get_registeredInfo => { infoSelection => 2 },
674             hostingRedirector => { bindingKey => 2 },
675             keyedReference =>
676             { keyName => 2, keyValue => 2, tModelKey => 2 },
677             keyedReferenceGroup => { tModelKey => 2 },
678             name => { lang => 2 },
679             operationalInfo => { entityKey => 2 },
680             operationalInfos => { truncated => 2 },
681             overviewURL => { useType => 2 },
682             personName => { lang => 2 },
683             phone => { useType => 2 },
684             registeredInfo => { truncated => 2 },
685             relatedBusinessesList => { truncated => 2 },
686             result => { errno => 2, keyType => 2 },
687             serviceDetail => { truncated => 2 },
688             serviceInfo => { businessKey => 2, serviceKey => 2 },
689             serviceList => { truncated => 2 },
690             sharedRelationships => { direction => 2 },
691             tModel => { deleted => 2, tModelKey => 2 },
692             tModelDetail => { truncated => 2 },
693             tModelInfo => { tModelKey => 2 },
694             tModelInstanceInfo => { tModelKey => 2 },
695             tModelList => { truncated => 2 }
696             },
697             WITHNAMES => [
698             qw/accessPoint actualCount address addressLine assertionStatusItem assertionStatusReport authToken authorizedName bindingDetail bindingKey bindingTemplate bindingTemplates businessDetail businessEntity businessInfo businessInfos businessKey businessList businessService businessServices categoryBag completionStatus contact contacts created description discoveryURL discoveryURLs dispositionReport email entityKey errInfo findQualifier findQualifiers fromKey hostingRedirector identifierBag includeCount infoSelection instanceDetails instanceParms keyedReference keyedReferenceGroup keysOwned listDescription listHead modified modifiedIncludingChildren name nodeID operationalInfo operationalInfos overviewDoc overviewURL personName phone publisherAssertion publisherAssertions registeredInfo relatedBusinessInfo relatedBusinessInfos relatedBusinessesList result serviceDetail serviceInfo serviceInfos serviceKey serviceList sharedRelationships tModel tModelBag tModelDetail tModelInfo tModelInfos tModelInstanceDetails tModelInstanceInfo tModelKey tModelList toKey/
699             ],
700             NAMESPACE => 'urn:uddi-org:api_v3',
701             GENERIC => undef,
702             },
703             );
704             }
705              
706             # ======================================================================
707              
708             package UDDI::SOM;
709             our $VERSION = 0.718;
710 3     3   23 use vars qw(@ISA);
  3         7  
  3         396  
711             @ISA = qw(SOAP::SOM);
712              
713             sub result
714             { # result should point to immediate child of Body
715 0     0   0 my $self = shift;
716 0         0 my $result = '/Envelope/Body/[1]';
717 0 0       0 ref $self or return $result;
718 0 0       0 defined $self->fault ? undef: $self->valueof($result);
719             }
720              
721             # ======================================================================
722              
723             package UDDI::Data;
724             our $VERSION = 0.718;
725              
726              
727 3     3   16 use Carp ();
  3         5  
  3         72  
728              
729 3     3   15 use vars qw(@ISA $AUTOLOAD);
  3         4  
  3         429  
730             @ISA = qw(SOAP::Data);
731              
732 3     3   5537 use overload fallback => 1, '""' => sub { shift->SUPER::value };
  3     0   3421  
  3         30  
  0         0  
733              
734             sub _init
735             {
736 3     3   235 use vars qw(@EXPORT_OK %EXPORT_TAGS);
  3         6  
  3         237  
737 0     0   0 @EXPORT_OK = ( with => @$UDDI::Constants::WITHNAMES );
738 0         0 %EXPORT_TAGS = ( all => [@EXPORT_OK] );
739              
740 3     3   14 use vars qw($elements $attributes);
  3         4  
  3         962  
741 0         0 $elements = $UDDI::Constants::ELEMENTS;
742 0         0 $attributes = $UDDI::Constants::ATTRIBUTES;
743             }
744              
745             sub new
746             {
747 0     0   0 my $self = shift;
748 0   0     0 my $class = ref($self) || $self;
749              
750 0 0       0 unless ( ref $self )
751             {
752 0         0 $self = $class->SUPER::new( @_, type => 'uddi' );
753             }
754 0         0 return $self;
755             }
756              
757             sub with
758             {
759 0     0   0 my $self = shift;
760 0 0 0     0 $self =
      0        
761             ( __PACKAGE__->can($self)
762             || Carp::croak "Don't know what to do with '$self'" )->()
763             unless ref $self && UNIVERSAL::isa( $self => __PACKAGE__ );
764              
765 0         0 my $name = $self->SUPER::name;
766 0         0 my @values;
767 0         0 while (@_)
768             {
769 0         0 my $data = shift;
770 0 0       0 my ( $method, $attr, @value ) =
771             UNIVERSAL::isa( $data => __PACKAGE__ )
772             ? ( $data->SUPER::name, $data->SUPER::attr, $data->SUPER::value )
773             : ( $data, {}, shift );
774 0 0 0     0 exists $attributes->{$name}{$method}
775              
776             # attribute
777             ? $self->$method(@value)
778              
779             # sub element
780             : push(
781             @values,
782             (
783             $self->can($method)
784             || Carp::croak "Don't know what to do with '$method'"
785             )->(@value)->attr($attr)
786             );
787             }
788 0         0 $self->set_value( [@values] );
789             }
790              
791             sub _compileit
792             {
793 3     3   16 no strict 'refs';
  3         5  
  3         1529  
794 3     3   7 my $method = shift;
795             *$method = sub {
796              
797             # GENERATE element if no parameters: businessInfo()
798 0 0 0 0     return __PACKAGE__->SUPER::name($method)
799             if !@_ && exists $elements->{$method};
800              
801 0 0 0       die "Expected element (UDDI::Data) as parameter for $method()\n"
802             if !ref $_[0] && exists $elements->{$method};
803              
804             # MAKE ELEMENT: name( [{attr => value},] 'old')
805 0 0         if ( !UNIVERSAL::isa( $_[0] => __PACKAGE__ ) )
806             {
807              
808             # get optional list of attributes as a first parameter
809 0 0         my $attr = ref $_[0] eq 'HASH' ? shift @_ : {};
810 0           return __PACKAGE__->SUPER::name( $method => @_ )->attr($attr);
811             }
812              
813 0           my $name = $_[0]->SUPER::name;
814              
815 0 0         if ( defined $name )
816             {
817              
818             # GET/SET ATTRIBUTE: businessInfo->businessKey
819 0 0 0       return @_ > 1
    0          
820             ? scalar( $_[0]->attr->{$method} = $_[1], $_[0] ) # SET
821             : __PACKAGE__->SUPER::name(
822             $method => $_[0]->attr->{$method} ) # GET
823             if exists $attributes->{$name}
824             && exists $attributes->{$name}{$method};
825              
826             # GET ELEMENT: businessInfos->businessInfo
827 0 0 0       my @elems = grep {
828 0 0         ref $_
829             && UNIVERSAL::isa( $_ => __PACKAGE__ )
830             && $_->SUPER::name eq $method
831 0           } map { ref $_ eq 'ARRAY' ? @$_ : $_ } $_[0]->value;
832 0 0 0       return wantarray ? @elems : $elems[0]
    0          
833             if exists $elements->{$name}
834             && exists $elements->{$name}{$method};
835              
836             # MAKE ELEMENT: businessInfos(businessInfo('something'))
837 0 0 0       return __PACKAGE__->SUPER::name( $method => @_ )
838             if exists $elements->{$method}
839             && exists $elements->{$method}{$name};
840             }
841              
842             # handle UDDI::Data->method() calls for those SOAP::Data methods
843             # that conflict with UDDI methods, like name()
844 0 0         if ( UNIVERSAL::can( $ISA[0] => $method ) )
845             {
846 0           my $pkg = shift @_;
847 0           return eval "\$pkg->SUPER::$method(\@_)";
848             }
849              
850             Carp::croak
851 0           "Don't know what to do with '$method' and '$name' elements";
852             }
853 3         331 }
854              
855 3     3   10 sub BEGIN { _compileit('name') }
856              
857             sub AUTOLOAD
858             {
859 0     0     my $method = substr( $AUTOLOAD, rindex( $AUTOLOAD, '::' ) + 2 );
860 0 0         return if $method eq 'DESTROY';
861              
862 0           _compileit($method);
863 0           goto &$AUTOLOAD;
864             }
865              
866             # ======================================================================
867              
868             package UDDI::Serializer;
869             our $VERSION = 0.718;
870              
871 3     3   16 use vars qw(@ISA);
  3         3  
  3         428  
872             @ISA = qw(SOAP::Serializer);
873              
874             sub new
875             {
876 0     0     my $self = shift;
877 0   0       my $class = ref($self) || $self;
878              
879 0 0         unless ( ref $self )
880             {
881 0 0         $self = $class->SUPER::new(
882             attr => {},
883             namespaces => {
884             $SOAP::Constants::PREFIX_ENV
885             ? ( $SOAP::Constants::NS_ENV => $SOAP::Constants::PREFIX_ENV )
886             : (),
887             },
888             autotype => 0,
889             @_,
890             );
891             }
892 0           return $self;
893             }
894              
895 3     3   13 use overload; # protect from stringification in UDDI::Data
  3         5  
  3         21  
896 0     0     sub gen_id { overload::StrVal( $_[1] ) =~ /\((0x\w+)\)/o; $1 }
  0            
897              
898             sub as_uddi
899             {
900 0     0     my $self = shift;
901 0           my ( $value, $name, $type, $attr ) = @_;
902 0 0         return $self->encode_array( $value, $name, undef, $attr )
903             if ref $value eq 'ARRAY';
904 0 0         return $self->encode_hash( $value, $name, undef, $attr )
905             if ref $value eq 'HASH';
906             [
907 0 0         $name,
908 0 0         { %{ $attr || {} } },
909             ref $value
910             ? ( [ $self->encode_object($value) ], $self->gen_id($value) )
911             : $value
912             ];
913             }
914              
915             sub encode_array
916             {
917 0     0     my $self = shift;
918 0           my $encoded = $self->SUPER::encode_array(@_);
919 0           delete $encoded->[1]
920             ->{ SOAP::Utils::qualify( $self->encprefix => 'arrayType' ) };
921 0           return $encoded;
922             }
923              
924             # ======================================================================
925              
926             package UDDI::Deserializer;
927             our $VERSION = 0.718;
928              
929 3     3   924 use vars qw(@ISA);
  3         5  
  3         687  
930             @ISA = qw(SOAP::Deserializer);
931              
932             sub decode_value
933             {
934 0     0     my $self = shift;
935 0           my $ref = shift;
936 0           my ( $name, $attrs, $children, $value ) = @$ref;
937              
938             # base class knows what to do with elements in SOAP namespace
939 0 0 0       return $self->SUPER::decode_value($ref)
940             if exists $attrs->{href}
941             || ( SOAP::Utils::splitlongname($name) )[0] eq $SOAP::Constants::NS_ENV;
942              
943 0 0 0       UDDI::Data->SOAP::Data::name($name)->attr($attrs)
944             ->set_value( ref $children
945             && @$children
946             ? map( scalar( ( $self->decode_object($_) )[1] ), @$children )
947             : $value );
948             }
949              
950             sub deserialize
951             {
952 0     0     bless shift->SUPER::deserialize(@_) => 'UDDI::SOM';
953             }
954              
955             # ======================================================================
956              
957             package UDDI::Lite;
958             our $VERSION = 0.718;
959              
960 3     3   14 use vars qw(@ISA $AUTOLOAD %EXPORT_TAGS);
  3         5  
  3         164  
961 3     3   17 use Exporter;
  3         10  
  3         130  
962 3     3   22 use Carp ();
  3         5  
  3         56  
963 3     3   5383 use SOAP::Lite;
  0         0  
  0         0  
964             @ISA = qw(SOAP::Lite Exporter);
965              
966             BEGIN
967             { # handle exports
968             %EXPORT_TAGS = (
969             'delete' => [
970             qw/delete_binding delete_business delete_service
971             delete_tModel delete_publisherAssertions/
972             ],
973              
974             # ^-------------------- v2/3
975             'auth' => [qw/get_authToken discard_authToken get_registeredInfo/],
976             'save' => [
977             qw/save_binding save_business save_service save_tModel
978             add_publisherAssertions set_publisherAssertions/
979             ],
980              
981             # ^----------------- v2/3 ^----------------- v2/3
982             'validate' => [qw/validate_categorization validate_values/],
983              
984             # ^------------------- v1 ^------------v2
985             'find' => [
986             qw/find_binding find_business find_service find_tModel
987             find_relatedBusinesses/
988             ],
989              
990             # ^---------------- v2/3
991             'get' => [
992             qw/get_bindingDetail get_businessDetail get_businessDetailExt
993             get_serviceDetail get_tModelDetail
994             get_assertionStatusReport get_publisherAssertions/
995             ],
996              
997             # ^------------------- v2/3 ^----------------- v2/3
998             );
999             $EXPORT_TAGS{inquiry} = [ map { @{ $EXPORT_TAGS{$_} } } qw/find get/ ];
1000             $EXPORT_TAGS{publish} =
1001             [ map { @{ $EXPORT_TAGS{$_} } } qw/delete auth save validate/ ];
1002             $EXPORT_TAGS{all} = [ map { @{ $EXPORT_TAGS{$_} } } qw/inquiry publish/ ];
1003             Exporter::export_ok_tags('all');
1004             }
1005              
1006             my $uddiversion;
1007              
1008             sub uddiversion
1009             {
1010             my $self = shift;
1011             my $version = shift or return $uddiversion;
1012              
1013             die qq!Wrong UDDI version. Supported versions: @{[
1014             join ", ", keys %UDDI::Constants::UDDI_VERSIONS]}\n!
1015             unless defined $UDDI::Constants::UDDI_VERSIONS{$version};
1016              
1017             foreach ( keys %{ $UDDI::Constants::UDDI_VERSIONS{$version} } )
1018             {
1019             eval
1020             "\$UDDI::Constants::$_ = \$UDDI::Constants::UDDI_VERSIONS{$version}->{$_}"
1021             or die;
1022             }
1023              
1024             UDDI::Data->_init;
1025              
1026             $uddiversion = $version;
1027             $self;
1028             }
1029              
1030             BEGIN { UDDI::Lite->uddiversion(1) }
1031              
1032             sub new
1033             {
1034             my $self = shift;
1035             my $class = ref($self) || $self;
1036              
1037             unless ( ref $self )
1038             {
1039             $self = $class->SUPER::new(
1040             on_action => sub { '""' },
1041             serializer => UDDI::Serializer->new, # register UDDI Serializer
1042             deserializer => UDDI::Deserializer->new, # and Deserializer
1043             @_,
1044             );
1045             }
1046             return $self;
1047             }
1048              
1049             sub AUTOLOAD
1050             {
1051             my $method = substr( $AUTOLOAD, rindex( $AUTOLOAD, '::' ) + 2 );
1052             return if $method eq 'DESTROY';
1053              
1054             no strict 'refs';
1055             *$AUTOLOAD = sub {
1056             return shift->call( $method => @_ )
1057             if UNIVERSAL::isa( $_[0] => __PACKAGE__ );
1058             my $som =
1059             ( __PACKAGE__->self
1060             || Carp::croak "Method call on unspecified object. Died" )
1061             ->call( $method => @_ );
1062             UNIVERSAL::isa( $som => 'SOAP::SOM' ) ? $som->result : $som;
1063             };
1064             goto &$AUTOLOAD;
1065             }
1066              
1067             sub call
1068             {
1069             SOAP::Trace::trace('()');
1070             my $self = shift;
1071             my $method = shift;
1072             my @parameters;
1073             my $attr = ref $_[0] eq 'HASH' ? shift() : {};
1074             while (@_)
1075             {
1076             push( @parameters,
1077             UNIVERSAL::isa( $_[0] => 'UDDI::Data' )
1078             ? shift
1079             : SOAP::Data->name( shift, shift ) );
1080             }
1081             my $message =
1082             SOAP::Data->name( $method => \SOAP::Data->value(@parameters) )->attr(
1083             {
1084             xmlns => $UDDI::Constants::NAMESPACE,
1085             (
1086             defined $UDDI::Constants::GENERIC
1087             ? ( generic => $UDDI::Constants::GENERIC )
1088             : ()
1089             ),
1090             %$attr
1091             }
1092             );
1093              
1094             my $serializer = $self->serializer;
1095             $serializer->on_nonserialized( $self->on_nonserialized );
1096              
1097             my $respond = $self->transport->send_receive(
1098             endpoint => $self->endpoint,
1099             action => $self->on_action->( $self->uri ),
1100             envelope => $serializer->envelope( freeform => $message ),
1101             encoding => $serializer->encoding,
1102             );
1103              
1104             return $respond if $self->outputxml;
1105              
1106             unless ( $self->transport->is_success )
1107             {
1108             my $result = eval { $self->deserializer->deserialize($respond) }
1109             if $respond;
1110             return $self->on_fault->( $self, $@ ? $respond : $result ) || $result;
1111             }
1112              
1113             return unless $respond; # nothing to do for one-ways
1114             return $self->deserializer->deserialize($respond);
1115             }
1116              
1117             # ======================================================================
1118              
1119             1;
1120              
1121             __END__