reidiculous-actionwebservice-client 3.0.4

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 (179) hide show
  1. data/CHANGELOG +320 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +381 -0
  4. data/Rakefile +180 -0
  5. data/TODO +32 -0
  6. data/lib/action_web_service.rb +71 -0
  7. data/lib/action_web_service/api.rb +297 -0
  8. data/lib/action_web_service/base.rb +38 -0
  9. data/lib/action_web_service/casting.rb +149 -0
  10. data/lib/action_web_service/client.rb +3 -0
  11. data/lib/action_web_service/client/base.rb +28 -0
  12. data/lib/action_web_service/client/soap_client.rb +113 -0
  13. data/lib/action_web_service/client/xmlrpc_client.rb +58 -0
  14. data/lib/action_web_service/container.rb +3 -0
  15. data/lib/action_web_service/container/action_controller_container.rb +93 -0
  16. data/lib/action_web_service/container/delegated_container.rb +86 -0
  17. data/lib/action_web_service/container/direct_container.rb +69 -0
  18. data/lib/action_web_service/dispatcher.rb +2 -0
  19. data/lib/action_web_service/dispatcher/abstract.rb +207 -0
  20. data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +379 -0
  21. data/lib/action_web_service/invocation.rb +202 -0
  22. data/lib/action_web_service/protocol.rb +4 -0
  23. data/lib/action_web_service/protocol/abstract.rb +115 -0
  24. data/lib/action_web_service/protocol/discovery.rb +37 -0
  25. data/lib/action_web_service/protocol/soap_protocol.rb +176 -0
  26. data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +242 -0
  27. data/lib/action_web_service/protocol/xmlrpc_protocol.rb +122 -0
  28. data/lib/action_web_service/scaffolding.rb +281 -0
  29. data/lib/action_web_service/soap/attachment.rb +107 -0
  30. data/lib/action_web_service/soap/baseData.rb +942 -0
  31. data/lib/action_web_service/soap/element.rb +258 -0
  32. data/lib/action_web_service/soap/encodingstyle/aspDotNetHandler.rb +213 -0
  33. data/lib/action_web_service/soap/encodingstyle/handler.rb +100 -0
  34. data/lib/action_web_service/soap/encodingstyle/literalHandler.rb +226 -0
  35. data/lib/action_web_service/soap/encodingstyle/soapHandler.rb +582 -0
  36. data/lib/action_web_service/soap/generator.rb +268 -0
  37. data/lib/action_web_service/soap/header/handler.rb +57 -0
  38. data/lib/action_web_service/soap/header/handlerset.rb +70 -0
  39. data/lib/action_web_service/soap/header/simplehandler.rb +44 -0
  40. data/lib/action_web_service/soap/httpconfigloader.rb +119 -0
  41. data/lib/action_web_service/soap/mapping.rb +10 -0
  42. data/lib/action_web_service/soap/mapping/factory.rb +355 -0
  43. data/lib/action_web_service/soap/mapping/mapping.rb +381 -0
  44. data/lib/action_web_service/soap/mapping/registry.rb +541 -0
  45. data/lib/action_web_service/soap/mapping/rubytypeFactory.rb +475 -0
  46. data/lib/action_web_service/soap/mapping/typeMap.rb +50 -0
  47. data/lib/action_web_service/soap/mapping/wsdlencodedregistry.rb +280 -0
  48. data/lib/action_web_service/soap/mapping/wsdlliteralregistry.rb +418 -0
  49. data/lib/action_web_service/soap/marshal.rb +59 -0
  50. data/lib/action_web_service/soap/mimemessage.rb +240 -0
  51. data/lib/action_web_service/soap/netHttpClient.rb +190 -0
  52. data/lib/action_web_service/soap/parser.rb +251 -0
  53. data/lib/action_web_service/soap/processor.rb +66 -0
  54. data/lib/action_web_service/soap/property.rb +333 -0
  55. data/lib/action_web_service/soap/rpc/cgistub.rb +206 -0
  56. data/lib/action_web_service/soap/rpc/driver.rb +254 -0
  57. data/lib/action_web_service/soap/rpc/element.rb +325 -0
  58. data/lib/action_web_service/soap/rpc/httpserver.rb +129 -0
  59. data/lib/action_web_service/soap/rpc/proxy.rb +497 -0
  60. data/lib/action_web_service/soap/rpc/router.rb +594 -0
  61. data/lib/action_web_service/soap/rpc/rpc.rb +25 -0
  62. data/lib/action_web_service/soap/rpc/soaplet.rb +162 -0
  63. data/lib/action_web_service/soap/rpc/standaloneServer.rb +43 -0
  64. data/lib/action_web_service/soap/soap.rb +140 -0
  65. data/lib/action_web_service/soap/streamHandler.rb +229 -0
  66. data/lib/action_web_service/soap/wsdlDriver.rb +575 -0
  67. data/lib/action_web_service/struct.rb +64 -0
  68. data/lib/action_web_service/support/class_inheritable_options.rb +28 -0
  69. data/lib/action_web_service/support/signature_types.rb +227 -0
  70. data/lib/action_web_service/test_invoke.rb +110 -0
  71. data/lib/action_web_service/version.rb +9 -0
  72. data/lib/action_web_service/wsdl/binding.rb +65 -0
  73. data/lib/action_web_service/wsdl/data.rb +64 -0
  74. data/lib/action_web_service/wsdl/definitions.rb +250 -0
  75. data/lib/action_web_service/wsdl/documentation.rb +32 -0
  76. data/lib/action_web_service/wsdl/import.rb +80 -0
  77. data/lib/action_web_service/wsdl/importer.rb +38 -0
  78. data/lib/action_web_service/wsdl/info.rb +39 -0
  79. data/lib/action_web_service/wsdl/message.rb +54 -0
  80. data/lib/action_web_service/wsdl/operation.rb +130 -0
  81. data/lib/action_web_service/wsdl/operationBinding.rb +108 -0
  82. data/lib/action_web_service/wsdl/param.rb +85 -0
  83. data/lib/action_web_service/wsdl/parser.rb +163 -0
  84. data/lib/action_web_service/wsdl/part.rb +52 -0
  85. data/lib/action_web_service/wsdl/port.rb +84 -0
  86. data/lib/action_web_service/wsdl/portType.rb +73 -0
  87. data/lib/action_web_service/wsdl/service.rb +61 -0
  88. data/lib/action_web_service/wsdl/soap/address.rb +40 -0
  89. data/lib/action_web_service/wsdl/soap/binding.rb +49 -0
  90. data/lib/action_web_service/wsdl/soap/body.rb +56 -0
  91. data/lib/action_web_service/wsdl/soap/cgiStubCreator.rb +76 -0
  92. data/lib/action_web_service/wsdl/soap/classDefCreator.rb +314 -0
  93. data/lib/action_web_service/wsdl/soap/classDefCreatorSupport.rb +126 -0
  94. data/lib/action_web_service/wsdl/soap/clientSkeltonCreator.rb +78 -0
  95. data/lib/action_web_service/wsdl/soap/complexType.rb +161 -0
  96. data/lib/action_web_service/wsdl/soap/data.rb +42 -0
  97. data/lib/action_web_service/wsdl/soap/definitions.rb +149 -0
  98. data/lib/action_web_service/wsdl/soap/driverCreator.rb +95 -0
  99. data/lib/action_web_service/wsdl/soap/element.rb +28 -0
  100. data/lib/action_web_service/wsdl/soap/fault.rb +56 -0
  101. data/lib/action_web_service/wsdl/soap/header.rb +86 -0
  102. data/lib/action_web_service/wsdl/soap/headerfault.rb +56 -0
  103. data/lib/action_web_service/wsdl/soap/mappingRegistryCreator.rb +92 -0
  104. data/lib/action_web_service/wsdl/soap/methodDefCreator.rb +228 -0
  105. data/lib/action_web_service/wsdl/soap/operation.rb +122 -0
  106. data/lib/action_web_service/wsdl/soap/servantSkeltonCreator.rb +67 -0
  107. data/lib/action_web_service/wsdl/soap/standaloneServerStubCreator.rb +85 -0
  108. data/lib/action_web_service/wsdl/soap/wsdl2ruby.rb +176 -0
  109. data/lib/action_web_service/wsdl/types.rb +43 -0
  110. data/lib/action_web_service/wsdl/wsdl.rb +23 -0
  111. data/lib/action_web_service/wsdl/xmlSchema/all.rb +69 -0
  112. data/lib/action_web_service/wsdl/xmlSchema/annotation.rb +34 -0
  113. data/lib/action_web_service/wsdl/xmlSchema/any.rb +56 -0
  114. data/lib/action_web_service/wsdl/xmlSchema/attribute.rb +127 -0
  115. data/lib/action_web_service/wsdl/xmlSchema/choice.rb +69 -0
  116. data/lib/action_web_service/wsdl/xmlSchema/complexContent.rb +92 -0
  117. data/lib/action_web_service/wsdl/xmlSchema/complexType.rb +139 -0
  118. data/lib/action_web_service/wsdl/xmlSchema/content.rb +96 -0
  119. data/lib/action_web_service/wsdl/xmlSchema/data.rb +80 -0
  120. data/lib/action_web_service/wsdl/xmlSchema/element.rb +154 -0
  121. data/lib/action_web_service/wsdl/xmlSchema/enumeration.rb +36 -0
  122. data/lib/action_web_service/wsdl/xmlSchema/import.rb +65 -0
  123. data/lib/action_web_service/wsdl/xmlSchema/importer.rb +87 -0
  124. data/lib/action_web_service/wsdl/xmlSchema/include.rb +54 -0
  125. data/lib/action_web_service/wsdl/xmlSchema/length.rb +35 -0
  126. data/lib/action_web_service/wsdl/xmlSchema/parser.rb +166 -0
  127. data/lib/action_web_service/wsdl/xmlSchema/pattern.rb +36 -0
  128. data/lib/action_web_service/wsdl/xmlSchema/schema.rb +143 -0
  129. data/lib/action_web_service/wsdl/xmlSchema/sequence.rb +69 -0
  130. data/lib/action_web_service/wsdl/xmlSchema/simpleContent.rb +65 -0
  131. data/lib/action_web_service/wsdl/xmlSchema/simpleExtension.rb +54 -0
  132. data/lib/action_web_service/wsdl/xmlSchema/simpleRestriction.rb +73 -0
  133. data/lib/action_web_service/wsdl/xmlSchema/simpleType.rb +73 -0
  134. data/lib/action_web_service/wsdl/xmlSchema/unique.rb +34 -0
  135. data/lib/action_web_service/wsdl/xmlSchema/xsd2ruby.rb +107 -0
  136. data/lib/action_web_service/xsd/charset.rb +187 -0
  137. data/lib/action_web_service/xsd/codegen.rb +12 -0
  138. data/lib/action_web_service/xsd/codegen/classdef.rb +203 -0
  139. data/lib/action_web_service/xsd/codegen/commentdef.rb +34 -0
  140. data/lib/action_web_service/xsd/codegen/gensupport.rb +166 -0
  141. data/lib/action_web_service/xsd/codegen/methoddef.rb +63 -0
  142. data/lib/action_web_service/xsd/codegen/moduledef.rb +191 -0
  143. data/lib/action_web_service/xsd/datatypes.rb +1269 -0
  144. data/lib/action_web_service/xsd/datatypes1999.rb +20 -0
  145. data/lib/action_web_service/xsd/iconvcharset.rb +33 -0
  146. data/lib/action_web_service/xsd/mapping.rb +42 -0
  147. data/lib/action_web_service/xsd/namedelements.rb +95 -0
  148. data/lib/action_web_service/xsd/ns.rb +140 -0
  149. data/lib/action_web_service/xsd/qname.rb +78 -0
  150. data/lib/action_web_service/xsd/xmlparser.rb +61 -0
  151. data/lib/action_web_service/xsd/xmlparser/parser.rb +96 -0
  152. data/lib/action_web_service/xsd/xmlparser/rexmlparser.rb +54 -0
  153. data/lib/action_web_service/xsd/xmlparser/xmlparser.rb +50 -0
  154. data/lib/action_web_service/xsd/xmlparser/xmlscanner.rb +147 -0
  155. data/lib/actionwebservice.rb +1 -0
  156. data/setup.rb +1379 -0
  157. data/test/abstract_client.rb +183 -0
  158. data/test/abstract_dispatcher.rb +548 -0
  159. data/test/abstract_unit.rb +45 -0
  160. data/test/api_test.rb +103 -0
  161. data/test/apis/auto_load_api.rb +3 -0
  162. data/test/apis/broken_auto_load_api.rb +2 -0
  163. data/test/base_test.rb +42 -0
  164. data/test/casting_test.rb +95 -0
  165. data/test/client_soap_test.rb +156 -0
  166. data/test/client_xmlrpc_test.rb +153 -0
  167. data/test/container_test.rb +73 -0
  168. data/test/dispatcher_action_controller_soap_test.rb +139 -0
  169. data/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
  170. data/test/fixtures/db_definitions/mysql.sql +8 -0
  171. data/test/fixtures/db_definitions/sqlite3.sql +8 -0
  172. data/test/fixtures/users.yml +12 -0
  173. data/test/gencov +3 -0
  174. data/test/invocation_test.rb +185 -0
  175. data/test/run +6 -0
  176. data/test/scaffolded_controller_test.rb +146 -0
  177. data/test/struct_test.rb +52 -0
  178. data/test/test_invoke_test.rb +112 -0
  179. metadata +265 -0
@@ -0,0 +1,39 @@
1
+ # WSDL4R - WSDL information base.
2
+ # Copyright (C) 2002, 2003 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
+ module WSDL
10
+
11
+
12
+ class Info
13
+ attr_accessor :root
14
+ attr_accessor :parent
15
+ attr_accessor :id
16
+
17
+ def initialize
18
+ @root = nil
19
+ @parent = nil
20
+ @id = nil
21
+ end
22
+
23
+ def inspect
24
+ if self.respond_to?(:name)
25
+ sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.name)
26
+ else
27
+ sprintf("#<%s:0x%x>", self.class.name, __id__)
28
+ end
29
+ end
30
+
31
+ def parse_element(element); end # abstract
32
+
33
+ def parse_attr(attr, value); end # abstract
34
+
35
+ def parse_epilogue; end # abstract
36
+ end
37
+
38
+
39
+ end
@@ -0,0 +1,54 @@
1
+ # WSDL4R - WSDL message definition.
2
+ # Copyright (C) 2002, 2003 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 'action_web_service/wsdl/info'
10
+
11
+
12
+ module WSDL
13
+
14
+
15
+ class Message < Info
16
+ attr_reader :name # required
17
+ attr_reader :parts
18
+
19
+ def initialize
20
+ super
21
+ @name = nil
22
+ @parts = []
23
+ end
24
+
25
+ def targetnamespace
26
+ parent.targetnamespace
27
+ end
28
+
29
+ def parse_element(element)
30
+ case element
31
+ when PartName
32
+ o = Part.new
33
+ @parts << o
34
+ o
35
+ when DocumentationName
36
+ o = Documentation.new
37
+ o
38
+ else
39
+ nil
40
+ end
41
+ end
42
+
43
+ def parse_attr(attr, value)
44
+ case attr
45
+ when NameAttrName
46
+ @name = XSD::QName.new(parent.targetnamespace, value.source)
47
+ else
48
+ nil
49
+ end
50
+ end
51
+ end
52
+
53
+
54
+ end
@@ -0,0 +1,130 @@
1
+ # WSDL4R - WSDL operation definition.
2
+ # Copyright (C) 2002, 2003 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 'action_web_service/wsdl/info'
10
+
11
+
12
+ module WSDL
13
+
14
+
15
+ class Operation < Info
16
+ class NameInfo
17
+ attr_reader :op_name
18
+ attr_reader :optype_name
19
+ attr_reader :parts
20
+ def initialize(op_name, optype_name, parts)
21
+ @op_name = op_name
22
+ @optype_name = optype_name
23
+ @parts = parts
24
+ end
25
+ end
26
+
27
+ attr_reader :name # required
28
+ attr_reader :parameter_order # optional
29
+ attr_reader :input
30
+ attr_reader :output
31
+ attr_reader :fault
32
+ attr_reader :type # required
33
+
34
+ def initialize
35
+ super
36
+ @name = nil
37
+ @type = nil
38
+ @parameter_order = nil
39
+ @input = nil
40
+ @output = nil
41
+ @fault = []
42
+ end
43
+
44
+ def targetnamespace
45
+ parent.targetnamespace
46
+ end
47
+
48
+ def input_info
49
+ typename = input.find_message.name
50
+ NameInfo.new(@name, typename, inputparts)
51
+ end
52
+
53
+ def output_info
54
+ typename = output.find_message.name
55
+ NameInfo.new(@name, typename, outputparts)
56
+ end
57
+
58
+ def inputparts
59
+ sort_parts(input.find_message.parts)
60
+ end
61
+
62
+ def inputname
63
+ XSD::QName.new(targetnamespace, input.name ? input.name.name : @name.name)
64
+ end
65
+
66
+ def outputparts
67
+ sort_parts(output.find_message.parts)
68
+ end
69
+
70
+ def outputname
71
+ XSD::QName.new(targetnamespace,
72
+ output.name ? output.name.name : @name.name + 'Response')
73
+ end
74
+
75
+ def parse_element(element)
76
+ case element
77
+ when InputName
78
+ o = Param.new
79
+ @input = o
80
+ o
81
+ when OutputName
82
+ o = Param.new
83
+ @output = o
84
+ o
85
+ when FaultName
86
+ o = Param.new
87
+ @fault << o
88
+ o
89
+ when DocumentationName
90
+ o = Documentation.new
91
+ o
92
+ else
93
+ nil
94
+ end
95
+ end
96
+
97
+ def parse_attr(attr, value)
98
+ case attr
99
+ when NameAttrName
100
+ @name = XSD::QName.new(targetnamespace, value.source)
101
+ when TypeAttrName
102
+ @type = value
103
+ when ParameterOrderAttrName
104
+ @parameter_order = value.source.split(/\s+/)
105
+ else
106
+ nil
107
+ end
108
+ end
109
+
110
+ private
111
+
112
+ def sort_parts(parts)
113
+ return parts.dup unless parameter_order
114
+ result = []
115
+ parameter_order.each do |orderitem|
116
+ if (ele = parts.find { |part| part.name == orderitem })
117
+ result << ele
118
+ end
119
+ end
120
+ if result.length == 0
121
+ return parts.dup
122
+ end
123
+ # result length can be shorter than parts's.
124
+ # return part must not be a part of the parameterOrder.
125
+ result
126
+ end
127
+ end
128
+
129
+
130
+ end
@@ -0,0 +1,108 @@
1
+ # WSDL4R - WSDL bound operation definition.
2
+ # Copyright (C) 2002, 2003 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 'action_web_service/wsdl/info'
10
+
11
+
12
+ module WSDL
13
+
14
+
15
+ class OperationBinding < Info
16
+ attr_reader :name # required
17
+ attr_reader :input
18
+ attr_reader :output
19
+ attr_reader :fault
20
+ attr_reader :soapoperation
21
+
22
+ def initialize
23
+ super
24
+ @name = nil
25
+ @input = nil
26
+ @output = nil
27
+ @fault = []
28
+ @soapoperation = nil
29
+ end
30
+
31
+ def targetnamespace
32
+ parent.targetnamespace
33
+ end
34
+
35
+ def porttype
36
+ root.porttype(parent.type)
37
+ end
38
+
39
+ def find_operation
40
+ porttype.operations[@name] or raise RuntimeError.new("#{@name} not found")
41
+ end
42
+
43
+ def soapoperation_name
44
+ if @soapoperation
45
+ @soapoperation.input_info.op_name
46
+ else
47
+ find_operation.name
48
+ end
49
+ end
50
+
51
+ def soapoperation_style
52
+ style = nil
53
+ if @soapoperation
54
+ style = @soapoperation.operation_style
55
+ elsif parent.soapbinding
56
+ style = parent.soapbinding.style
57
+ else
58
+ raise TypeError.new("operation style definition not found")
59
+ end
60
+ style || :document
61
+ end
62
+
63
+ def soapaction
64
+ if @soapoperation
65
+ @soapoperation.soapaction
66
+ else
67
+ nil
68
+ end
69
+ end
70
+
71
+ def parse_element(element)
72
+ case element
73
+ when InputName
74
+ o = Param.new
75
+ @input = o
76
+ o
77
+ when OutputName
78
+ o = Param.new
79
+ @output = o
80
+ o
81
+ when FaultName
82
+ o = Param.new
83
+ @fault << o
84
+ o
85
+ when SOAPOperationName
86
+ o = WSDL::SOAP::Operation.new
87
+ @soapoperation = o
88
+ o
89
+ when DocumentationName
90
+ o = Documentation.new
91
+ o
92
+ else
93
+ nil
94
+ end
95
+ end
96
+
97
+ def parse_attr(attr, value)
98
+ case attr
99
+ when NameAttrName
100
+ @name = XSD::QName.new(targetnamespace, value.source)
101
+ else
102
+ nil
103
+ end
104
+ end
105
+ end
106
+
107
+
108
+ end
@@ -0,0 +1,85 @@
1
+ # WSDL4R - WSDL param definition.
2
+ # Copyright (C) 2002, 2003 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 'action_web_service/wsdl/info'
10
+
11
+
12
+ module WSDL
13
+
14
+
15
+ class Param < Info
16
+ attr_reader :message # required
17
+ attr_reader :name # optional but required for fault.
18
+ attr_reader :soapbody
19
+ attr_reader :soapheader
20
+ attr_reader :soapfault
21
+
22
+ def initialize
23
+ super
24
+ @message = nil
25
+ @name = nil
26
+ @soapbody = nil
27
+ @soapheader = []
28
+ @soapfault = nil
29
+ end
30
+
31
+ def targetnamespace
32
+ parent.targetnamespace
33
+ end
34
+
35
+ def find_message
36
+ root.message(@message) or raise RuntimeError.new("#{@message} not found")
37
+ end
38
+
39
+ def soapbody_use
40
+ if @soapbody
41
+ @soapbody.use || :literal
42
+ else
43
+ raise RuntimeError.new("soap:body not found")
44
+ end
45
+ end
46
+
47
+ def parse_element(element)
48
+ case element
49
+ when SOAPBodyName
50
+ o = WSDL::SOAP::Body.new
51
+ @soapbody = o
52
+ o
53
+ when SOAPHeaderName
54
+ o = WSDL::SOAP::Header.new
55
+ @soapheader << o
56
+ o
57
+ when SOAPFaultName
58
+ o = WSDL::SOAP::Fault.new
59
+ @soap_fault = o
60
+ o
61
+ when DocumentationName
62
+ o = Documentation.new
63
+ o
64
+ else
65
+ nil
66
+ end
67
+ end
68
+
69
+ def parse_attr(attr, value)
70
+ case attr
71
+ when MessageAttrName
72
+ if value.namespace.nil?
73
+ value = XSD::QName.new(targetnamespace, value.source)
74
+ end
75
+ @message = value
76
+ when NameAttrName
77
+ @name = XSD::QName.new(targetnamespace, value.source)
78
+ else
79
+ nil
80
+ end
81
+ end
82
+ end
83
+
84
+
85
+ end
@@ -0,0 +1,163 @@
1
+ # WSDL4R - WSDL XML Instance parser library.
2
+ # Copyright (C) 2002, 2003, 2005 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 'action_web_service/xsd/qname'
10
+ require 'action_web_service/xsd/ns'
11
+ require 'action_web_service/xsd/charset'
12
+ require 'action_web_service/xsd/datatypes'
13
+ require 'action_web_service/xsd/xmlparser'
14
+ require 'action_web_service/wsdl/wsdl'
15
+ require 'action_web_service/wsdl/data'
16
+ require 'action_web_service/wsdl/xmlSchema/data'
17
+ require 'action_web_service/wsdl/soap/data'
18
+
19
+
20
+ module WSDL
21
+
22
+
23
+ class Parser
24
+ include WSDL
25
+
26
+ class ParseError < Error; end
27
+ class FormatDecodeError < ParseError; end
28
+ class UnknownElementError < FormatDecodeError; end
29
+ class UnknownAttributeError < FormatDecodeError; end
30
+ class UnexpectedElementError < FormatDecodeError; end
31
+ class ElementConstraintError < FormatDecodeError; end
32
+ class AttributeConstraintError < FormatDecodeError; end
33
+
34
+ private
35
+
36
+ class ParseFrame
37
+ attr_reader :ns
38
+ attr_reader :name
39
+ attr_accessor :node
40
+
41
+ private
42
+
43
+ def initialize(ns, name, node)
44
+ @ns = ns
45
+ @name = name
46
+ @node = node
47
+ end
48
+ end
49
+
50
+ public
51
+
52
+ def initialize(opt = {})
53
+ @parser = XSD::XMLParser.create_parser(self, opt)
54
+ @parsestack = nil
55
+ @lastnode = nil
56
+ @ignored = {}
57
+ @location = opt[:location]
58
+ @originalroot = opt[:originalroot]
59
+ end
60
+
61
+ def parse(string_or_readable)
62
+ @parsestack = []
63
+ @lastnode = nil
64
+ @textbuf = ''
65
+ @parser.do_parse(string_or_readable)
66
+ @lastnode
67
+ end
68
+
69
+ def charset
70
+ @parser.charset
71
+ end
72
+
73
+ def start_element(name, attrs)
74
+ lastframe = @parsestack.last
75
+ ns = parent = nil
76
+ if lastframe
77
+ ns = lastframe.ns.clone_ns
78
+ parent = lastframe.node
79
+ else
80
+ ns = XSD::NS.new
81
+ parent = nil
82
+ end
83
+ attrs = XSD::XMLParser.filter_ns(ns, attrs)
84
+ node = decode_tag(ns, name, attrs, parent)
85
+ @parsestack << ParseFrame.new(ns, name, node)
86
+ end
87
+
88
+ def characters(text)
89
+ lastframe = @parsestack.last
90
+ if lastframe
91
+ # Need not to be cloned because character does not have attr.
92
+ ns = lastframe.ns
93
+ decode_text(ns, text)
94
+ else
95
+ p text if $DEBUG
96
+ end
97
+ end
98
+
99
+ def end_element(name)
100
+ lastframe = @parsestack.pop
101
+ unless name == lastframe.name
102
+ raise UnexpectedElementError.new("closing element name '#{name}' does not match with opening element '#{lastframe.name}'")
103
+ end
104
+ decode_tag_end(lastframe.ns, lastframe.node)
105
+ @lastnode = lastframe.node
106
+ end
107
+
108
+ private
109
+
110
+ def decode_tag(ns, name, attrs, parent)
111
+ o = nil
112
+ elename = ns.parse(name)
113
+ if !parent
114
+ if elename == DefinitionsName
115
+ o = Definitions.parse_element(elename)
116
+ o.location = @location
117
+ else
118
+ raise UnknownElementError.new("unknown element: #{elename}")
119
+ end
120
+ o.root = @originalroot if @originalroot # o.root = o otherwise
121
+ else
122
+ if elename == XMLSchema::AnnotationName
123
+ # only the first annotation element is allowed for each xsd element.
124
+ o = XMLSchema::Annotation.new
125
+ else
126
+ o = parent.parse_element(elename)
127
+ end
128
+ unless o
129
+ unless @ignored.key?(elename)
130
+ warn("ignored element: #{elename}")
131
+ @ignored[elename] = elename
132
+ end
133
+ o = Documentation.new # which accepts any element.
134
+ end
135
+ # node could be a pseudo element. pseudo element has its own parent.
136
+ o.root = parent.root
137
+ o.parent = parent if o.parent.nil?
138
+ end
139
+ attrs.each do |key, value|
140
+ attr_ele = ns.parse(key, true)
141
+ value_ele = ns.parse(value, true)
142
+ value_ele.source = value # for recovery; value may not be a QName
143
+ unless o.parse_attr(attr_ele, value_ele)
144
+ unless @ignored.key?(attr_ele)
145
+ warn("ignored attr: #{attr_ele}")
146
+ @ignored[attr_ele] = attr_ele
147
+ end
148
+ end
149
+ end
150
+ o
151
+ end
152
+
153
+ def decode_tag_end(ns, node)
154
+ node.parse_epilogue
155
+ end
156
+
157
+ def decode_text(ns, text)
158
+ @textbuf << text
159
+ end
160
+ end
161
+
162
+
163
+ end