Changeset 1580
- Timestamp:
- 07/18/05 14:54:19 (3 years ago)
- Files:
-
- trunk/lib/soap/baseData.rb (modified) (1 diff)
- trunk/lib/soap/element.rb (modified) (5 diffs)
- trunk/lib/soap/encodingstyle/aspDotNetHandler.rb (modified) (5 diffs)
- trunk/lib/soap/encodingstyle/handler.rb (modified) (1 diff)
- trunk/lib/soap/encodingstyle/literalHandler.rb (modified) (6 diffs)
- trunk/lib/soap/encodingstyle/soapHandler.rb (modified) (4 diffs)
- trunk/lib/soap/generator.rb (modified) (8 diffs)
- trunk/lib/soap/mapping/mapping.rb (modified) (2 diffs)
- trunk/lib/soap/mapping/wsdlencodedregistry.rb (modified) (1 diff)
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (8 diffs)
- trunk/lib/soap/rpc/proxy.rb (modified) (8 diffs)
- trunk/lib/soap/streamHandler.rb (modified) (1 diff)
- trunk/lib/soap/wsdlDriver.rb (modified) (2 diffs)
- trunk/lib/wsdl/soap/classDefCreator.rb (modified) (3 diffs)
- trunk/lib/wsdl/soap/methodDefCreator.rb (modified) (6 diffs)
- trunk/lib/wsdl/xmlSchema/all.rb (modified) (1 diff)
- trunk/lib/wsdl/xmlSchema/choice.rb (modified) (1 diff)
- trunk/lib/wsdl/xmlSchema/complexType.rb (modified) (1 diff)
- trunk/lib/wsdl/xmlSchema/element.rb (modified) (5 diffs)
- trunk/lib/wsdl/xmlSchema/schema.rb (modified) (2 diffs)
- trunk/lib/wsdl/xmlSchema/sequence.rb (modified) (1 diff)
- trunk/test/soap/test_soapelement.rb (modified) (2 diffs)
- trunk/test/wsdl/qualified (added)
- trunk/test/wsdl/qualified/lp.wsdl (added)
- trunk/test/wsdl/qualified/lp.xsd (added)
- trunk/test/wsdl/qualified/test_qualified.rb (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/baseData.rb
r1540 r1580 530 530 @extraattr = {} 531 531 532 @qualified = false532 @qualified = nil 533 533 534 534 @array = [] trunk/lib/soap/element.rb
r1570 r1580 84 84 name = ns.name(@elename) 85 85 generator.encode_tag(name, attrs) 86 yield(self.faultcode , false)87 yield(self.faultstring , false)88 yield(self.faultactor , false)89 yield(self.detail , false) if self.detail86 yield(self.faultcode) 87 yield(self.faultstring) 88 yield(self.faultactor) 89 yield(self.detail) if self.detail 90 90 generator.encode_tag_end(name, true) 91 91 end … … 116 116 generator.encode_tag(name, attrs) 117 117 if @is_fault 118 yield(@data , true)118 yield(@data) 119 119 else 120 120 @data.each do |data| 121 yield(data , true)121 yield(data) 122 122 end 123 123 end … … 172 172 end 173 173 @element.encodingstyle = @encodingstyle if !@element.encodingstyle 174 yield(@element , true)174 yield(@element) 175 175 end 176 176 end … … 190 190 generator.encode_tag(name, attrs) 191 191 @data.each do |data| 192 yield(data , true)192 yield(data) 193 193 end 194 194 generator.encode_tag_end(name, true) … … 244 244 generator.encode_tag(name, attrs) 245 245 246 yield(@header , true) if @header and @header.length > 0247 yield(@body , true)246 yield(@header) if @header and @header.length > 0 247 yield(@body) 248 248 249 249 generator.encode_tag_end(name, true) trunk/lib/soap/encodingstyle/aspDotNetHandler.rb
r1520 r1580 28 28 ## encode interface. 29 29 # 30 def encode_data(generator, ns, qualified,data, parent)30 def encode_data(generator, ns, data, parent) 31 31 attrs = {} 32 name = if qualified and data.elename.namespace 33 SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '') 34 ns.name(data.elename) 35 else 36 data.elename.name 37 end 38 32 name = generator.encode_name(ns, data, attrs) 39 33 case data 40 34 when SOAPRawString … … 43 37 when XSD::XSDString 44 38 generator.encode_tag(name, attrs) 45 generator.encode_string(@charset ? XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s) 39 generator.encode_string(@charset ? 40 XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s) 46 41 when XSD::XSDAnySimpleType 47 42 generator.encode_tag(name, attrs) … … 53 48 value.elename.namespace = data.elename.namespace 54 49 end 55 yield(value, true)50 generator.encode_child(ns, value, data) 56 51 end 57 52 when SOAPArray … … 59 54 data.traverse do |child, *rank| 60 55 data.position = nil 61 yield(child, true)56 generator.encode_child(ns, child, data) 62 57 end 63 58 else … … 67 62 end 68 63 69 def encode_data_end(generator, ns, qualified, data, parent) 70 name = if qualified and data.elename.namespace 71 ns.name(data.elename) 72 else 73 data.elename.name 74 end 64 def encode_data_end(generator, ns, data, parent) 65 name = generator.encode_name_end(ns, data) 75 66 cr = data.is_a?(SOAPCompoundtype) 76 67 generator.encode_tag_end(name, cr) trunk/lib/soap/encodingstyle/handler.rb
r1520 r1580 59 59 # 60 60 # Returns a XML instance as a string. 61 def encode_data(generator, ns, qualified,data, parent)62 raise NotImplementError .new('Method encode_data must be defined in derived class.')61 def encode_data(generator, ns, data, parent) 62 raise NotImplementError 63 63 end 64 64 65 def encode_data_end(generator, ns, qualified,data, parent)66 raise NotImplementError .new('Method encode_data must be defined in derived class.')65 def encode_data_end(generator, ns, data, parent) 66 raise NotImplementError 67 67 end 68 68 trunk/lib/soap/encodingstyle/literalHandler.rb
r1524 r1580 27 27 ## encode interface. 28 28 # 29 def encode_data(generator, ns, qualified,data, parent)29 def encode_data(generator, ns, data, parent) 30 30 attrs = {} 31 name = if qualified and data.elename.namespace 32 SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '') 33 ns.name(data.elename) 34 else 35 data.elename.name 36 end 31 name = generator.encode_name(ns, data, attrs) 37 32 data.extraattr.each do |k, v| 33 # ToDo: check generator.attributeformdefault here 38 34 if k.is_a?(XSD::QName) 39 35 if k.namespace … … 46 42 attrs[k] = v 47 43 end 48 49 44 case data 50 45 when SOAPRawString … … 65 60 value.elename.namespace = data.elename.namespace 66 61 end 67 yield(value, true)62 generator.encode_child(ns, value, data) 68 63 end 69 64 when SOAPArray … … 71 66 data.traverse do |child, *rank| 72 67 data.position = nil 73 yield(child, true)68 generator.encode_child(ns, child, data) 74 69 end 75 70 when SOAPElement … … 77 72 generator.encode_rawstring(data.text) if data.text 78 73 data.each do |key, value| 79 yield(value, qualified)74 generator.encode_child(ns, value, data) 80 75 end 81 76 else … … 85 80 end 86 81 87 def encode_data_end(generator, ns, qualified, data, parent) 88 name = if qualified and data.elename.namespace 89 ns.name(data.elename) 90 else 91 data.elename.name 92 end 82 def encode_data_end(generator, ns, data, parent) 83 name = generator.encode_name_end(ns, data) 93 84 cr = (data.is_a?(SOAPCompoundtype) or 94 85 (data.is_a?(SOAPElement) and !data.text)) trunk/lib/soap/encodingstyle/soapHandler.rb
r1538 r1580 30 30 ## encode interface. 31 31 # 32 def encode_data(generator, ns, qualified,data, parent)32 def encode_data(generator, ns, data, parent) 33 33 attrs = encode_attrs(generator, ns, data, parent) 34 35 34 if parent && parent.is_a?(SOAPArray) && parent.position 36 35 attrs[ns.name(AttrPositionName)] = "[#{parent.position.join(',')}]" 37 36 end 38 39 name = nil 40 if qualified and data.elename.namespace 41 SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace) 42 name = ns.name(data.elename) 43 else 44 name = data.elename.name 45 end 46 37 name = generator.encode_name(ns, data, attrs) 47 38 case data 48 39 when SOAPReference … … 66 57 generator.encode_tag(name, attrs) 67 58 data.each do |key, value| 68 yield(value, false)59 generator.encode_child(ns, value, data) 69 60 end 70 61 when SOAPArray … … 72 63 data.traverse do |child, *rank| 73 64 data.position = data.sparse ? rank : nil 74 yield(child, false)65 generator.encode_child(ns, child, data) 75 66 end 76 67 else … … 80 71 end 81 72 82 def encode_data_end(generator, ns, qualified, data, parent) 83 name = if qualified and data.elename.namespace 84 ns.name(data.elename) 85 else 86 data.elename.name 87 end 73 def encode_data_end(generator, ns, data, parent) 74 name = generator.encode_name_end(ns, data) 88 75 cr = data.is_a?(SOAPCompoundtype) 89 76 generator.encode_tag_end(name, cr) trunk/lib/soap/generator.rb
r1520 r1580 1 1 # SOAP4R - SOAP XML Instance Generator library. 2 # Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.2 # Copyright (C) 2001, 2003, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 3 3 4 4 # This program is copyrighted free software by NAKAMURA, Hiroshi. You can … … 37 37 @generate_explicit_type = 38 38 opt.key?(:generate_explicit_type) ? opt[:generate_explicit_type] : true 39 @elementformdefault = opt[:elementformdefault] 40 @attributeformdefault = opt[:attributeformdefault] 39 41 @buf = @indent = @curr = nil 40 42 end … … 51 53 ns = XSD::NS.new 52 54 @buf << xmldecl 53 encode_data(ns, true,obj, nil)55 encode_data(ns, obj, nil) 54 56 55 57 @handlers.each do |uri, handler| … … 61 63 end 62 64 63 def encode_data(ns, qualified,obj, parent)65 def encode_data(ns, obj, parent) 64 66 if obj.is_a?(SOAPEnvelopeElement) 65 encode_element(ns, qualified,obj, parent)67 encode_element(ns, obj, parent) 66 68 return 67 69 end 68 69 70 if @reftarget && !obj.precedents.empty? 70 71 add_reftarget(obj.elename.name, obj) … … 76 77 obj = ref 77 78 end 78 79 79 encodingstyle = obj.encodingstyle 80 80 # Children's encodingstyle is derived from its parent. 81 81 encodingstyle ||= parent.encodingstyle if parent 82 82 obj.encodingstyle = encodingstyle 83 84 83 handler = find_handler(encodingstyle || @default_encodingstyle) 85 84 unless handler 86 85 raise FormatEncodeError.new("Unknown encodingStyle: #{ encodingstyle }.") 87 86 end 88 89 87 if !obj.elename.name 90 88 raise FormatEncodeError.new("Element name not defined: #{ obj }.") 91 89 end 92 93 handler.encode_data(self, ns, qualified, obj, parent) do |child, nextq| 94 indent_backup, @indent = @indent, @indent + ' ' 95 encode_data(ns.clone_ns, nextq, child, obj) 96 @indent = indent_backup 97 end 98 handler.encode_data_end(self, ns, qualified, obj, parent) 90 handler.encode_data(self, ns, obj, parent) 91 handler.encode_data_end(self, ns, obj, parent) 99 92 end 100 93 … … 106 99 end 107 100 108 def encode_element(ns, qualified, obj, parent) 101 def encode_child(ns, child, parent) 102 indent_backup, @indent = @indent, @indent + ' ' 103 encode_data(ns.clone_ns, child, parent) 104 @indent = indent_backup 105 end 106 107 def encode_element(ns, obj, parent) 109 108 attrs = {} 110 109 if obj.is_a?(SOAPBody) 111 110 @reftarget = obj 112 obj.encode(self, ns, attrs) do |child , nextq|111 obj.encode(self, ns, attrs) do |child| 113 112 indent_backup, @indent = @indent, @indent + ' ' 114 encode_data(ns.clone_ns, nextq,child, obj)113 encode_data(ns.clone_ns, child, obj) 115 114 @indent = indent_backup 116 115 end … … 125 124 end 126 125 end 127 obj.encode(self, ns, attrs) do |child , nextq|126 obj.encode(self, ns, attrs) do |child| 128 127 indent_backup, @indent = @indent, @indent + ' ' 129 encode_data(ns.clone_ns, nextq,child, obj)128 encode_data(ns.clone_ns, child, obj) 130 129 @indent = indent_backup 131 130 end 131 end 132 end 133 134 def encode_name(ns, data, attrs) 135 if element_local?(data) 136 data.elename.name 137 else 138 if element_qualified?(data) 139 SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '') 140 else 141 SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace) 142 end 143 ns.name(data.elename) 144 end 145 end 146 147 def encode_name_end(ns, data) 148 if element_local?(data) 149 data.elename.name 150 else 151 ns.name(data.elename) 132 152 end 133 153 end … … 173 193 end 174 194 195 def element_local?(element) 196 element.elename.namespace.nil? 197 end 198 199 def element_qualified?(element) 200 if element.respond_to?(:qualified) 201 if element.qualified.nil? 202 @elementformdefault 203 else 204 element.qualified 205 end 206 else 207 @elementformdefault 208 end 209 end 210 175 211 def self.assign_ns(attrs, ns, namespace, tag = nil) 176 if namespace and !ns.assigned?(namespace) 212 if namespace.nil? 213 raise FormatEncodeError.new("empty namespace") 214 end 215 unless ns.assigned?(namespace) 177 216 tag = ns.assign(namespace, tag) 178 217 if tag == '' trunk/lib/soap/mapping/mapping.rb
r1555 r1580 304 304 def self.schema_element_definition(klass) 305 305 return nil unless klass.class_variables.include?('@@schema_element') 306 elements = {}306 elements = [] 307 307 as_array = [] 308 308 klass.class_eval('@@schema_element').each do |varname, definition| … … 312 312 as_array << class_name 313 313 end 314 elements [name ? name.name : varname] = class_name314 elements << [name ? name.name : varname, class_name] 315 315 end 316 316 [elements, as_array] trunk/lib/soap/mapping/wsdlencodedregistry.rb
r1572 r1580 235 235 vars = {} 236 236 node.each do |name, value| 237 if class_name = elements[name] 237 item = elements.find { |k, v| k == name } 238 if item 239 class_name = item[1] 238 240 if klass = Mapping.class_from_name(class_name) 239 241 # klass must be a SOAPBasetype or a class trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1572 r1580 39 39 soap_obj = obj2elesoap(obj, ele) 40 40 elsif type = @definedtypes[qname] 41 soap_obj = obj2typesoap(obj, type )41 soap_obj = obj2typesoap(obj, type, true) 42 42 else 43 43 soap_obj = any2soap(obj, qname) … … 81 81 def obj2elesoap(obj, ele) 82 82 o = nil 83 qualified = (ele.elementform == 'qualified') 83 84 if ele.type 84 85 if type = @definedtypes[ele.type] 85 o = obj2typesoap(obj, type )86 o = obj2typesoap(obj, type, qualified) 86 87 elsif type = TypeMap[ele.type] 87 88 o = base2soap(obj, type) … … 89 90 raise MappingError.new("cannot find type #{ele.type}") 90 91 end 91 o.elename = ele.name92 92 elsif ele.local_complextype 93 o = obj2typesoap(obj, ele.local_complextype) 94 o.elename = ele.name 93 o = obj2typesoap(obj, ele.local_complextype, qualified) 95 94 add_attributes2soap(obj, o) 96 95 elsif ele.local_simpletype 97 o = obj2typesoap(obj, ele.local_simpletype) 98 o.elename = ele.name 96 o = obj2typesoap(obj, ele.local_simpletype, qualified) 99 97 else 100 98 raise MappingError.new('illegal schema?') 101 99 end 100 o.elename = ele.name 102 101 o 103 102 end 104 103 105 def obj2typesoap(obj, type )104 def obj2typesoap(obj, type, qualified) 106 105 if type.is_a?(::WSDL::XMLSchema::SimpleType) 107 106 simpleobj2soap(obj, type) 108 107 else 109 complexobj2soap(obj, type )108 complexobj2soap(obj, type, qualified) 110 109 end 111 110 end … … 118 117 end 119 118 120 def complexobj2soap(obj, type )119 def complexobj2soap(obj, type, qualified) 121 120 o = SOAPElement.new(type.name) 121 o.qualified = qualified 122 122 type.each_element do |child_ele| 123 123 child = Mapping.get_attribute(obj, child_ele.name.name) … … 126 126 # ToDo: test 127 127 # add empty element 128 o.add(obj2elesoap(nil)) 128 child_soap = obj2elesoap(nil, child_ele) 129 child_soap.elename.namespace = nil unless qualified 130 o.add(child_soap) 129 131 elsif Integer(child_ele.minoccurs) == 0 130 132 # nothing to do … … 134 136 elsif child_ele.map_as_array? 135 137 child.each do |item| 136 o.add(obj2elesoap(item, child_ele)) 138 child_soap = obj2elesoap(item, child_ele) 139 child_soap.elename.namespace = nil unless qualified 140 o.add(child_soap) 137 141 end 138 142 else 139 o.add(obj2elesoap(child, child_ele)) 143 child_soap = obj2elesoap(child, child_ele) 144 child_soap.elename.namespace = nil unless qualified 145 o.add(child_soap) 140 146 end 141 147 end … … 175 181 def stubobj2soap(obj, qname) 176 182 ele = SOAPElement.new(qname) 183 ele.qualified = 184 (obj.class.class_variables.include?('@@schema_qualified') and 185 obj.class.class_eval('@@schema_qualified')) 177 186 add_elements2soap(obj, ele) 178 187 add_attributes2soap(obj, ele) … … 282 291 vars = {} 283 292 node.each do |name, value| 284 if class_name = elements[name] 293 item = elements.find { |k, v| k == name } 294 if item 295 class_name = item[1] 285 296 if klass = Mapping.class_from_name(class_name) 286 297 # klass must be a SOAPBasetype or a class trunk/lib/soap/rpc/proxy.rb
r1571 r1580 93 93 opt[:request_use] ||= :literal 94 94 opt[:response_use] ||= :literal 95 # default values of these values are unqualified in XML Schema. 96 # set true for backward compatibility. 97 unless opt.key?(:elementformdefault) 98 opt[:elementformdefault] = true 99 end 100 unless opt.key?(:attributeformdefault) 101 opt[:attributeformdefault] = true 102 end 95 103 @operation[name] = Operation.new(soapaction, param_def, opt) 96 104 end … … 114 122 op_info.request_body(params, @mapping_registry, @literal_mapping_registry) 115 123 ) 116 reqopt = create_options( {124 reqopt = create_options( 117 125 :soapaction => op_info.soapaction || @soapaction, 118 126 :envelopenamespace => @options["soap.envelope.requestnamespace"], 119 :default_encodingstyle => op_info.request_default_encodingstyle}) 120 resopt = create_options({ 127 :default_encodingstyle => op_info.request_default_encodingstyle, 128 :elementformdefault => op_info.elementformdefault, 129 :attributeformdefault => op_info.attributeformdefault 130 ) 131 resopt = create_options( 121 132 :envelopenamespace => @options["soap.envelope.responsenamespace"], 122 :default_encodingstyle => op_info.response_default_encodingstyle}) 133 :default_encodingstyle => op_info.response_default_encodingstyle, 134 :elementformdefault => op_info.elementformdefault, 135 :attributeformdefault => op_info.attributeformdefault 136 ) 123 137 env = route(req_header, req_body, reqopt, resopt) 124 138 raise EmptyResponseError unless env … … 247 261 attr_reader :request_use 248 262 attr_reader :response_use 263 attr_reader :elementformdefault 264 attr_reader :attributeformdefault 249 265 250 266 def initialize(soapaction, param_def, opt) … … 254 270 @request_use = opt[:request_use] 255 271 @response_use = opt[:response_use] 272 # set nil(unqualified) by default 273 @elementformdefault = opt[:elementformdefault] 274 @attributeformdefault = opt[:attributeformdefault] 256 275 check_style(@request_style) 257 276 check_style(@response_style) … … 267 286 else 268 287 @doc_request_qnames = [] 288 @doc_request_qualified = [] 269 289 @doc_response_qnames = [] 270 param_def.each do |inout, paramname, typeinfo| 290 @doc_response_qualified = [] 291 param_def.each do |inout, paramname, typeinfo, eleinfo| 271 292 klass_not_used, nsdef, namedef = typeinfo 293 qualified = eleinfo 272 294 if namedef.nil? 273 295 raise MethodDefinitionError.new("qname must be given") … … 276 298 when SOAPMethod::IN 277 299 @doc_request_qnames << XSD::QName.new(nsdef, namedef) 300 @doc_request_qualified << qualified 278 301 when SOAPMethod::OUT 279 302 @doc_response_qnames << XSD::QName.new(nsdef, namedef) 303 @doc_response_qualified << qualified 280 304 else 281 305 raise MethodDefinitionError.new( … … 374 398 ele = Mapping.obj2soap(values[idx], mapping_registry) 375 399 ele.elename = @doc_request_qnames[idx] 400 if ele.respond_to?(:qualified) 401 ele.qualified = @doc_request_qualified[idx] 402 end 376 403 ele 377 404 } … … 383 410 @doc_request_qnames[idx]) 384 411 ele.encodingstyle = LiteralNamespace 412 if ele.respond_to?(:qualified) 413 ele.qualified = @doc_request_qualified[idx] 414 end 385 415 ele 386 416 } trunk/lib/soap/streamHandler.rb
r1552 r1580 162 162 @wiredump_dev << "Wire dump:\n\n" if @wiredump_dev 163 163 begin 164 res = @client.post (endpoint_url, send_string, extra)164 res = @client.post_content(endpoint_url, send_string, extra) 165 165 rescue 166 166 @client.reset(endpoint_url) trunk/lib/soap/wsdlDriver.rb
r1574 r1580 100 100 name = XSD::CodeGen::GenSupport.safemethodname(orgname) 101 101 param_def = create_param_def(op_bind) 102 opt = {} 103 opt[:request_style] = opt[:response_style] = op_bind.soapoperation_style 104 opt[:request_use] = op_bind.input.soapbody_use 105 opt[:response_use] = op_bind.output.soapbody_use 102 opt = { 103 :request_style => op_bind.soapoperation_style, 104 :response_style => op_bind.soapoperation_style, 105 :request_use => op_bind.input.soapbody_use, 106 :response_use => op_bind.output.soapbody_use, 107 :elementformdefault => false, 108 :attributeformdefault => false 109 } 106 110 if op_bind.soapoperation_style == :rpc 107 111 drv.add_rpc_operation(op_name, soapaction, name, param_def, opt) … … 130 134 # the first element of typedef in param_def is a String like 131 135 # "::SOAP::SOAPStruct". turn this String to a class. 132 param_def.collect { |io, typedef, name|136 param_def.collect { |io, name, typedef| 133 137 typedef[0] = Mapping.class_from_name(typedef[0]) 134 138 [io, name, typedef] trunk/lib/wsdl/soap/classDefCreator.rb
r1538 r1580 58 58 @elements.collect { |ele| 59 59 if ele.local_complextype 60 dump_classdef(ele.name, ele.local_complextype) 60 dump_classdef(ele.name, ele.local_complextype, 61 ele.elementform == 'qualified') 61 62 elsif ele.local_simpletype 62 63 dump_simpletypedef(ele.name, ele.local_simpletype) … … 118 119 end 119 120 120 def dump_classdef(qname, typedef )121 def dump_classdef(qname, typedef, qualified = false) 121 122 if @faulttypes and @faulttypes.index(qname) 122 123 c = XSD::CodeGen::ClassDef.new(create_class_name(qname), … … 128 129 c.def_classvar('schema_type', ndq(qname.name)) 129 130 c.def_classvar('schema_ns', ndq(qname.namespace)) 131 c.def_classvar('schema_qualified', dq('true')) if qualified 130 132 schema_element = [] 131 133 init_lines = '' trunk/lib/wsdl/soap/methodDefCreator.rb
r1574 r1580 47 47 result = operation.inputparts.collect { |part| 48 48 collect_type(part.type) 49 param_set(::SOAP::RPC::SOAPMethod::IN, rpcdefinedtype(part), part.name)49 param_set(::SOAP::RPC::SOAPMethod::IN, part.name, rpcdefinedtype(part)) 50 50 } 51 51 outparts = operation.outputparts … … 53 53 retval = outparts[0] 54 54 collect_type(retval.type) 55 result << param_set(::SOAP::RPC::SOAPMethod::RETVAL, 56 rpcdefinedtype(retval) , retval.name)55 result << param_set(::SOAP::RPC::SOAPMethod::RETVAL, retval.name, 56 rpcdefinedtype(retval)) 57 57 cdr(outparts).each { |part| 58 58 collect_type(part.type) 59 result << param_set(::SOAP::RPC::SOAPMethod::OUT, rpcdefinedtype(part),60 part.name)59 result << param_set(::SOAP::RPC::SOAPMethod::OUT, part.name, 60 rpcdefinedtype(part)) 61 61 } 62 62 end … … 67 67 param = [] 68 68 operation.inputparts.each do |input| 69 param << param_set(::SOAP::RPC::SOAPMethod::IN, 70 documentdefinedtype(input), input.name)69 param << param_set(::SOAP::RPC::SOAPMethod::IN, input.name, 70 documentdefinedtype(input), documentdefinedelement(input)) 71 71 end 72 72 operation.outputparts.each do |output| 73 param << param_set(::SOAP::RPC::SOAPMethod::OUT, 74 documentdefinedtype(output), output.name)73 param << param_set(::SOAP::RPC::SOAPMethod::OUT, output.name, 74 documentdefinedtype(output), documentdefinedelement(output)) 75 75 end 76 76 param … … 160 160 end 161 161 162 def param_set(io_type, type, name) 163 [io_type, type, name] 162 def documentdefinedelement(part) 163 if mapped = basetype_mapped_class(part.type) 164 false 165 elsif definedtype = @simpletypes[part.type] 166 false 167 elsif definedtype = @elements[part.element] 168 definedtype.elementform == 'qualified' 169 elsif definedtype = @complextypes[part.type] 170 false 171 else 172 raise RuntimeError.new("part: #{part.name} cannot be resolved") 173 end 174 end 175 176 def param_set(io_type, name, type, ele = nil) 177 [io_type, name, type, ele] 164 178 end 165 179 … … 177 191 def param2str(params) 178 192 params.collect { |param| 179 "[#{dq(param[0])}, #{dq(param[2])}, #{type2str(param[1])}]" 193 io, name, type, ele = param 194 unless ele.nil? 195 "[#{dq(io)}, #{dq(name)}, #{type2str(type)}, #{ele2str(ele)}]" 196 else 197 "[#{dq(io)}, #{dq(name)}, #{type2str(type)}]" 198 end 180 199 }.join(",\n") 181 200 end … … 186 205 else 187 206 "[#{dq(type[0])}, #{ndq(type[1])}, #{dq(type[2])}]" 207 end 208 end 209 210 def ele2str(ele) 211 qualified = ele 212 if qualified 213 "true" 214 else 215 "false" 188 216 end 189 217 end trunk/lib/wsdl/xmlSchema/all.rb
r1520 r1580 28 28 def targetnamespace 29 29 parent.targetnamespace 30 end 31 32 def elementformdefault 33 parent.elementformdefault 30 34 end 31 35 trunk/lib/wsdl/xmlSchema/choice.rb
r1520 r1580 28 28 def targetnamespace 29 29 parent.targetnamespace 30 end 31 32 def elementformdefault 33 parent.elementformdefault 30 34 end 31 35 trunk/lib/wsdl/xmlSchema/complexType.rb
r1520 r1580 39 39 def targetnamespace 40 40 parent.is_a?(WSDL::XMLSchema::Element) ? nil : parent.targetnamespace 41 end 42 43 def elementformdefault 44 parent.elementformdefault 41 45 end 42 46 trunk/lib/wsdl/xmlSchema/element.rb
r1537 r1580 37 37 38 38 attr_writer :name # required 39 attr_writer :form 39 40 attr_writer :type 40 41 attr_writer :local_simpletype … … 46 47 47 48 attr_reader_ref :name 49 attr_reader_ref :form 48 50 attr_reader_ref :type 49 51 attr_reader_ref :local_simpletype … … 59 61 super() 60 62 @name = name 63 @form = nil 61 64 @type = type 62 65 @local_simpletype = @local_complextype = nil … … 77 80 end 78 81 82 def elementformdefault 83 parent.elementformdefault 84 end 85 79 86 def elementform 80 # ToDo: must be overwritten. 81 parent.elementformdefault 87 self.form.nil? ? parent.elementformdefault : self.form 82 88 end 83 89 … … 103 109 when NameAttrName 104 110 @name = XSD::QName.new(targetnamespace, value.source) 111 when FormAttrName 112 @form = value.source 105 113 when TypeAttrName 106 114 @type = value trunk/lib/wsdl/xmlSchema/schema.rb
r1534 r1580 1 1 # WSDL4R - XMLSchema schema definition for WSDL. 2 # Copyright (C) 2002, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.2 # Copyright (C) 2002, 2003-2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>. 3 3 4 4 # This program is copyrighted free software by NAKAMURA, Hiroshi. You can … … 35 35 @attributes = XSD::NamedElements.new 36 36 @imports = [] 37 @elementformdefault = "qualified" 37 @attributeformdefault = "unqualified" 38 @elementformdefault = "unqualified" 38 39 @importedschema = {} 39 40 @location = nil trunk/lib/wsdl/xmlSchema/sequence.rb
r1520 r1580 28 28 def targetnamespace 29 29 parent.targetnamespace 30 end 31 32 def elementformdefault 33 parent.elementformdefault 30 34 end 31 35 trunk/test/soap/test_soapelement.rb
r1520 r1580 1 1 require 'test/unit' 2 2 require 'soap/baseData' 3 require 'soap/mapping' 3 4 4 5 … … 37 38 assert_equal({}, obj.extraattr) 38 39 assert_equal([], obj.precedents) 39 assert_equal( false, obj.qualified)40 assert_equal(nil, obj.qualified) 40 41 assert_equal(nil, obj.text) 41 42 assert(obj.members.empty?)