soap2r 1.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. data/bin/wsdl2ruby.rb +137 -0
  2. data/bin/xsd2ruby.rb +90 -0
  3. data/lib/soap/attachment.rb +108 -0
  4. data/lib/soap/attrproxy.rb +34 -0
  5. data/lib/soap/baseData.rb +1094 -0
  6. data/lib/soap/element.rb +277 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
  8. data/lib/soap/encodingstyle/handler.rb +120 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +195 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +559 -0
  11. data/lib/soap/filter.rb +13 -0
  12. data/lib/soap/filter/filterchain.rb +51 -0
  13. data/lib/soap/filter/handler.rb +31 -0
  14. data/lib/soap/filter/streamhandler.rb +29 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +61 -0
  17. data/lib/soap/header/handlerset.rb +70 -0
  18. data/lib/soap/header/mappinghandler.rb +47 -0
  19. data/lib/soap/header/simplehandler.rb +44 -0
  20. data/lib/soap/httpconfigloader.rb +141 -0
  21. data/lib/soap/mapping.rb +12 -0
  22. data/lib/soap/mapping/encodedregistry.rb +537 -0
  23. data/lib/soap/mapping/factory.rb +388 -0
  24. data/lib/soap/mapping/literalregistry.rb +391 -0
  25. data/lib/soap/mapping/mapping.rb +576 -0
  26. data/lib/soap/mapping/registry.rb +295 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +170 -0
  29. data/lib/soap/mapping/typeMap.rb +106 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +211 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +248 -0
  32. data/lib/soap/marshal.rb +59 -0
  33. data/lib/soap/mimemessage.rb +241 -0
  34. data/lib/soap/nestedexception.rb +42 -0
  35. data/lib/soap/netHttpClient.rb +241 -0
  36. data/lib/soap/ns.rb +34 -0
  37. data/lib/soap/parser.rb +252 -0
  38. data/lib/soap/processor.rb +66 -0
  39. data/lib/soap/property.rb +319 -0
  40. data/lib/soap/proxy.rb +14 -0
  41. data/lib/soap/rpc/cgistub.rb +247 -0
  42. data/lib/soap/rpc/driver.rb +221 -0
  43. data/lib/soap/rpc/element.rb +374 -0
  44. data/lib/soap/rpc/httpserver.rb +142 -0
  45. data/lib/soap/rpc/methodDef.rb +68 -0
  46. data/lib/soap/rpc/proxy.rb +572 -0
  47. data/lib/soap/rpc/router.rb +662 -0
  48. data/lib/soap/rpc/rpc.rb +25 -0
  49. data/lib/soap/rpc/soaplet.rb +200 -0
  50. data/lib/soap/rpc/standaloneServer.rb +43 -0
  51. data/lib/soap/soap.rb +151 -0
  52. data/lib/soap/streamHandler.rb +301 -0
  53. data/lib/soap/wsdlDriver.rb +164 -0
  54. data/lib/wsdl/binding.rb +65 -0
  55. data/lib/wsdl/data.rb +64 -0
  56. data/lib/wsdl/definitions.rb +236 -0
  57. data/lib/wsdl/documentation.rb +32 -0
  58. data/lib/wsdl/import.rb +80 -0
  59. data/lib/wsdl/importer.rb +38 -0
  60. data/lib/wsdl/info.rb +50 -0
  61. data/lib/wsdl/message.rb +54 -0
  62. data/lib/wsdl/operation.rb +151 -0
  63. data/lib/wsdl/operationBinding.rb +240 -0
  64. data/lib/wsdl/param.rb +93 -0
  65. data/lib/wsdl/parser.rb +164 -0
  66. data/lib/wsdl/part.rb +52 -0
  67. data/lib/wsdl/port.rb +66 -0
  68. data/lib/wsdl/portType.rb +75 -0
  69. data/lib/wsdl/service.rb +61 -0
  70. data/lib/wsdl/soap/address.rb +40 -0
  71. data/lib/wsdl/soap/binding.rb +49 -0
  72. data/lib/wsdl/soap/body.rb +58 -0
  73. data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
  74. data/lib/wsdl/soap/classDefCreator.rb +433 -0
  75. data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
  76. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  77. data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
  78. data/lib/wsdl/soap/complexType.rb +173 -0
  79. data/lib/wsdl/soap/data.rb +42 -0
  80. data/lib/wsdl/soap/definitions.rb +200 -0
  81. data/lib/wsdl/soap/driverCreator.rb +118 -0
  82. data/lib/wsdl/soap/element.rb +33 -0
  83. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
  84. data/lib/wsdl/soap/fault.rb +56 -0
  85. data/lib/wsdl/soap/header.rb +86 -0
  86. data/lib/wsdl/soap/headerfault.rb +56 -0
  87. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
  88. data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
  89. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
  90. data/lib/wsdl/soap/methodDefCreator.rb +199 -0
  91. data/lib/wsdl/soap/operation.rb +112 -0
  92. data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
  93. data/lib/wsdl/soap/servletStubCreator.rb +104 -0
  94. data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
  95. data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
  96. data/lib/wsdl/types.rb +44 -0
  97. data/lib/wsdl/wsdl.rb +24 -0
  98. data/lib/wsdl/xmlSchema/all.rb +24 -0
  99. data/lib/wsdl/xmlSchema/annotation.rb +34 -0
  100. data/lib/wsdl/xmlSchema/any.rb +61 -0
  101. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  102. data/lib/wsdl/xmlSchema/attribute.rb +104 -0
  103. data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
  104. data/lib/wsdl/xmlSchema/choice.rb +58 -0
  105. data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
  106. data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
  107. data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
  108. data/lib/wsdl/xmlSchema/complexType.rb +193 -0
  109. data/lib/wsdl/xmlSchema/content.rb +95 -0
  110. data/lib/wsdl/xmlSchema/data.rb +116 -0
  111. data/lib/wsdl/xmlSchema/element.rb +153 -0
  112. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  113. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  114. data/lib/wsdl/xmlSchema/group.rb +100 -0
  115. data/lib/wsdl/xmlSchema/import.rb +53 -0
  116. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  117. data/lib/wsdl/xmlSchema/importer.rb +102 -0
  118. data/lib/wsdl/xmlSchema/include.rb +48 -0
  119. data/lib/wsdl/xmlSchema/length.rb +37 -0
  120. data/lib/wsdl/xmlSchema/list.rb +48 -0
  121. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  122. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  123. data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
  124. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  125. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  126. data/lib/wsdl/xmlSchema/minlength.rb +37 -0
  127. data/lib/wsdl/xmlSchema/parser.rb +167 -0
  128. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  129. data/lib/wsdl/xmlSchema/ref.rb +33 -0
  130. data/lib/wsdl/xmlSchema/schema.rb +178 -0
  131. data/lib/wsdl/xmlSchema/sequence.rb +54 -0
  132. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  133. data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
  134. data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
  135. data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
  136. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  137. data/lib/wsdl/xmlSchema/union.rb +35 -0
  138. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  139. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  140. data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
  141. data/lib/xsd/charset.rb +193 -0
  142. data/lib/xsd/codegen.rb +12 -0
  143. data/lib/xsd/codegen/classdef.rb +208 -0
  144. data/lib/xsd/codegen/commentdef.rb +34 -0
  145. data/lib/xsd/codegen/gensupport.rb +273 -0
  146. data/lib/xsd/codegen/methoddef.rb +70 -0
  147. data/lib/xsd/codegen/moduledef.rb +208 -0
  148. data/lib/xsd/datatypes.rb +1466 -0
  149. data/lib/xsd/datatypes1999.rb +20 -0
  150. data/lib/xsd/iconvcharset.rb +39 -0
  151. data/lib/xsd/mapping.rb +68 -0
  152. data/lib/xsd/namedelements.rb +132 -0
  153. data/lib/xsd/ns.rb +182 -0
  154. data/lib/xsd/qname.rb +79 -0
  155. data/lib/xsd/xmlparser.rb +76 -0
  156. data/lib/xsd/xmlparser/libxmlparser.rb +115 -0
  157. data/lib/xsd/xmlparser/parser.rb +100 -0
  158. data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
  159. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  160. data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
  161. metadata +224 -0
@@ -0,0 +1,153 @@
1
+ # WSDL4R - XMLSchema element definition.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+ require 'wsdl/xmlSchema/ref'
11
+
12
+
13
+ module WSDL
14
+ module XMLSchema
15
+
16
+
17
+ class Element < Info
18
+ include Ref
19
+
20
+ attr_writer :name # required
21
+ attr_writer :form
22
+ attr_writer :type
23
+ attr_writer :local_simpletype
24
+ attr_writer :local_complextype
25
+ attr_writer :constraint
26
+ attr_accessor :maxoccurs
27
+ attr_accessor :minoccurs
28
+ attr_writer :nillable
29
+
30
+ attr_reader_ref :name
31
+ attr_reader_ref :form
32
+ attr_reader_ref :type
33
+ attr_reader_ref :local_simpletype
34
+ attr_reader_ref :local_complextype
35
+ attr_reader_ref :constraint
36
+ attr_reader_ref :nillable
37
+ attr_reader_ref :default
38
+ attr_reader_ref :abstract
39
+
40
+ def initialize(name = nil, type = nil)
41
+ super()
42
+ @name = name
43
+ @form = nil
44
+ @type = type
45
+ @local_simpletype = @local_complextype = nil
46
+ @constraint = nil
47
+ @maxoccurs = 1
48
+ @minoccurs = 1
49
+ @nillable = nil
50
+ @default = nil
51
+ @abstract = false
52
+ @ref = nil
53
+ @refelement = nil
54
+ end
55
+
56
+ def empty?
57
+ !(local_simpletype || local_complextype || constraint || type)
58
+ end
59
+
60
+ def targetnamespace
61
+ parent.targetnamespace
62
+ end
63
+
64
+ def elementformdefault
65
+ parent.elementformdefault
66
+ end
67
+
68
+ def elementform
69
+ self.form.nil? ? parent.elementformdefault : self.form
70
+ end
71
+
72
+ def parse_element(element)
73
+ case element
74
+ when SimpleTypeName
75
+ @local_simpletype = SimpleType.new
76
+ @local_simpletype
77
+ when ComplexTypeName
78
+ @type = nil
79
+ @local_complextype = ComplexType.new
80
+ @local_complextype
81
+ when UniqueName
82
+ @constraint = Unique.new
83
+ @constraint
84
+ else
85
+ nil
86
+ end
87
+ end
88
+
89
+ def parse_attr(attr, value)
90
+ case attr
91
+ when NameAttrName
92
+ # namespace may be nil
93
+ if directelement? or elementform == 'qualified'
94
+ @name = XSD::QName.new(targetnamespace, value.source)
95
+ else
96
+ @name = XSD::QName.new(nil, value.source)
97
+ end
98
+ when FormAttrName
99
+ @form = value.source
100
+ if @form != 'qualified' and @name.namespace
101
+ @name = XSD::QName.new(nil, @name.name)
102
+ end
103
+ @form
104
+ when TypeAttrName
105
+ @type = value
106
+ when RefAttrName
107
+ @ref = value
108
+ when MaxOccursAttrName
109
+ if parent.is_a?(All)
110
+ if value.source != '1'
111
+ raise Parser::AttributeConstraintError.new(
112
+ "cannot parse #{value} for #{attr}")
113
+ end
114
+ end
115
+ if value.source == 'unbounded'
116
+ @maxoccurs = nil
117
+ else
118
+ @maxoccurs = Integer(value.source)
119
+ end
120
+ value.source
121
+ when MinOccursAttrName
122
+ if parent.is_a?(All)
123
+ unless ['0', '1'].include?(value.source)
124
+ raise Parser::AttributeConstraintError.new(
125
+ "cannot parse #{value} for #{attr}")
126
+ end
127
+ end
128
+ @minoccurs = Integer(value.source)
129
+ when NillableAttrName
130
+ @nillable = to_boolean(value)
131
+ when DefaultAttrName
132
+ @default = value.source
133
+ when AbstractAttrName
134
+ @abstract = to_boolean(value)
135
+ else
136
+ nil
137
+ end
138
+ end
139
+
140
+ private
141
+
142
+ def directelement?
143
+ parent.is_a?(Schema)
144
+ end
145
+
146
+ def refelement
147
+ @refelement ||= (@ref ? root.collect_elements[@ref] : nil)
148
+ end
149
+ end
150
+
151
+
152
+ end
153
+ end
@@ -0,0 +1,36 @@
1
+ # WSDL4R - XMLSchema enumeration definition for WSDL.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+
11
+
12
+ module WSDL
13
+ module XMLSchema
14
+
15
+
16
+ class Enumeration < Info
17
+ def initialize
18
+ super
19
+ end
20
+
21
+ def parse_element(element)
22
+ nil
23
+ end
24
+
25
+ def parse_attr(attr, value)
26
+ case attr
27
+ when ValueAttrName
28
+ parent.enumeration << value.source
29
+ value.source
30
+ end
31
+ end
32
+ end
33
+
34
+
35
+ end
36
+ end
@@ -0,0 +1,37 @@
1
+ # WSDL4R - XMLSchema fractionDigits definition for WSDL.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+
11
+
12
+ module WSDL
13
+ module XMLSchema
14
+
15
+
16
+ class FractionDigits < Info
17
+ def initialize
18
+ super
19
+ end
20
+
21
+ def parse_element(element)
22
+ nil
23
+ end
24
+
25
+ def parse_attr(attr, value)
26
+ case attr
27
+ when FixedAttrName
28
+ parent.fixed[:fractiondigits] = to_boolean(value)
29
+ when ValueAttrName
30
+ parent.fractiondigits = to_int(value)
31
+ end
32
+ end
33
+ end
34
+
35
+
36
+ end
37
+ end
@@ -0,0 +1,100 @@
1
+ # WSDL4R - XMLSchema group definition.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+ require 'wsdl/xmlSchema/ref'
11
+
12
+
13
+ module WSDL
14
+ module XMLSchema
15
+
16
+
17
+ class Group < Info
18
+ include Ref
19
+
20
+ attr_writer :name # required
21
+ attr_accessor :maxoccurs
22
+ attr_accessor :minoccurs
23
+ attr_writer :content
24
+
25
+ attr_reader_ref :name
26
+ attr_reader_ref :content
27
+
28
+ def initialize(name = nil)
29
+ super()
30
+ @name = name
31
+ @maxoccurs = 1
32
+ @minoccurs = 1
33
+ @content = nil
34
+ @ref = nil
35
+ @refelement = nil
36
+ end
37
+
38
+ def targetnamespace
39
+ parent.targetnamespace
40
+ end
41
+
42
+ def elementformdefault
43
+ parent.elementformdefault
44
+ end
45
+
46
+ def parse_element(element)
47
+ case element
48
+ when AllName
49
+ @content = All.new
50
+ when SequenceName
51
+ @content = Sequence.new
52
+ when ChoiceName
53
+ @content = Choice.new
54
+ else
55
+ nil
56
+ end
57
+ end
58
+
59
+ def parse_attr(attr, value)
60
+ case attr
61
+ when NameAttrName
62
+ @name = XSD::QName.new(targetnamespace, value.source)
63
+ when RefAttrName
64
+ @ref = value
65
+ when MaxOccursAttrName
66
+ if parent.is_a?(All)
67
+ if value.source != '1'
68
+ raise Parser::AttributeConstraintError.new(
69
+ "cannot parse #{value} for #{attr}")
70
+ end
71
+ end
72
+ if value.source == 'unbounded'
73
+ @maxoccurs = nil
74
+ else
75
+ @maxoccurs = Integer(value.source)
76
+ end
77
+ value.source
78
+ when MinOccursAttrName
79
+ if parent.is_a?(All)
80
+ unless ['0', '1'].include?(value.source)
81
+ raise Parser::AttributeConstraintError.new(
82
+ "cannot parse #{value} for #{attr}")
83
+ end
84
+ end
85
+ @minoccurs = Integer(value.source)
86
+ else
87
+ nil
88
+ end
89
+ end
90
+
91
+ private
92
+
93
+ def refelement
94
+ @refelement ||= (@ref ? root.collect_modelgroups[@ref] : nil)
95
+ end
96
+ end
97
+
98
+
99
+ end
100
+ end
@@ -0,0 +1,53 @@
1
+ # WSDL4R - XMLSchema import definition.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+ require 'wsdl/xmlSchema/importer'
11
+ require 'wsdl/xmlSchema/importHandler'
12
+
13
+
14
+ module WSDL
15
+ module XMLSchema
16
+
17
+
18
+ class Import < Info
19
+ attr_reader :namespace
20
+
21
+ def initialize
22
+ super
23
+ @namespace = nil
24
+ @handler = ImportHandler.new
25
+ end
26
+
27
+ def schemalocation
28
+ @handler.schemalocation
29
+ end
30
+
31
+ def content
32
+ @handler.content
33
+ end
34
+
35
+ def parse_element(element)
36
+ nil
37
+ end
38
+
39
+ def parse_attr(attr, value)
40
+ case attr
41
+ when NamespaceAttrName
42
+ @namespace = value.source
43
+ when SchemaLocationAttrName
44
+ @handler.parse_schemalocation(value.source, root, parent)
45
+ else
46
+ nil
47
+ end
48
+ end
49
+ end
50
+
51
+
52
+ end
53
+ end
@@ -0,0 +1,45 @@
1
+ # WSDL4R - XMLSchema import handler.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'wsdl/info'
10
+ require 'wsdl/xmlSchema/importer'
11
+
12
+
13
+ module WSDL
14
+ module XMLSchema
15
+
16
+
17
+ class ImportHandler
18
+ attr_reader :schemalocation
19
+ attr_reader :content
20
+
21
+ def initialize
22
+ @schemalocation = nil
23
+ @content = nil
24
+ end
25
+
26
+ def parse_schemalocation(location, root, parent)
27
+ @schemalocation = URI.parse(location)
28
+ if @schemalocation.relative? and !parent.location.nil? and
29
+ !parent.location.relative?
30
+ @schemalocation = parent.location + @schemalocation
31
+ end
32
+ if root.importedschema.key?(@schemalocation)
33
+ @content = root.importedschema[@schemalocation]
34
+ else
35
+ root.importedschema[@schemalocation] = nil # placeholder
36
+ @content = Importer.import(@schemalocation, root)
37
+ root.importedschema[@schemalocation] = @content
38
+ end
39
+ @schemalocation
40
+ end
41
+ end
42
+
43
+
44
+ end
45
+ end
@@ -0,0 +1,102 @@
1
+ # WSDL4R - XSD importer library.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'soap/soap'
10
+ require 'soap/httpconfigloader'
11
+ require 'wsdl/xmlSchema/parser'
12
+
13
+
14
+ module WSDL
15
+ module XMLSchema
16
+
17
+
18
+ class Importer
19
+ DO_NOT_IMPORT = [::SOAP::EncodingNamespace]
20
+
21
+ def self.import(location, originalroot = nil)
22
+ new.import(location, originalroot)
23
+ end
24
+
25
+ def initialize
26
+ @web_client = nil
27
+ end
28
+
29
+ def import(location, originalroot = nil)
30
+ if DO_NOT_IMPORT.include?(location.to_s)
31
+ return nil
32
+ end
33
+ unless location.is_a?(URI)
34
+ location = URI.parse(location)
35
+ end
36
+ source, normalizedlocation = fetch(location)
37
+ content = parse(source, normalizedlocation, originalroot)
38
+ content.location = normalizedlocation
39
+ content
40
+ end
41
+
42
+ private
43
+
44
+ def parse(content, location, originalroot)
45
+ opt = {
46
+ :location => location,
47
+ :originalroot => originalroot
48
+ }
49
+ WSDL::XMLSchema::Parser.new(opt).parse(content)
50
+ end
51
+
52
+ def fetch(location)
53
+ warn("importing: #{location}") if $DEBUG
54
+ content = nil
55
+ normalizedlocation = location
56
+ if location.scheme == 'file' or
57
+ (location.relative? and FileTest.exist?(location.path))
58
+ content = File.open(location.path).read
59
+ normalizedlocation = URI.parse('file://' + File.expand_path(location.path))
60
+ elsif location.scheme and location.scheme.size == 1 and
61
+ FileTest.exist?(location.to_s)
62
+ # ToDo: remove this ugly workaround for a path with drive letter
63
+ # (D://foo/bar)
64
+ content = File.open(location.to_s).read
65
+ else
66
+ client = web_client.new(nil, "WSDL4R")
67
+ client.proxy = ::SOAP::Env::HTTP_PROXY
68
+ client.no_proxy = ::SOAP::Env::NO_PROXY
69
+ if opt = ::SOAP::Property.loadproperty(::SOAP::PropertyName)
70
+ http_opt = opt["client.protocol.http"]
71
+ ::SOAP::HTTPConfigLoader.set_options(client, http_opt) if http_opt
72
+ end
73
+ content = client.get_content(location)
74
+ end
75
+ return content, normalizedlocation
76
+ end
77
+
78
+ def web_client
79
+ return @web_client if @web_client
80
+ begin
81
+ require 'httpclient'
82
+ @web_client = HTTPClient
83
+ rescue LoadError
84
+ begin
85
+ require 'http-access2'
86
+ if HTTPAccess2::VERSION < "2.0"
87
+ raise LoadError.new("http-access/2.0 or later is required.")
88
+ end
89
+ @web_client = HTTPAccess2::Client
90
+ rescue LoadError
91
+ warn("Loading http-access2 failed. Net/http is used.") if $DEBUG
92
+ require 'soap/netHttpClient'
93
+ @web_client = ::SOAP::NetHttpClient
94
+ end
95
+ end
96
+ @web_client
97
+ end
98
+ end
99
+
100
+
101
+ end
102
+ end