Changeset 1925
- Timestamp:
- 08/27/07 10:37:34 (1 year ago)
- Files:
-
- trunk/lib/soap/mapping/factory.rb (modified) (2 diffs)
- trunk/lib/soap/mapping/literalregistry.rb (modified) (3 diffs)
- trunk/lib/soap/mapping/mapping.rb (modified) (2 diffs)
- trunk/lib/soap/mapping/registry.rb (modified) (4 diffs)
- trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb (modified) (1 diff)
- trunk/lib/xsd/mapping.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/mapping/factory.rb
r1824 r1925 106 106 end 107 107 begin 108 externalces = Thread.current[:SOAPMapping][:ExternalCES] 109 encoded = XSD::Charset.encoding_conv(obj, externalces, 108 encoded = XSD::Charset.encoding_conv(obj, Mapping.external_ces, 110 109 XSD::Charset.encoding) 111 110 soap_obj = soap_class.new(encoded) … … 120 119 obj = Mapping.create_empty_object(obj_class) 121 120 decoded = XSD::Charset.encoding_conv(node.data, XSD::Charset.encoding, 122 Thread.current[:SOAPMapping][:ExternalCES])121 Mapping.external_ces) 123 122 obj.replace(decoded) 124 123 mark_unmarshalled_obj(node, obj) trunk/lib/soap/mapping/literalregistry.rb
r1924 r1925 23 23 attr_accessor :excn_handler_obj2soap 24 24 attr_accessor :excn_handler_soap2obj 25 attr_accessor :generate_explicit_type26 25 27 26 def initialize … … 29 28 @excn_handler_obj2soap = nil 30 29 @excn_handler_soap2obj = nil 31 @generate_explicit_type = false32 30 end 33 31 … … 139 137 end 140 138 ele.qualified = definition.qualified 141 if definition.type and (@generate_explicit_type or definition.basetype) 139 if definition.type and (definition.basetype or Mapping.root_type_hint) 140 Mapping.reset_root_type_hint 142 141 ele.extraattr[XSD::AttrTypeName] = definition.type 143 142 end trunk/lib/soap/mapping/mapping.rb
r1924 r1925 371 371 end 372 372 373 def self.root_type_hint 374 Thread.current[:SOAPMapping][:RootTypeHint] 375 end 376 377 def self.reset_root_type_hint 378 Thread.current[:SOAPMapping][:RootTypeHint] = false 379 end 380 381 def self.external_ces 382 Thread.current[:SOAPMapping][:ExternalCES] 383 end 384 373 385 def self.schema_ns_definition(klass) 374 386 class_schema_variable(:schema_ns, klass) … … 538 550 data[:ExternalCES] = opt[:external_ces] || XSD::Charset.encoding 539 551 data[:NoReference] = opt[:no_reference] 552 data[:RootTypeHint] = opt[:root_type_hint] 540 553 data[:SchemaDefinition] = {} 541 554 yield trunk/lib/soap/mapping/registry.rb
r1923 r1925 175 175 super() 176 176 @class_schema_definition = {} 177 @class_elename_schema_definition = {} 177 178 @elename_schema_definition = {} 178 179 @type_schema_definition = {} … … 187 188 end 188 189 if definition.elename 190 @class_elename_schema_definition[obj_class] = definition 189 191 @elename_schema_definition[definition.elename] = definition 190 192 end … … 196 198 def schema_definition_from_class(klass) 197 199 @class_schema_definition[klass] || Mapping.schema_definition_classdef(klass) 200 end 201 202 def elename_schema_definition_from_class(klass) 203 @class_elename_schema_definition[klass] 198 204 end 199 205 … … 240 246 soap_obj = nil 241 247 if type <= XSD::XSDString 242 str = XSD::Charset.encoding_conv(obj.to_s, 243 Thread.current[:SOAPMapping][:ExternalCES], 248 str = XSD::Charset.encoding_conv(obj.to_s, Mapping.external_ces, 244 249 XSD::Charset.encoding) 245 250 soap_obj = type.new(str) trunk/lib/wsdl/soap/mappingRegistryCreatorSupport.rb
r1924 r1925 170 170 child_schema_element = 171 171 parse_elements(element.elements, base_namespace, parentmodule, qualified) 172 child_schema_element.unshift(:choice) 172 if !element.map_as_array? 173 # choice + maxOccurs="unbounded" is treated just as 'all' now. 174 child_schema_element.unshift(:choice) 175 end 173 176 schema_element << child_schema_element 174 177 when WSDL::XMLSchema::Group trunk/lib/xsd/mapping.rb
r1924 r1925 29 29 30 30 class Mapper 31 MAPPING_OPT = {:default_encodingstyle => SOAP::LiteralNamespace} 31 MAPPING_OPT = { 32 :default_encodingstyle => SOAP::LiteralNamespace, 33 :root_type_hint => true 34 }.freeze 32 35 33 36 def initialize(registry) 34 37 @registry = registry 35 @registry.generate_explicit_type = true36 38 end 37 39 38 40 def obj2xml(obj, elename = nil, io = nil) 39 if !elename.nil? and !elename.is_a?(XSD::QName) 40 elename = XSD::QName.new(nil, elename) 41 opt = MAPPING_OPT.dup 42 unless elename 43 if definition = @registry.elename_schema_definition_from_class(obj.class) 44 elename = definition.elename 45 opt[:root_type_hint] = false 46 end 41 47 end 42 soap = SOAP::Mapping.obj2soap(obj, @registry, elename) 48 elename = SOAP::Mapping.to_qname(elename) if elename 49 soap = SOAP::Mapping.obj2soap(obj, @registry, elename, opt) 43 50 if soap.elename.nil? or soap.elename == XSD::QName::EMPTY 44 51 soap.elename = 45 52 XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s)) 46 53 end 47 generator = SOAP::SOAPGenerator.new( MAPPING_OPT)54 generator = SOAP::SOAPGenerator.new(opt) 48 55 generator.generate(soap, io) 49 56 end