Changeset 1724
- Timestamp:
- 09/24/06 21:02:36 (2 years ago)
- Files:
-
- trunk/lib/soap/baseData.rb (modified) (2 diffs)
- trunk/lib/soap/element.rb (modified) (1 diff)
- trunk/lib/soap/generator.rb (modified) (3 diffs)
- trunk/lib/soap/mapping/factory.rb (modified) (1 diff)
- trunk/lib/soap/mapping/literalregistry.rb (modified) (6 diffs)
- trunk/lib/soap/mapping/mapping.rb (modified) (2 diffs)
- trunk/lib/soap/mapping/registry.rb (modified) (3 diffs)
- trunk/lib/soap/mapping/wsdlliteralregistry.rb (modified) (4 diffs)
- trunk/lib/soap/rpc/proxy.rb (modified) (3 diffs)
- trunk/lib/soap/rpc/router.rb (modified) (2 diffs)
- trunk/lib/wsdl/soap/classDefCreator.rb (modified) (4 diffs)
- trunk/lib/wsdl/soap/driverCreator.rb (modified) (4 diffs)
- trunk/lib/wsdl/soap/methodDefCreator.rb (modified) (2 diffs)
- trunk/lib/wsdl/xmlSchema/content.rb (modified) (1 diff)
- trunk/lib/wsdl/xmlSchema/element.rb (modified) (1 diff)
- trunk/lib/wsdl/xmlSchema/schema.rb (modified) (1 diff)
- trunk/test/soap/asp.net/test_aspdotnet.rb (modified) (1 diff)
- trunk/test/soap/helloworld/test_helloworld.rb (modified) (1 diff)
- trunk/test/wsdl/any/any.wsdl (modified) (1 diff)
- trunk/test/wsdl/any/expectedDriver.rb (modified) (1 diff)
- trunk/test/wsdl/any/expectedService.rb (modified) (1 diff)
- trunk/test/wsdl/qualified/np.wsdl (modified) (1 diff)
- trunk/test/wsdl/qualified/test_qualified.rb (modified) (4 diffs)
- trunk/test/wsdl/ref/expectedProduct.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/baseData.rb
r1705 r1724 82 82 include SOAP 83 83 84 attr_accessor :qualified 85 84 86 def initialize(*arg) 85 87 super 88 @qualified = nil 86 89 end 87 90 end … … 95 98 include SOAP 96 99 100 attr_accessor :qualified 101 97 102 def initialize(*arg) 98 103 super 104 @qualified = nil 99 105 end 100 106 end trunk/lib/soap/element.rb
r1690 r1724 162 162 @actor = actor 163 163 element.parent = self if element 164 element.qualified = true 164 165 end 165 166 trunk/lib/soap/generator.rb
r1707 r1724 38 38 @generate_explicit_type = 39 39 opt.key?(:generate_explicit_type) ? opt[:generate_explicit_type] : true 40 # elementformdefault is for default namespace usage controll 41 # TODO: should be renamed 40 42 @elementformdefault = opt[:elementformdefault] 41 43 @attributeformdefault = opt[:attributeformdefault] … … 139 141 data.elename.name 140 142 else 141 if element_qualified?(data)143 if @elementformdefault 142 144 SOAPGenerator.assign_ns(attrs, ns, data.elename.namespace, '') 143 145 else … … 217 219 end 218 220 219 def element_qualified?(element)220 if element.respond_to?(:qualified)221 if element.qualified.nil?222 @elementformdefault223 else224 element.qualified225 end226 else227 @elementformdefault228 end229 end230 231 221 def self.assign_ns(attrs, ns, namespace, tag = nil) 232 222 if namespace.nil? trunk/lib/soap/mapping/factory.rb
r1720 r1724 54 54 55 55 def setdefinediv2soap(ele, obj, map) 56 # cache needed?57 56 definition = Mapping.schema_definition_classdef(obj.class) 58 57 definition.elements.each do |eledef| trunk/lib/soap/mapping/literalregistry.rb
r1721 r1724 29 29 @excn_handler_soap2obj = nil 30 30 @class_schema_definition = {} 31 @qname_schema_definition = {} 31 @elename_schema_definition = {} 32 @type_schema_definition = {} 32 33 end 33 34 … … 37 38 if definition.name 38 39 qname = XSD::QName.new(definition.ns, definition.name) 39 @ qname_schema_definition[qname] = [obj_class, definition]40 @elename_schema_definition[qname] = definition 40 41 end 41 42 if definition.type 42 43 qname = XSD::QName.new(definition.ns, definition.type) 43 @ qname_schema_definition[qname] = [obj_class, definition]44 @type_schema_definition[qname] = definition 44 45 end 45 46 end … … 124 125 end 125 126 ele.qualified = definition.qualified 126 ele.extraattr[XSD::AttrTypeName] = 127 XSD::QName.new(definition.ns, definition.type) 127 if definition.type 128 ele.extraattr[XSD::AttrTypeName] = 129 XSD::QName.new(definition.ns, definition.type) 130 end 128 131 any = nil 129 132 if definition.have_any? … … 172 175 definition = schema_definition_from_class(obj_class) 173 176 else 174 obj_class, definition = schema_definition_from_qname(node.elename) 175 unless obj_class 176 typestr = XSD::CodeGen::GenSupport.safeconstname(node.elename.name) 177 obj_class = Mapping.class_from_name(typestr) 178 definition = schema_definition_from_class(obj_class) if obj_class 177 definition = schema_definition_from_elename(node.elename) 178 if definition 179 obj_class = definition.class_for 179 180 end 180 181 end … … 239 240 240 241 def elesoapchild2obj(value, ns, eledef) 241 obj_class, child_definition = schema_definition_from_qname(eledef.elename)242 child_definition = schema_definition_from_elename(eledef.elename) 242 243 if child_definition 243 any2obj(value, obj_class)244 any2obj(value, child_definition.class_for) 244 245 elsif eledef.type 245 obj_class,child_definition =246 schema_definition_from_ qname(XSD::QName.new(ns, eledef.type))246 child_definition = 247 schema_definition_from_type(XSD::QName.new(ns, eledef.type)) 247 248 if child_definition 248 any2obj(value, obj_class)249 any2obj(value, child_definition.class_for) 249 250 elsif klass = Mapping.class_from_name(eledef.type) 250 251 # klass must be a SOAPBasetype or a class … … 342 343 end 343 344 344 def class_from_schema_definition(definition) 345 @class_schema_definition.key(definition) 346 end 347 348 def schema_definition_from_qname(qname) 349 @qname_schema_definition[qname] 345 def schema_definition_from_elename(qname) 346 @elename_schema_definition[qname] || find_schema_definition(qname.name) 347 end 348 349 def schema_definition_from_type(type) 350 @type_schema_definition[type] || find_schema_definition(type.name) 351 end 352 353 def find_schema_definition(name) 354 typestr = XSD::CodeGen::GenSupport.safeconstname(name) 355 obj_class = Mapping.class_from_name(typestr) 356 if obj_class 357 schema_definition_from_class(obj_class) 358 end 350 359 end 351 360 end trunk/lib/soap/mapping/mapping.rb
r1721 r1724 404 404 schema_element = definition[:schema_element] 405 405 schema_attributes = definition[:schema_attribute] 406 definition = SchemaDefinition.new( schema_ns, schema_name, schema_type,407 schema_ qualified)406 definition = SchemaDefinition.new(klass, schema_ns, schema_name, 407 schema_type, schema_qualified) 408 408 definition.attributes = schema_attributes 409 409 if schema_element … … 454 454 455 455 class SchemaDefinition 456 attr_reader : ns, :name, :type, :qualified, :elements456 attr_reader :class_for, :ns, :name, :type, :qualified, :elements 457 457 attr_accessor :attributes 458 458 459 def initialize(ns, name, type, qualified) 459 def initialize(class_for, ns, name, type, qualified) 460 @class_for = class_for 460 461 @ns = ns 461 462 @name = name trunk/lib/soap/mapping/registry.rb
r1720 r1724 151 151 152 152 def add_attributes2soap(obj, ele) 153 schema_definition = Mapping.schema_definition_classdef(obj.class)154 if schema_definition && attributes = schema_definition.attributes153 definition = Mapping.schema_definition_classdef(obj.class) 154 if definition && attributes = definition.attributes 155 155 attributes.each do |qname, param| 156 156 at = obj.__send__( … … 165 165 end 166 166 167 def base2soap(obj, type )167 def base2soap(obj, type, qualified = nil) 168 168 soap_obj = nil 169 169 if type <= XSD::XSDString … … 174 174 soap_obj = type.new(obj) 175 175 end 176 soap_obj.qualified = qualified 176 177 soap_obj 177 178 end trunk/lib/soap/mapping/wsdlliteralregistry.rb
r1720 r1724 80 80 if eledef.type 81 81 if type = @definedtypes[eledef.type] 82 ele = obj2typesoap(obj, type , qualified)82 ele = obj2typesoap(obj, type) 83 83 elsif type = TypeMap[eledef.type] 84 84 ele = base2soap(obj, type) … … 87 87 end 88 88 elsif eledef.local_complextype 89 ele = obj2typesoap(obj, eledef.local_complextype , qualified)89 ele = obj2typesoap(obj, eledef.local_complextype) 90 90 elsif eledef.local_simpletype 91 ele = obj2typesoap(obj, eledef.local_simpletype , qualified)91 ele = obj2typesoap(obj, eledef.local_simpletype) 92 92 else 93 93 raise MappingError.new('illegal schema?') 94 94 end 95 95 ele.elename = eledef.name 96 ele 97 end 98 99 def obj2typesoap(obj, type, qualified) 96 ele.qualified = qualified 97 ele 98 end 99 100 def obj2typesoap(obj, type) 100 101 ele = nil 101 102 if type.is_a?(::WSDL::XMLSchema::SimpleType) … … 104 105 ele = simpleobj2soap(obj, type.simplecontent) 105 106 else 106 ele = complexobj2soap(obj, type , qualified)107 ele = complexobj2soap(obj, type) 107 108 end 108 109 add_attributes2soap(obj, ele) … … 124 125 end 125 126 126 def complexobj2soap(obj, type , qualified)127 def complexobj2soap(obj, type) 127 128 ele = SOAPElement.new(type.name) 128 ele.qualified = qualified129 129 if type.choice? 130 130 complexobj2choicesoap(obj, ele, type) trunk/lib/soap/rpc/proxy.rb
r1720 r1724 99 99 opt[:request_use] ||= :literal 100 100 opt[:response_use] ||= :literal 101 # default values of these values are unqualified in XML Schema.102 # set true for backward compatibility.103 unless opt.key?(:elementformdefault)104 opt[:elementformdefault] = true105 end106 unless opt.key?(:attributeformdefault)107 opt[:attributeformdefault] = true108 end109 101 op = Operation.new(soapaction, param_def, opt) 110 102 assign_operation(name, nil, soapaction, op) … … 487 479 ele = Mapping.obj2soap(values[idx], mapping_registry, nil, opt) 488 480 ele.elename = @doc_request_qnames[idx] 481 ele.qualified = @doc_request_qualified[idx] 489 482 ele 490 483 } … … 496 489 @doc_request_qnames[idx], opt) 497 490 ele.encodingstyle = LiteralNamespace 498 if ele.respond_to?(:qualified) 499 ele.qualified = @doc_request_qualified[idx] 500 end 491 ele.qualified = @doc_request_qualified[idx] 501 492 ele 502 493 } trunk/lib/soap/rpc/router.rb
r1720 r1724 538 538 ele = Mapping.obj2soap(result[idx], mapping_registry, nil, opt) 539 539 ele.elename = @doc_response_qnames[idx] 540 ele.qualified = @doc_response_qualified[idx] 540 541 ele 541 542 } … … 547 548 @doc_response_qnames[idx]) 548 549 ele.encodingstyle = LiteralNamespace 549 if ele.respond_to?(:qualified) 550 ele.qualified = @doc_response_qualified[idx] 551 end 550 ele.qualified = @doc_response_qualified[idx] 552 551 ele 553 552 } trunk/lib/wsdl/soap/classDefCreator.rb
r1719 r1724 72 72 dump_complextypedef(ele.name, ele.local_complextype, qualified) 73 73 elsif ele.local_simpletype 74 dump_simpletypedef(ele.name, ele.local_simpletype) 74 qualified = (ele.elementform == 'qualified') 75 dump_simpletypedef(ele.name, ele.local_simpletype, qualified) 75 76 else 76 77 nil … … 99 100 end 100 101 101 def dump_simpletypedef(qname, simpletype )102 def dump_simpletypedef(qname, simpletype, qualified = false) 102 103 if simpletype.restriction 103 dump_simpletypedef_restriction(qname, simpletype )104 dump_simpletypedef_restriction(qname, simpletype, qualified) 104 105 elsif simpletype.list 105 dump_simpletypedef_list(qname, simpletype )106 dump_simpletypedef_list(qname, simpletype, qualified) 106 107 else 107 108 raise RuntimeError.new("unknown kind of simpletype: #{simpletype}") … … 109 110 end 110 111 111 def dump_simpletypedef_restriction(qname, typedef )112 def dump_simpletypedef_restriction(qname, typedef, qualified) 112 113 restriction = typedef.restriction 113 114 if restriction.enumeration.empty? … … 126 127 end 127 128 c.def_classvar('schema_ns', ndq(qname.namespace)) 129 c.def_classvar('schema_qualified', dq('true')) if qualified 128 130 define_classenum_restriction(c, classname, restriction.enumeration) 129 131 c.dump 130 132 end 131 133 132 def dump_simpletypedef_list(qname, typedef )134 def dump_simpletypedef_list(qname, typedef, qualified) 133 135 list = typedef.list 134 136 c = ClassDef.new(create_class_name(qname), '::Array') trunk/lib/wsdl/soap/driverCreator.rb
r1720 r1724 9 9 require 'wsdl/info' 10 10 require 'wsdl/soap/mappingRegistryCreator' 11 require 'wsdl/soap/literalMappingRegistryCreator' 11 12 require 'wsdl/soap/methodDefCreator' 12 13 require 'wsdl/soap/classDefCreatorSupport' … … 44 45 def dump_porttype(porttype) 45 46 class_name = create_class_name(porttype) 46 methoddef, types = MethodDefCreator.new(@definitions).dump(porttype)47 methoddef, methodtypes = MethodDefCreator.new(@definitions).dump(porttype) 47 48 mr_creator = MappingRegistryCreator.new(@definitions) 49 literal_mr_creator = LiteralMappingRegistryCreator.new(@definitions) 48 50 binding = @definitions.bindings.find { |item| item.type == porttype } 49 51 if binding.nil? or binding.soapbinding.nil? … … 55 57 c = XSD::CodeGen::ClassDef.new(class_name, "::SOAP::RPC::Driver") 56 58 c.def_require("soap/rpc/driver") 59 #c.def_const("EncodedMappingRegistry", "::SOAP::Mapping::EncodedRegistry.new") 57 60 c.def_const("MappingRegistry", "::SOAP::Mapping::EncodedRegistry.new") 61 #c.def_const("LiteralMappingRegistry", "::SOAP::Mapping::LiteralRegistry.new") 58 62 c.def_const("DefaultEndpointUrl", ndq(address)) 59 c.def_code(mr_creator.dump(types)) 63 c.def_code(mr_creator.dump(methodtypes)) 64 #c.def_code(literal_mr_creator.dump) 60 65 c.def_code <<-EOD 61 66 Methods = [ … … 63 68 ] 64 69 EOD 70 #self.literal_mapping_registry = LiteralMappingRegistry 65 71 c.def_method("initialize", "endpoint_url = nil") do 66 72 <<-EOD trunk/lib/wsdl/soap/methodDefCreator.rb
r1711 r1724 70 70 operation.inputparts.each do |input| 71 71 param << param_set(::SOAP::RPC::SOAPMethod::IN, input.name, 72 documentdefinedtype(input) , elementqualified(input))72 documentdefinedtype(input)) 73 73 end 74 74 operation.outputparts.each do |output| 75 75 param << param_set(::SOAP::RPC::SOAPMethod::OUT, output.name, 76 documentdefinedtype(output) , elementqualified(output))76 documentdefinedtype(output)) 77 77 end 78 78 param … … 170 170 end 171 171 172 def elementqualified(part)173 if mapped = basetype_mapped_class(part.type)174 false175 elsif definedtype = @simpletypes[part.type]176 false177 elsif definedtype = @elements[part.element]178 definedtype.elementform == 'qualified'179 elsif definedtype = @complextypes[part.type]180 false181 else182 raise RuntimeError.new("part: #{part.name} cannot be resolved")183 end184 end185 186 172 def param_set(io_type, name, type, ele = nil) 187 173 [io_type, name, type, ele] trunk/lib/wsdl/xmlSchema/content.rb
r1653 r1724 50 50 when ElementName 51 51 o = Element.new 52 o.form = elementformdefault 52 53 @elements << o 53 54 o trunk/lib/wsdl/xmlSchema/element.rb
r1648 r1724 116 116 when FormAttrName 117 117 @form = value.source 118 if @form != 'qualified' and @name.namespace 119 @name = XSD::QName.new(nil, @name.name) 120 end 121 @form 118 122 when TypeAttrName 119 123 @type = value trunk/lib/wsdl/xmlSchema/schema.rb
r1580 r1724 70 70 when ElementName 71 71 o = Element.new 72 o.form = 'qualified' # root element is qualified 72 73 @elements << o 73 74 o trunk/test/soap/asp.net/test_aspdotnet.rb
r1624 r1724 98 98 @client.default_encodingstyle = SOAP::EncodingStyle::ASPDotNetHandler::Namespace 99 99 assert_equal("Hello Mike", @client.sayHello("Mike")) 100 assert_equal(REQUEST_ASPDOTNETHANDLER, parse_requestxml(str)) 100 assert_equal(REQUEST_ASPDOTNETHANDLER, parse_requestxml(str), 101 [REQUEST_ASPDOTNETHANDLER, parse_requestxml(str)].join("\n\n")) 101 102 end 102 103 trunk/test/soap/helloworld/test_helloworld.rb
r1520 r1724 20 20 @endpoint = "http://localhost:#{Port}/" 21 21 @client = SOAP::RPC::Driver.new(@endpoint, 'urn:hws') 22 @client.wiredump_dev = STDERR if $DEBUG 22 23 @client.add_method("hello_world", "from") 23 24 end trunk/test/wsdl/any/any.wsdl
r1649 r1724 21 21 22 22 <message name="msg_echoitem"> 23 <part name="parameters" element="txd:foo.bar"/>23 <part name="parameters" type="txd:foo.bar"/> 24 24 </message> 25 25 trunk/test/wsdl/any/expectedDriver.rb
r1720 r1724 10 10 [ "urn:example.com:echo", 11 11 "echo", 12 [ ["in", "parameters", ["::SOAP::SOAPElement", "urn:example.com:echo-type", "foo.bar"] , false],13 ["out", "parameters", ["::SOAP::SOAPElement", "urn:example.com:echo-type", "foo.bar"] , false] ],12 [ ["in", "parameters", ["::SOAP::SOAPElement", "urn:example.com:echo-type", "foo.bar"]], 13 ["out", "parameters", ["::SOAP::SOAPElement", "urn:example.com:echo-type", "foo.bar"]] ], 14 14 { :request_style => :document, :request_use => :literal, 15 15 :response_style => :document, :response_use => :literal } trunk/test/wsdl/any/expectedService.rb
r1720 r1724 11 11 [ "urn:example.com:echo", 12 12 "echo", 13 [ ["in", "parameters", ["::SOAP::SOAPElement", "urn:example.com:echo-type", "foo.bar"] , false],14 ["out", "parameters", ["::SOAP::SOAPElement", "urn:example.com:echo-type", "foo.bar"] , false] ],13 [ ["in", "parameters", ["::SOAP::SOAPElement", "urn:example.com:echo-type", "foo.bar"]], 14 ["out", "parameters", ["::SOAP::SOAPElement", "urn:example.com:echo-type", "foo.bar"]] ], 15 15 { :request_style => :document, :request_use => :literal, 16 16 :response_style => :document, :response_use => :literal } trunk/test/wsdl/qualified/np.wsdl
r1626 r1724 6 6 <s:complexType> 7 7 <s:sequence> 8 <s:element minOccurs="0" maxOccurs="1" form="unqualified" name="Min" type="s:string" /> 8 9 <s:element minOccurs="0" maxOccurs="1" name="Max" type="s:string" /> 9 10 </s:sequence> trunk/test/wsdl/qualified/test_qualified.rb
r1621 r1724 88 88 end 89 89 90 LOGIN_REQUEST_QUALIFIED _NS=90 LOGIN_REQUEST_QUALIFIED = 91 91 %q[<?xml version="1.0" encoding="utf-8" ?> 92 92 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" … … 95 95 <env:Body> 96 96 <n1:GetPrimeNumbers xmlns:n1="http://www50.brinkster.com/vbfacileinpt/np"> 97 <Min>2</Min> 97 98 <n1:Max>10</n1:Max> 98 99 </n1:GetPrimeNumbers> 99 </env:Body>100 </env:Envelope>]101 102 LOGIN_REQUEST_QUALIFIED =103 %q[<?xml version="1.0" encoding="utf-8" ?>104 <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"105 xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"106 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">107 <env:Body>108 <GetPrimeNumbers xmlns="http://www50.brinkster.com/vbfacileinpt/np">109 <Max>10</Max>110 </GetPrimeNumbers>111 100 </env:Body> 112 101 </env:Envelope>] … … 124 113 @client.endpoint_url = "http://localhost:#{Port}/" 125 114 @client.wiredump_dev = str = '' 126 @client.GetPrimeNumbers(:Max => 10) 127 assert_equal(LOGIN_REQUEST_QUALIFIED_NS, parse_requestxml(str)) 115 @client.GetPrimeNumbers(:Min => 2, :Max => 10) 116 assert_equal(LOGIN_REQUEST_QUALIFIED, parse_requestxml(str), 117 [LOGIN_REQUEST_QUALIFIED, parse_requestxml(str)].join("\n\n")) 128 118 end 129 119 … … 140 130 141 131 @client.wiredump_dev = str = '' 142 @client.getPrimeNumbers(GetPrimeNumbers.new(10)) 143 assert_equal(LOGIN_REQUEST_QUALIFIED, parse_requestxml(str)) 132 @client.getPrimeNumbers(GetPrimeNumbers.new(2, 10)) 133 assert_equal(LOGIN_REQUEST_QUALIFIED, parse_requestxml(str), 134 [LOGIN_REQUEST_QUALIFIED, parse_requestxml(str)].join("\n\n")) 144 135 end 145 136 trunk/test/wsdl/ref/expectedProduct.rb
r1719 r1724 5 5 @@schema_type = nil 6 6 @@schema_ns = "urn:ref" 7 @@schema_qualified = "true" 7 8 8 9 C_0 = Rating.new("0") … … 15 16 @@schema_type = nil 16 17 @@schema_ns = "urn:ref" 18 @@schema_qualified = "true" 17 19 @@schema_attribute = { 18 20 XSD::QName.new("urn:ref", "version") => "SOAP::SOAPString",