Changeset 1898
- Timestamp:
- 07/21/07 17:37:00 (10 months ago)
- Files:
-
- trunk/lib/soap/element.rb (modified) (1 diff)
- trunk/lib/soap/generator.rb (modified) (4 diffs)
- trunk/lib/soap/ns.rb (added)
- trunk/lib/soap/parser.rb (modified) (2 diffs)
- trunk/lib/soap/soap.rb (modified) (2 diffs)
- trunk/lib/wsdl/parser.rb (modified) (2 diffs)
- trunk/lib/xsd/ns.rb (modified) (4 diffs)
- trunk/test/soap/test_custom_ns.rb (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/soap/element.rb
r1837 r1898 258 258 259 259 def encode(generator, ns, attrs = {}) 260 SOAPGenerator.assign_ns(attrs, ns, elename.namespace , SOAPNamespaceTag)260 SOAPGenerator.assign_ns(attrs, ns, elename.namespace) 261 261 name = ns.name(@elename) 262 262 generator.encode_tag(name, attrs) trunk/lib/soap/generator.rb
r1887 r1898 7 7 8 8 9 require 'xsd/ns'10 9 require 'soap/soap' 10 require 'soap/ns' 11 11 require 'soap/baseData' 12 12 require 'soap/encodingstyle/handler' … … 48 48 @buf = @indent = @curr = nil 49 49 @default_ns = opt[:default_ns] 50 @default_ns_tag = opt[:default_ns_tag] 50 51 end 51 52 … … 59 60 end 60 61 61 ns = XSD::NS.new62 ns = SOAP::NS.new 62 63 if @default_ns 63 64 @default_ns.each_ns do |default_ns, default_tag| 64 65 SOAPGenerator.assign_ns(obj.extraattr, ns, default_ns, default_tag) 66 end 67 end 68 if @default_ns_tag 69 @default_ns_tag.each_ns do |default_ns, default_tag| 70 ns.known_tag[default_ns] = default_tag 65 71 end 66 72 end … … 137 143 if obj.is_a?(SOAPEnvelope) 138 144 # xsi:nil="true" can appear even if dumping without explicit type. 139 SOAPGenerator.assign_ns(attrs, ns, 140 XSD::InstanceNamespace, XSINamespaceTag) 145 SOAPGenerator.assign_ns(attrs, ns, XSD::InstanceNamespace) 141 146 if @generate_explicit_type 142 SOAPGenerator.assign_ns(attrs, ns, XSD::Namespace , XSDNamespaceTag)147 SOAPGenerator.assign_ns(attrs, ns, XSD::Namespace) 143 148 end 144 149 end trunk/lib/soap/parser.rb
r1824 r1898 7 7 8 8 9 require 'xsd/ns'10 9 require 'xsd/xmlparser' 11 10 require 'soap/soap' 11 require 'soap/ns' 12 12 require 'soap/baseData' 13 13 require 'soap/encodingstyle/handler' … … 121 121 parent_encodingstyle = lastframe.encodingstyle 122 122 else 123 ns = XSD::NS.new123 ns = SOAP::NS.new 124 124 parent = ParseFrame::NodeContainer.new(nil) 125 125 parent_encodingstyle = nil trunk/lib/soap/soap.rb
r1888 r1898 14 14 15 15 16 VERSION = Version = '1.5. 7'16 VERSION = Version = '1.5.8-SNAPSHOT' 17 17 PropertyName = 'soap/property' 18 18 … … 59 59 60 60 Base64Literal = 'base64' 61 62 SOAPNamespaceTag = 'env'63 XSDNamespaceTag = 'xsd'64 XSINamespaceTag = 'xsi'65 61 66 62 MediaType = 'text/xml' trunk/lib/wsdl/parser.rb
r1824 r1898 8 8 9 9 require 'xsd/qname' 10 require 'xsd/ns'11 10 require 'xsd/charset' 12 11 require 'xsd/datatypes' 13 12 require 'xsd/xmlparser' 13 require 'soap/ns' 14 14 require 'wsdl/wsdl' 15 15 require 'wsdl/data' … … 78 78 parent = lastframe.node 79 79 else 80 ns = XSD::NS.new80 ns = ::SOAP::NS.new 81 81 parent = nil 82 82 end trunk/lib/xsd/ns.rb
r1824 r1898 16 16 Namespace = 'http://www.w3.org/XML/1998/namespace' 17 17 18 KNOWN_TAG = { 19 XSD::Namespace => 'xsd', 20 XSD::InstanceNamespace => 'xsi', 21 } 22 18 23 class Assigner 19 def initialize 24 attr_reader :known_tag 25 26 def initialize(known_tag) 27 @known_tag = known_tag 20 28 @count = 0 21 29 end 22 30 23 31 def assign(ns) 32 if @known_tag.key?(ns) 33 return @known_tag[ns] 34 end 24 35 @count += 1 25 36 "n#{@count}" … … 35 46 def initialize(tag2ns = nil) 36 47 @tag2ns = tag2ns || ns_default 48 @ns2tag = @tag2ns.invert 37 49 @assigner = nil 38 @ns2tag = {}39 @ns2tag = @tag2ns.invert40 50 @default_namespace = nil 41 51 end 42 52 53 def known_tag 54 @assigner ||= Assigner.new(default_known_tag) 55 @assigner.known_tag 56 end 57 43 58 def assign(ns, tag = nil) 44 if (tag == '')59 if tag == '' 45 60 @default_namespace = ns 46 61 tag 47 62 else 48 @assigner ||= Assigner.new 63 @assigner ||= Assigner.new(default_known_tag) 49 64 tag ||= @assigner.assign(ns) 50 65 @ns2tag[ns] = tag … … 63 78 64 79 def clone_ns 65 cloned = NS.new(@tag2ns.dup)80 cloned = self.class.new(@tag2ns.dup) 66 81 cloned.assigner = @assigner 67 82 cloned.assign(@default_namespace, '') if @default_namespace … … 141 156 {'xml' => Namespace} 142 157 end 158 159 def default_known_tag 160 KNOWN_TAG 161 end 143 162 end 144 163 trunk/test/soap/test_custom_ns.rb
r1887 r1898 17 17 </env:Header> 18 18 <env:Body> 19 <n2:test xmlns:n2="my:foo">bi</n2:test> 19 <n2:test xmlns:n2="my:foo" 20 xmlns:n3="my:bar" 21 n3:baz="qux">bi</n2:test> 20 22 </env:Body> 21 23 </env:Envelope> … … 32 34 </ENV:Header> 33 35 <ENV:Body> 34 <myns:test>bi</myns:test> 36 <myns:test xmlns:bar="my:bar" 37 bar:baz="qux">bi</myns:test> 35 38 </ENV:Body> 36 39 </ENV:Envelope> … … 44 47 body = SOAP::SOAPBody.new() 45 48 bi = SOAP::SOAPElement.new(XSD::QName.new("my:foo", "bodyitem"), 'bi') 49 bi.extraattr[XSD::QName.new('my:bar', 'baz')] = 'qux' 46 50 body.add("test", bi) 47 51 env = SOAP::SOAPEnvelope.new(header, body) … … 50 54 result = SOAP::Processor.marshal(env, opt) 51 55 assert_equal(NORMAL_XML, result) 52 # ns customize56 # Envelope ns customize 53 57 ns = XSD::NS.new 54 58 ns.assign(SOAP::EnvelopeNamespace, 'ENV') 55 59 ns.assign('my:foo', 'myns') 56 opt = { :default_ns => ns } 60 # tag customize 61 tag = XSD::NS.new 62 tag.assign('my:bar', 'bar') 63 opt = { :default_ns => ns, :default_ns_tag => tag } 57 64 result = SOAP::Processor.marshal(env, opt) 58 65 assert_equal(CUSTOM_NS_XML, result)