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.
- data/CHANGELOG +320 -0
- data/MIT-LICENSE +21 -0
- data/README +381 -0
- data/Rakefile +180 -0
- data/TODO +32 -0
- data/lib/action_web_service.rb +71 -0
- data/lib/action_web_service/api.rb +297 -0
- data/lib/action_web_service/base.rb +38 -0
- data/lib/action_web_service/casting.rb +149 -0
- data/lib/action_web_service/client.rb +3 -0
- data/lib/action_web_service/client/base.rb +28 -0
- data/lib/action_web_service/client/soap_client.rb +113 -0
- data/lib/action_web_service/client/xmlrpc_client.rb +58 -0
- data/lib/action_web_service/container.rb +3 -0
- data/lib/action_web_service/container/action_controller_container.rb +93 -0
- data/lib/action_web_service/container/delegated_container.rb +86 -0
- data/lib/action_web_service/container/direct_container.rb +69 -0
- data/lib/action_web_service/dispatcher.rb +2 -0
- data/lib/action_web_service/dispatcher/abstract.rb +207 -0
- data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +379 -0
- data/lib/action_web_service/invocation.rb +202 -0
- data/lib/action_web_service/protocol.rb +4 -0
- data/lib/action_web_service/protocol/abstract.rb +115 -0
- data/lib/action_web_service/protocol/discovery.rb +37 -0
- data/lib/action_web_service/protocol/soap_protocol.rb +176 -0
- data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +242 -0
- data/lib/action_web_service/protocol/xmlrpc_protocol.rb +122 -0
- data/lib/action_web_service/scaffolding.rb +281 -0
- data/lib/action_web_service/soap/attachment.rb +107 -0
- data/lib/action_web_service/soap/baseData.rb +942 -0
- data/lib/action_web_service/soap/element.rb +258 -0
- data/lib/action_web_service/soap/encodingstyle/aspDotNetHandler.rb +213 -0
- data/lib/action_web_service/soap/encodingstyle/handler.rb +100 -0
- data/lib/action_web_service/soap/encodingstyle/literalHandler.rb +226 -0
- data/lib/action_web_service/soap/encodingstyle/soapHandler.rb +582 -0
- data/lib/action_web_service/soap/generator.rb +268 -0
- data/lib/action_web_service/soap/header/handler.rb +57 -0
- data/lib/action_web_service/soap/header/handlerset.rb +70 -0
- data/lib/action_web_service/soap/header/simplehandler.rb +44 -0
- data/lib/action_web_service/soap/httpconfigloader.rb +119 -0
- data/lib/action_web_service/soap/mapping.rb +10 -0
- data/lib/action_web_service/soap/mapping/factory.rb +355 -0
- data/lib/action_web_service/soap/mapping/mapping.rb +381 -0
- data/lib/action_web_service/soap/mapping/registry.rb +541 -0
- data/lib/action_web_service/soap/mapping/rubytypeFactory.rb +475 -0
- data/lib/action_web_service/soap/mapping/typeMap.rb +50 -0
- data/lib/action_web_service/soap/mapping/wsdlencodedregistry.rb +280 -0
- data/lib/action_web_service/soap/mapping/wsdlliteralregistry.rb +418 -0
- data/lib/action_web_service/soap/marshal.rb +59 -0
- data/lib/action_web_service/soap/mimemessage.rb +240 -0
- data/lib/action_web_service/soap/netHttpClient.rb +190 -0
- data/lib/action_web_service/soap/parser.rb +251 -0
- data/lib/action_web_service/soap/processor.rb +66 -0
- data/lib/action_web_service/soap/property.rb +333 -0
- data/lib/action_web_service/soap/rpc/cgistub.rb +206 -0
- data/lib/action_web_service/soap/rpc/driver.rb +254 -0
- data/lib/action_web_service/soap/rpc/element.rb +325 -0
- data/lib/action_web_service/soap/rpc/httpserver.rb +129 -0
- data/lib/action_web_service/soap/rpc/proxy.rb +497 -0
- data/lib/action_web_service/soap/rpc/router.rb +594 -0
- data/lib/action_web_service/soap/rpc/rpc.rb +25 -0
- data/lib/action_web_service/soap/rpc/soaplet.rb +162 -0
- data/lib/action_web_service/soap/rpc/standaloneServer.rb +43 -0
- data/lib/action_web_service/soap/soap.rb +140 -0
- data/lib/action_web_service/soap/streamHandler.rb +229 -0
- data/lib/action_web_service/soap/wsdlDriver.rb +575 -0
- data/lib/action_web_service/struct.rb +64 -0
- data/lib/action_web_service/support/class_inheritable_options.rb +28 -0
- data/lib/action_web_service/support/signature_types.rb +227 -0
- data/lib/action_web_service/test_invoke.rb +110 -0
- data/lib/action_web_service/version.rb +9 -0
- data/lib/action_web_service/wsdl/binding.rb +65 -0
- data/lib/action_web_service/wsdl/data.rb +64 -0
- data/lib/action_web_service/wsdl/definitions.rb +250 -0
- data/lib/action_web_service/wsdl/documentation.rb +32 -0
- data/lib/action_web_service/wsdl/import.rb +80 -0
- data/lib/action_web_service/wsdl/importer.rb +38 -0
- data/lib/action_web_service/wsdl/info.rb +39 -0
- data/lib/action_web_service/wsdl/message.rb +54 -0
- data/lib/action_web_service/wsdl/operation.rb +130 -0
- data/lib/action_web_service/wsdl/operationBinding.rb +108 -0
- data/lib/action_web_service/wsdl/param.rb +85 -0
- data/lib/action_web_service/wsdl/parser.rb +163 -0
- data/lib/action_web_service/wsdl/part.rb +52 -0
- data/lib/action_web_service/wsdl/port.rb +84 -0
- data/lib/action_web_service/wsdl/portType.rb +73 -0
- data/lib/action_web_service/wsdl/service.rb +61 -0
- data/lib/action_web_service/wsdl/soap/address.rb +40 -0
- data/lib/action_web_service/wsdl/soap/binding.rb +49 -0
- data/lib/action_web_service/wsdl/soap/body.rb +56 -0
- data/lib/action_web_service/wsdl/soap/cgiStubCreator.rb +76 -0
- data/lib/action_web_service/wsdl/soap/classDefCreator.rb +314 -0
- data/lib/action_web_service/wsdl/soap/classDefCreatorSupport.rb +126 -0
- data/lib/action_web_service/wsdl/soap/clientSkeltonCreator.rb +78 -0
- data/lib/action_web_service/wsdl/soap/complexType.rb +161 -0
- data/lib/action_web_service/wsdl/soap/data.rb +42 -0
- data/lib/action_web_service/wsdl/soap/definitions.rb +149 -0
- data/lib/action_web_service/wsdl/soap/driverCreator.rb +95 -0
- data/lib/action_web_service/wsdl/soap/element.rb +28 -0
- data/lib/action_web_service/wsdl/soap/fault.rb +56 -0
- data/lib/action_web_service/wsdl/soap/header.rb +86 -0
- data/lib/action_web_service/wsdl/soap/headerfault.rb +56 -0
- data/lib/action_web_service/wsdl/soap/mappingRegistryCreator.rb +92 -0
- data/lib/action_web_service/wsdl/soap/methodDefCreator.rb +228 -0
- data/lib/action_web_service/wsdl/soap/operation.rb +122 -0
- data/lib/action_web_service/wsdl/soap/servantSkeltonCreator.rb +67 -0
- data/lib/action_web_service/wsdl/soap/standaloneServerStubCreator.rb +85 -0
- data/lib/action_web_service/wsdl/soap/wsdl2ruby.rb +176 -0
- data/lib/action_web_service/wsdl/types.rb +43 -0
- data/lib/action_web_service/wsdl/wsdl.rb +23 -0
- data/lib/action_web_service/wsdl/xmlSchema/all.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/annotation.rb +34 -0
- data/lib/action_web_service/wsdl/xmlSchema/any.rb +56 -0
- data/lib/action_web_service/wsdl/xmlSchema/attribute.rb +127 -0
- data/lib/action_web_service/wsdl/xmlSchema/choice.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/complexContent.rb +92 -0
- data/lib/action_web_service/wsdl/xmlSchema/complexType.rb +139 -0
- data/lib/action_web_service/wsdl/xmlSchema/content.rb +96 -0
- data/lib/action_web_service/wsdl/xmlSchema/data.rb +80 -0
- data/lib/action_web_service/wsdl/xmlSchema/element.rb +154 -0
- data/lib/action_web_service/wsdl/xmlSchema/enumeration.rb +36 -0
- data/lib/action_web_service/wsdl/xmlSchema/import.rb +65 -0
- data/lib/action_web_service/wsdl/xmlSchema/importer.rb +87 -0
- data/lib/action_web_service/wsdl/xmlSchema/include.rb +54 -0
- data/lib/action_web_service/wsdl/xmlSchema/length.rb +35 -0
- data/lib/action_web_service/wsdl/xmlSchema/parser.rb +166 -0
- data/lib/action_web_service/wsdl/xmlSchema/pattern.rb +36 -0
- data/lib/action_web_service/wsdl/xmlSchema/schema.rb +143 -0
- data/lib/action_web_service/wsdl/xmlSchema/sequence.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleContent.rb +65 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleExtension.rb +54 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleRestriction.rb +73 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleType.rb +73 -0
- data/lib/action_web_service/wsdl/xmlSchema/unique.rb +34 -0
- data/lib/action_web_service/wsdl/xmlSchema/xsd2ruby.rb +107 -0
- data/lib/action_web_service/xsd/charset.rb +187 -0
- data/lib/action_web_service/xsd/codegen.rb +12 -0
- data/lib/action_web_service/xsd/codegen/classdef.rb +203 -0
- data/lib/action_web_service/xsd/codegen/commentdef.rb +34 -0
- data/lib/action_web_service/xsd/codegen/gensupport.rb +166 -0
- data/lib/action_web_service/xsd/codegen/methoddef.rb +63 -0
- data/lib/action_web_service/xsd/codegen/moduledef.rb +191 -0
- data/lib/action_web_service/xsd/datatypes.rb +1269 -0
- data/lib/action_web_service/xsd/datatypes1999.rb +20 -0
- data/lib/action_web_service/xsd/iconvcharset.rb +33 -0
- data/lib/action_web_service/xsd/mapping.rb +42 -0
- data/lib/action_web_service/xsd/namedelements.rb +95 -0
- data/lib/action_web_service/xsd/ns.rb +140 -0
- data/lib/action_web_service/xsd/qname.rb +78 -0
- data/lib/action_web_service/xsd/xmlparser.rb +61 -0
- data/lib/action_web_service/xsd/xmlparser/parser.rb +96 -0
- data/lib/action_web_service/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/action_web_service/xsd/xmlparser/xmlparser.rb +50 -0
- data/lib/action_web_service/xsd/xmlparser/xmlscanner.rb +147 -0
- data/lib/actionwebservice.rb +1 -0
- data/setup.rb +1379 -0
- data/test/abstract_client.rb +183 -0
- data/test/abstract_dispatcher.rb +548 -0
- data/test/abstract_unit.rb +45 -0
- data/test/api_test.rb +103 -0
- data/test/apis/auto_load_api.rb +3 -0
- data/test/apis/broken_auto_load_api.rb +2 -0
- data/test/base_test.rb +42 -0
- data/test/casting_test.rb +95 -0
- data/test/client_soap_test.rb +156 -0
- data/test/client_xmlrpc_test.rb +153 -0
- data/test/container_test.rb +73 -0
- data/test/dispatcher_action_controller_soap_test.rb +139 -0
- data/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
- data/test/fixtures/db_definitions/mysql.sql +8 -0
- data/test/fixtures/db_definitions/sqlite3.sql +8 -0
- data/test/fixtures/users.yml +12 -0
- data/test/gencov +3 -0
- data/test/invocation_test.rb +185 -0
- data/test/run +6 -0
- data/test/scaffolded_controller_test.rb +146 -0
- data/test/struct_test.rb +52 -0
- data/test/test_invoke_test.rb +112 -0
- metadata +265 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
# XSD4R - XML Schema Datatype 1999 support
|
2
|
+
# Copyright (C) 2001, 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/xsd/datatypes'
|
10
|
+
|
11
|
+
|
12
|
+
module XSD
|
13
|
+
Namespace.replace('http://www.w3.org/1999/XMLSchema')
|
14
|
+
InstanceNamespace.replace('http://www.w3.org/1999/XMLSchema-instance')
|
15
|
+
AnyTypeLiteral.replace('ur-type')
|
16
|
+
AnySimpleTypeLiteral.replace('ur-type')
|
17
|
+
NilLiteral.replace('null')
|
18
|
+
NilValue.replace('1')
|
19
|
+
DateTimeLiteral.replace('timeInstant')
|
20
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# XSD4R - Charset handling with iconv.
|
2
|
+
# Copyright (C) 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 'iconv'
|
10
|
+
|
11
|
+
|
12
|
+
module XSD
|
13
|
+
|
14
|
+
|
15
|
+
class IconvCharset
|
16
|
+
def self.safe_iconv(to, from, str)
|
17
|
+
iconv = Iconv.new(to, from)
|
18
|
+
out = ""
|
19
|
+
begin
|
20
|
+
out << iconv.iconv(str)
|
21
|
+
rescue Iconv::IllegalSequence => e
|
22
|
+
out << e.success
|
23
|
+
ch, str = e.failed.split(//, 2)
|
24
|
+
out << '?'
|
25
|
+
warn("Failed to convert #{ch}")
|
26
|
+
retry
|
27
|
+
end
|
28
|
+
return out
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# XSD4R - XML Mapping for Ruby
|
2
|
+
# Copyright (C) 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 "soap/parser"
|
10
|
+
require 'action_web_service/soap/encodingstyle/literalHandler'
|
11
|
+
require "soap/generator"
|
12
|
+
require "soap/mapping"
|
13
|
+
require "soap/mapping/wsdlliteralregistry"
|
14
|
+
|
15
|
+
|
16
|
+
module XSD
|
17
|
+
|
18
|
+
|
19
|
+
module Mapping
|
20
|
+
MappingRegistry = SOAP::Mapping::WSDLLiteralRegistry.new
|
21
|
+
MappingOpt = {:default_encodingstyle => SOAP::LiteralNamespace}
|
22
|
+
|
23
|
+
def self.obj2xml(obj, elename = nil, io = nil)
|
24
|
+
if !elename.nil? and !elename.is_a?(XSD::QName)
|
25
|
+
elename = XSD::QName.new(nil, elename)
|
26
|
+
end
|
27
|
+
elename ||= XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s))
|
28
|
+
soap = SOAP::Mapping.obj2soap(obj, MappingRegistry)
|
29
|
+
soap.elename = elename
|
30
|
+
generator = SOAP::SOAPGenerator.new(MappingOpt)
|
31
|
+
generator.generate(soap, io)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.xml2obj(stream)
|
35
|
+
parser = SOAP::Parser.new(MappingOpt)
|
36
|
+
soap = parser.parse(stream)
|
37
|
+
SOAP::Mapping.soap2obj(soap, MappingRegistry)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# XSD4R - WSDL named element collection.
|
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
|
+
module XSD
|
10
|
+
|
11
|
+
|
12
|
+
class NamedElements
|
13
|
+
include Enumerable
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@elements = []
|
17
|
+
@cache = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def dup
|
21
|
+
o = NamedElements.new
|
22
|
+
o.elements = @elements.dup
|
23
|
+
o
|
24
|
+
end
|
25
|
+
|
26
|
+
def freeze
|
27
|
+
super
|
28
|
+
@elements.freeze
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def empty?
|
33
|
+
size == 0
|
34
|
+
end
|
35
|
+
|
36
|
+
def size
|
37
|
+
@elements.size
|
38
|
+
end
|
39
|
+
|
40
|
+
def [](idx)
|
41
|
+
if idx.is_a?(Numeric)
|
42
|
+
@elements[idx]
|
43
|
+
else
|
44
|
+
@cache[idx] ||= @elements.find { |item| item.name == idx }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_name(name)
|
49
|
+
@elements.find { |item| item.name.name == name }
|
50
|
+
end
|
51
|
+
|
52
|
+
def keys
|
53
|
+
collect { |element| element.name }
|
54
|
+
end
|
55
|
+
|
56
|
+
def each
|
57
|
+
@elements.each do |element|
|
58
|
+
yield(element)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def <<(rhs)
|
63
|
+
@elements << rhs
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete(rhs)
|
68
|
+
@elements.delete(rhs)
|
69
|
+
end
|
70
|
+
|
71
|
+
def +(rhs)
|
72
|
+
o = NamedElements.new
|
73
|
+
o.elements = @elements + rhs.elements
|
74
|
+
o
|
75
|
+
end
|
76
|
+
|
77
|
+
def concat(rhs)
|
78
|
+
@elements.concat(rhs.elements)
|
79
|
+
self
|
80
|
+
end
|
81
|
+
|
82
|
+
Empty = NamedElements.new.freeze
|
83
|
+
|
84
|
+
protected
|
85
|
+
|
86
|
+
def elements=(rhs)
|
87
|
+
@elements = rhs
|
88
|
+
end
|
89
|
+
|
90
|
+
def elements
|
91
|
+
@elements
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# XSD4R - XML Schema Namespace library
|
2
|
+
# Copyright (C) 2000-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/datatypes'
|
10
|
+
|
11
|
+
|
12
|
+
module XSD
|
13
|
+
|
14
|
+
|
15
|
+
class NS
|
16
|
+
class Assigner
|
17
|
+
def initialize
|
18
|
+
@count = 0
|
19
|
+
end
|
20
|
+
|
21
|
+
def assign(ns)
|
22
|
+
@count += 1
|
23
|
+
"n#{@count}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_reader :default_namespace
|
28
|
+
|
29
|
+
class FormatError < Error; end
|
30
|
+
|
31
|
+
public
|
32
|
+
|
33
|
+
def initialize(tag2ns = {})
|
34
|
+
@tag2ns = tag2ns
|
35
|
+
@assigner = nil
|
36
|
+
@ns2tag = {}
|
37
|
+
@tag2ns.each do |tag, ns|
|
38
|
+
@ns2tag[ns] = tag
|
39
|
+
end
|
40
|
+
@default_namespace = nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def assign(ns, tag = nil)
|
44
|
+
if (tag == '')
|
45
|
+
@default_namespace = ns
|
46
|
+
tag
|
47
|
+
else
|
48
|
+
@assigner ||= Assigner.new
|
49
|
+
tag ||= @assigner.assign(ns)
|
50
|
+
@ns2tag[ns] = tag
|
51
|
+
@tag2ns[tag] = ns
|
52
|
+
tag
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def assigned?(ns)
|
57
|
+
@default_namespace == ns or @ns2tag.key?(ns)
|
58
|
+
end
|
59
|
+
|
60
|
+
def assigned_tag?(tag)
|
61
|
+
@tag2ns.key?(tag)
|
62
|
+
end
|
63
|
+
|
64
|
+
def clone_ns
|
65
|
+
cloned = NS.new(@tag2ns.dup)
|
66
|
+
cloned.assigner = @assigner
|
67
|
+
cloned.assign(@default_namespace, '') if @default_namespace
|
68
|
+
cloned
|
69
|
+
end
|
70
|
+
|
71
|
+
def name(name)
|
72
|
+
if (name.namespace == @default_namespace)
|
73
|
+
name.name
|
74
|
+
elsif @ns2tag.key?(name.namespace)
|
75
|
+
"#{@ns2tag[name.namespace]}:#{name.name}"
|
76
|
+
else
|
77
|
+
raise FormatError.new("namespace: #{name.namespace} not defined yet")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def compare(ns, name, rhs)
|
82
|
+
if (ns == @default_namespace)
|
83
|
+
return true if (name == rhs)
|
84
|
+
end
|
85
|
+
@tag2ns.each do |assigned_tag, assigned_ns|
|
86
|
+
if assigned_ns == ns && "#{assigned_tag}:#{name}" == rhs
|
87
|
+
return true
|
88
|
+
end
|
89
|
+
end
|
90
|
+
false
|
91
|
+
end
|
92
|
+
|
93
|
+
# $1 and $2 are necessary.
|
94
|
+
ParseRegexp = Regexp.new('^([^:]+)(?::(.+))?$')
|
95
|
+
|
96
|
+
def parse(str, local = false)
|
97
|
+
if ParseRegexp =~ str
|
98
|
+
if (name = $2) and (ns = @tag2ns[$1])
|
99
|
+
return XSD::QName.new(ns, name)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
XSD::QName.new(local ? nil : @default_namespace, str)
|
103
|
+
end
|
104
|
+
|
105
|
+
# For local attribute key parsing
|
106
|
+
# <foo xmlns="urn:a" xmlns:n1="urn:a" bar="1" n1:baz="2" />
|
107
|
+
# =>
|
108
|
+
# {}bar, {urn:a}baz
|
109
|
+
def parse_local(elem)
|
110
|
+
ParseRegexp =~ elem
|
111
|
+
if $2
|
112
|
+
ns = @tag2ns[$1]
|
113
|
+
name = $2
|
114
|
+
if !ns
|
115
|
+
raise FormatError.new("unknown namespace qualifier: #{$1}")
|
116
|
+
end
|
117
|
+
elsif $1
|
118
|
+
ns = nil
|
119
|
+
name = $1
|
120
|
+
else
|
121
|
+
raise FormatError.new("illegal element format: #{elem}")
|
122
|
+
end
|
123
|
+
XSD::QName.new(ns, name)
|
124
|
+
end
|
125
|
+
|
126
|
+
def each_ns
|
127
|
+
@ns2tag.each do |ns, tag|
|
128
|
+
yield(ns, tag)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
protected
|
133
|
+
|
134
|
+
def assigner=(assigner)
|
135
|
+
@assigner = assigner
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# XSD4R - XML QName definition.
|
2
|
+
# Copyright (C) 2002, 2003, 2004 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 XSD
|
10
|
+
|
11
|
+
|
12
|
+
class QName
|
13
|
+
attr_accessor :namespace
|
14
|
+
attr_accessor :name
|
15
|
+
attr_accessor :source
|
16
|
+
|
17
|
+
def initialize(namespace = nil, name = nil)
|
18
|
+
@namespace = namespace
|
19
|
+
@name = name
|
20
|
+
@source = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def dup_name(name)
|
24
|
+
XSD::QName.new(@namespace, name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def dump
|
28
|
+
ns = @namespace.nil? ? 'nil' : @namespace.dump
|
29
|
+
name = @name.nil? ? 'nil' : @name.dump
|
30
|
+
"XSD::QName.new(#{ns}, #{name})"
|
31
|
+
end
|
32
|
+
|
33
|
+
def match(rhs)
|
34
|
+
if rhs.namespace and (rhs.namespace != @namespace)
|
35
|
+
return false
|
36
|
+
end
|
37
|
+
if rhs.name and (rhs.name != @name)
|
38
|
+
return false
|
39
|
+
end
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
def ==(rhs)
|
44
|
+
!rhs.nil? and @namespace == rhs.namespace and @name == rhs.name
|
45
|
+
end
|
46
|
+
|
47
|
+
def ===(rhs)
|
48
|
+
(self == rhs)
|
49
|
+
end
|
50
|
+
|
51
|
+
def eql?(rhs)
|
52
|
+
(self == rhs)
|
53
|
+
end
|
54
|
+
|
55
|
+
def hash
|
56
|
+
@namespace.hash ^ @name.hash
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_s
|
60
|
+
"{#{ namespace }}#{ name }"
|
61
|
+
end
|
62
|
+
|
63
|
+
def inspect
|
64
|
+
sprintf("#<%s:0x%x %s>", self.class.name, __id__,
|
65
|
+
"{#{ namespace }}#{ name }")
|
66
|
+
end
|
67
|
+
|
68
|
+
NormalizedNameRegexp = /^\{([^}]*)\}(.*)$/
|
69
|
+
def parse(str)
|
70
|
+
NormalizedNameRegexp =~ str
|
71
|
+
self.new($1, $2)
|
72
|
+
end
|
73
|
+
|
74
|
+
EMPTY = QName.new.freeze
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# XSD4R - XML Instance parser library.
|
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/xsd/xmlparser/parser'
|
10
|
+
|
11
|
+
|
12
|
+
module XSD
|
13
|
+
|
14
|
+
|
15
|
+
module XMLParser
|
16
|
+
def create_parser(host, opt)
|
17
|
+
XSD::XMLParser::Parser.create_parser(host, opt)
|
18
|
+
end
|
19
|
+
module_function :create_parser
|
20
|
+
|
21
|
+
# $1 is necessary.
|
22
|
+
NSParseRegexp = Regexp.new('^xmlns:?(.*)$')
|
23
|
+
|
24
|
+
def filter_ns(ns, attrs)
|
25
|
+
return attrs if attrs.nil? or attrs.empty?
|
26
|
+
newattrs = {}
|
27
|
+
attrs.each do |key, value|
|
28
|
+
if (NSParseRegexp =~ key)
|
29
|
+
# '' means 'default namespace'.
|
30
|
+
tag = $1 || ''
|
31
|
+
ns.assign(value, tag)
|
32
|
+
else
|
33
|
+
newattrs[key] = value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
newattrs
|
37
|
+
end
|
38
|
+
module_function :filter_ns
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
# Try to load XML processor.
|
46
|
+
loaded = false
|
47
|
+
[
|
48
|
+
'action_web_service/xsd/xmlparser/xmlparser',
|
49
|
+
'action_web_service/xsd/xmlparser/xmlscanner',
|
50
|
+
'action_web_service/xsd/xmlparser/rexmlparser',
|
51
|
+
].each do |lib|
|
52
|
+
begin
|
53
|
+
require lib
|
54
|
+
loaded = true
|
55
|
+
break
|
56
|
+
rescue LoadError
|
57
|
+
end
|
58
|
+
end
|
59
|
+
unless loaded
|
60
|
+
raise RuntimeError.new("XML processor module not found.")
|
61
|
+
end
|