soap2r 1.5.8
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/bin/wsdl2ruby.rb +137 -0
- data/bin/xsd2ruby.rb +90 -0
- data/lib/soap/attachment.rb +108 -0
- data/lib/soap/attrproxy.rb +34 -0
- data/lib/soap/baseData.rb +1094 -0
- data/lib/soap/element.rb +277 -0
- data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
- data/lib/soap/encodingstyle/handler.rb +120 -0
- data/lib/soap/encodingstyle/literalHandler.rb +195 -0
- data/lib/soap/encodingstyle/soapHandler.rb +559 -0
- data/lib/soap/filter.rb +13 -0
- data/lib/soap/filter/filterchain.rb +51 -0
- data/lib/soap/filter/handler.rb +31 -0
- data/lib/soap/filter/streamhandler.rb +29 -0
- data/lib/soap/generator.rb +299 -0
- data/lib/soap/header/handler.rb +61 -0
- data/lib/soap/header/handlerset.rb +70 -0
- data/lib/soap/header/mappinghandler.rb +47 -0
- data/lib/soap/header/simplehandler.rb +44 -0
- data/lib/soap/httpconfigloader.rb +141 -0
- data/lib/soap/mapping.rb +12 -0
- data/lib/soap/mapping/encodedregistry.rb +537 -0
- data/lib/soap/mapping/factory.rb +388 -0
- data/lib/soap/mapping/literalregistry.rb +391 -0
- data/lib/soap/mapping/mapping.rb +576 -0
- data/lib/soap/mapping/registry.rb +295 -0
- data/lib/soap/mapping/rubytypeFactory.rb +446 -0
- data/lib/soap/mapping/schemadefinition.rb +170 -0
- data/lib/soap/mapping/typeMap.rb +106 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +211 -0
- data/lib/soap/mapping/wsdlliteralregistry.rb +248 -0
- data/lib/soap/marshal.rb +59 -0
- data/lib/soap/mimemessage.rb +241 -0
- data/lib/soap/nestedexception.rb +42 -0
- data/lib/soap/netHttpClient.rb +241 -0
- data/lib/soap/ns.rb +34 -0
- data/lib/soap/parser.rb +252 -0
- data/lib/soap/processor.rb +66 -0
- data/lib/soap/property.rb +319 -0
- data/lib/soap/proxy.rb +14 -0
- data/lib/soap/rpc/cgistub.rb +247 -0
- data/lib/soap/rpc/driver.rb +221 -0
- data/lib/soap/rpc/element.rb +374 -0
- data/lib/soap/rpc/httpserver.rb +142 -0
- data/lib/soap/rpc/methodDef.rb +68 -0
- data/lib/soap/rpc/proxy.rb +572 -0
- data/lib/soap/rpc/router.rb +662 -0
- data/lib/soap/rpc/rpc.rb +25 -0
- data/lib/soap/rpc/soaplet.rb +200 -0
- data/lib/soap/rpc/standaloneServer.rb +43 -0
- data/lib/soap/soap.rb +151 -0
- data/lib/soap/streamHandler.rb +301 -0
- data/lib/soap/wsdlDriver.rb +164 -0
- data/lib/wsdl/binding.rb +65 -0
- data/lib/wsdl/data.rb +64 -0
- data/lib/wsdl/definitions.rb +236 -0
- data/lib/wsdl/documentation.rb +32 -0
- data/lib/wsdl/import.rb +80 -0
- data/lib/wsdl/importer.rb +38 -0
- data/lib/wsdl/info.rb +50 -0
- data/lib/wsdl/message.rb +54 -0
- data/lib/wsdl/operation.rb +151 -0
- data/lib/wsdl/operationBinding.rb +240 -0
- data/lib/wsdl/param.rb +93 -0
- data/lib/wsdl/parser.rb +164 -0
- data/lib/wsdl/part.rb +52 -0
- data/lib/wsdl/port.rb +66 -0
- data/lib/wsdl/portType.rb +75 -0
- data/lib/wsdl/service.rb +61 -0
- data/lib/wsdl/soap/address.rb +40 -0
- data/lib/wsdl/soap/binding.rb +49 -0
- data/lib/wsdl/soap/body.rb +58 -0
- data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
- data/lib/wsdl/soap/classDefCreator.rb +433 -0
- data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
- data/lib/wsdl/soap/classNameCreator.rb +54 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
- data/lib/wsdl/soap/complexType.rb +173 -0
- data/lib/wsdl/soap/data.rb +42 -0
- data/lib/wsdl/soap/definitions.rb +200 -0
- data/lib/wsdl/soap/driverCreator.rb +118 -0
- data/lib/wsdl/soap/element.rb +33 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
- data/lib/wsdl/soap/fault.rb +56 -0
- data/lib/wsdl/soap/header.rb +86 -0
- data/lib/wsdl/soap/headerfault.rb +56 -0
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
- data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
- data/lib/wsdl/soap/methodDefCreator.rb +199 -0
- data/lib/wsdl/soap/operation.rb +112 -0
- data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
- data/lib/wsdl/soap/servletStubCreator.rb +104 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
- data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
- data/lib/wsdl/types.rb +44 -0
- data/lib/wsdl/wsdl.rb +24 -0
- data/lib/wsdl/xmlSchema/all.rb +24 -0
- data/lib/wsdl/xmlSchema/annotation.rb +34 -0
- data/lib/wsdl/xmlSchema/any.rb +61 -0
- data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
- data/lib/wsdl/xmlSchema/attribute.rb +104 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
- data/lib/wsdl/xmlSchema/choice.rb +58 -0
- data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
- data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
- data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
- data/lib/wsdl/xmlSchema/complexType.rb +193 -0
- data/lib/wsdl/xmlSchema/content.rb +95 -0
- data/lib/wsdl/xmlSchema/data.rb +116 -0
- data/lib/wsdl/xmlSchema/element.rb +153 -0
- data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
- data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
- data/lib/wsdl/xmlSchema/group.rb +100 -0
- data/lib/wsdl/xmlSchema/import.rb +53 -0
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/importer.rb +102 -0
- data/lib/wsdl/xmlSchema/include.rb +48 -0
- data/lib/wsdl/xmlSchema/length.rb +37 -0
- data/lib/wsdl/xmlSchema/list.rb +48 -0
- data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
- data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/minlength.rb +37 -0
- data/lib/wsdl/xmlSchema/parser.rb +167 -0
- data/lib/wsdl/xmlSchema/pattern.rb +36 -0
- data/lib/wsdl/xmlSchema/ref.rb +33 -0
- data/lib/wsdl/xmlSchema/schema.rb +178 -0
- data/lib/wsdl/xmlSchema/sequence.rb +54 -0
- data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
- data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
- data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
- data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
- data/lib/wsdl/xmlSchema/union.rb +35 -0
- data/lib/wsdl/xmlSchema/unique.rb +34 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
- data/lib/xsd/charset.rb +193 -0
- data/lib/xsd/codegen.rb +12 -0
- data/lib/xsd/codegen/classdef.rb +208 -0
- data/lib/xsd/codegen/commentdef.rb +34 -0
- data/lib/xsd/codegen/gensupport.rb +273 -0
- data/lib/xsd/codegen/methoddef.rb +70 -0
- data/lib/xsd/codegen/moduledef.rb +208 -0
- data/lib/xsd/datatypes.rb +1466 -0
- data/lib/xsd/datatypes1999.rb +20 -0
- data/lib/xsd/iconvcharset.rb +39 -0
- data/lib/xsd/mapping.rb +68 -0
- data/lib/xsd/namedelements.rb +132 -0
- data/lib/xsd/ns.rb +182 -0
- data/lib/xsd/qname.rb +79 -0
- data/lib/xsd/xmlparser.rb +76 -0
- data/lib/xsd/xmlparser/libxmlparser.rb +115 -0
- data/lib/xsd/xmlparser/parser.rb +100 -0
- data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
- data/lib/xsd/xmlparser/xmlparser.rb +50 -0
- data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
- metadata +224 -0
@@ -0,0 +1,153 @@
|
|
1
|
+
# WSDL4R - XMLSchema element definition.
|
2
|
+
# Copyright (C) 2000-2007 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 'wsdl/info'
|
10
|
+
require 'wsdl/xmlSchema/ref'
|
11
|
+
|
12
|
+
|
13
|
+
module WSDL
|
14
|
+
module XMLSchema
|
15
|
+
|
16
|
+
|
17
|
+
class Element < Info
|
18
|
+
include Ref
|
19
|
+
|
20
|
+
attr_writer :name # required
|
21
|
+
attr_writer :form
|
22
|
+
attr_writer :type
|
23
|
+
attr_writer :local_simpletype
|
24
|
+
attr_writer :local_complextype
|
25
|
+
attr_writer :constraint
|
26
|
+
attr_accessor :maxoccurs
|
27
|
+
attr_accessor :minoccurs
|
28
|
+
attr_writer :nillable
|
29
|
+
|
30
|
+
attr_reader_ref :name
|
31
|
+
attr_reader_ref :form
|
32
|
+
attr_reader_ref :type
|
33
|
+
attr_reader_ref :local_simpletype
|
34
|
+
attr_reader_ref :local_complextype
|
35
|
+
attr_reader_ref :constraint
|
36
|
+
attr_reader_ref :nillable
|
37
|
+
attr_reader_ref :default
|
38
|
+
attr_reader_ref :abstract
|
39
|
+
|
40
|
+
def initialize(name = nil, type = nil)
|
41
|
+
super()
|
42
|
+
@name = name
|
43
|
+
@form = nil
|
44
|
+
@type = type
|
45
|
+
@local_simpletype = @local_complextype = nil
|
46
|
+
@constraint = nil
|
47
|
+
@maxoccurs = 1
|
48
|
+
@minoccurs = 1
|
49
|
+
@nillable = nil
|
50
|
+
@default = nil
|
51
|
+
@abstract = false
|
52
|
+
@ref = nil
|
53
|
+
@refelement = nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def empty?
|
57
|
+
!(local_simpletype || local_complextype || constraint || type)
|
58
|
+
end
|
59
|
+
|
60
|
+
def targetnamespace
|
61
|
+
parent.targetnamespace
|
62
|
+
end
|
63
|
+
|
64
|
+
def elementformdefault
|
65
|
+
parent.elementformdefault
|
66
|
+
end
|
67
|
+
|
68
|
+
def elementform
|
69
|
+
self.form.nil? ? parent.elementformdefault : self.form
|
70
|
+
end
|
71
|
+
|
72
|
+
def parse_element(element)
|
73
|
+
case element
|
74
|
+
when SimpleTypeName
|
75
|
+
@local_simpletype = SimpleType.new
|
76
|
+
@local_simpletype
|
77
|
+
when ComplexTypeName
|
78
|
+
@type = nil
|
79
|
+
@local_complextype = ComplexType.new
|
80
|
+
@local_complextype
|
81
|
+
when UniqueName
|
82
|
+
@constraint = Unique.new
|
83
|
+
@constraint
|
84
|
+
else
|
85
|
+
nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def parse_attr(attr, value)
|
90
|
+
case attr
|
91
|
+
when NameAttrName
|
92
|
+
# namespace may be nil
|
93
|
+
if directelement? or elementform == 'qualified'
|
94
|
+
@name = XSD::QName.new(targetnamespace, value.source)
|
95
|
+
else
|
96
|
+
@name = XSD::QName.new(nil, value.source)
|
97
|
+
end
|
98
|
+
when FormAttrName
|
99
|
+
@form = value.source
|
100
|
+
if @form != 'qualified' and @name.namespace
|
101
|
+
@name = XSD::QName.new(nil, @name.name)
|
102
|
+
end
|
103
|
+
@form
|
104
|
+
when TypeAttrName
|
105
|
+
@type = value
|
106
|
+
when RefAttrName
|
107
|
+
@ref = value
|
108
|
+
when MaxOccursAttrName
|
109
|
+
if parent.is_a?(All)
|
110
|
+
if value.source != '1'
|
111
|
+
raise Parser::AttributeConstraintError.new(
|
112
|
+
"cannot parse #{value} for #{attr}")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
if value.source == 'unbounded'
|
116
|
+
@maxoccurs = nil
|
117
|
+
else
|
118
|
+
@maxoccurs = Integer(value.source)
|
119
|
+
end
|
120
|
+
value.source
|
121
|
+
when MinOccursAttrName
|
122
|
+
if parent.is_a?(All)
|
123
|
+
unless ['0', '1'].include?(value.source)
|
124
|
+
raise Parser::AttributeConstraintError.new(
|
125
|
+
"cannot parse #{value} for #{attr}")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
@minoccurs = Integer(value.source)
|
129
|
+
when NillableAttrName
|
130
|
+
@nillable = to_boolean(value)
|
131
|
+
when DefaultAttrName
|
132
|
+
@default = value.source
|
133
|
+
when AbstractAttrName
|
134
|
+
@abstract = to_boolean(value)
|
135
|
+
else
|
136
|
+
nil
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
private
|
141
|
+
|
142
|
+
def directelement?
|
143
|
+
parent.is_a?(Schema)
|
144
|
+
end
|
145
|
+
|
146
|
+
def refelement
|
147
|
+
@refelement ||= (@ref ? root.collect_elements[@ref] : nil)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
end
|
153
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# WSDL4R - XMLSchema enumeration definition for WSDL.
|
2
|
+
# Copyright (C) 2000-2007 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 'wsdl/info'
|
10
|
+
|
11
|
+
|
12
|
+
module WSDL
|
13
|
+
module XMLSchema
|
14
|
+
|
15
|
+
|
16
|
+
class Enumeration < Info
|
17
|
+
def initialize
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def parse_element(element)
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def parse_attr(attr, value)
|
26
|
+
case attr
|
27
|
+
when ValueAttrName
|
28
|
+
parent.enumeration << value.source
|
29
|
+
value.source
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# WSDL4R - XMLSchema fractionDigits definition for WSDL.
|
2
|
+
# Copyright (C) 2000-2007 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 'wsdl/info'
|
10
|
+
|
11
|
+
|
12
|
+
module WSDL
|
13
|
+
module XMLSchema
|
14
|
+
|
15
|
+
|
16
|
+
class FractionDigits < Info
|
17
|
+
def initialize
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def parse_element(element)
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def parse_attr(attr, value)
|
26
|
+
case attr
|
27
|
+
when FixedAttrName
|
28
|
+
parent.fixed[:fractiondigits] = to_boolean(value)
|
29
|
+
when ValueAttrName
|
30
|
+
parent.fractiondigits = to_int(value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# WSDL4R - XMLSchema group definition.
|
2
|
+
# Copyright (C) 2000-2007 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 'wsdl/info'
|
10
|
+
require 'wsdl/xmlSchema/ref'
|
11
|
+
|
12
|
+
|
13
|
+
module WSDL
|
14
|
+
module XMLSchema
|
15
|
+
|
16
|
+
|
17
|
+
class Group < Info
|
18
|
+
include Ref
|
19
|
+
|
20
|
+
attr_writer :name # required
|
21
|
+
attr_accessor :maxoccurs
|
22
|
+
attr_accessor :minoccurs
|
23
|
+
attr_writer :content
|
24
|
+
|
25
|
+
attr_reader_ref :name
|
26
|
+
attr_reader_ref :content
|
27
|
+
|
28
|
+
def initialize(name = nil)
|
29
|
+
super()
|
30
|
+
@name = name
|
31
|
+
@maxoccurs = 1
|
32
|
+
@minoccurs = 1
|
33
|
+
@content = nil
|
34
|
+
@ref = nil
|
35
|
+
@refelement = nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def targetnamespace
|
39
|
+
parent.targetnamespace
|
40
|
+
end
|
41
|
+
|
42
|
+
def elementformdefault
|
43
|
+
parent.elementformdefault
|
44
|
+
end
|
45
|
+
|
46
|
+
def parse_element(element)
|
47
|
+
case element
|
48
|
+
when AllName
|
49
|
+
@content = All.new
|
50
|
+
when SequenceName
|
51
|
+
@content = Sequence.new
|
52
|
+
when ChoiceName
|
53
|
+
@content = Choice.new
|
54
|
+
else
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def parse_attr(attr, value)
|
60
|
+
case attr
|
61
|
+
when NameAttrName
|
62
|
+
@name = XSD::QName.new(targetnamespace, value.source)
|
63
|
+
when RefAttrName
|
64
|
+
@ref = value
|
65
|
+
when MaxOccursAttrName
|
66
|
+
if parent.is_a?(All)
|
67
|
+
if value.source != '1'
|
68
|
+
raise Parser::AttributeConstraintError.new(
|
69
|
+
"cannot parse #{value} for #{attr}")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
if value.source == 'unbounded'
|
73
|
+
@maxoccurs = nil
|
74
|
+
else
|
75
|
+
@maxoccurs = Integer(value.source)
|
76
|
+
end
|
77
|
+
value.source
|
78
|
+
when MinOccursAttrName
|
79
|
+
if parent.is_a?(All)
|
80
|
+
unless ['0', '1'].include?(value.source)
|
81
|
+
raise Parser::AttributeConstraintError.new(
|
82
|
+
"cannot parse #{value} for #{attr}")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
@minoccurs = Integer(value.source)
|
86
|
+
else
|
87
|
+
nil
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def refelement
|
94
|
+
@refelement ||= (@ref ? root.collect_modelgroups[@ref] : nil)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# WSDL4R - XMLSchema import definition.
|
2
|
+
# Copyright (C) 2000-2007 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 'wsdl/info'
|
10
|
+
require 'wsdl/xmlSchema/importer'
|
11
|
+
require 'wsdl/xmlSchema/importHandler'
|
12
|
+
|
13
|
+
|
14
|
+
module WSDL
|
15
|
+
module XMLSchema
|
16
|
+
|
17
|
+
|
18
|
+
class Import < Info
|
19
|
+
attr_reader :namespace
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
super
|
23
|
+
@namespace = nil
|
24
|
+
@handler = ImportHandler.new
|
25
|
+
end
|
26
|
+
|
27
|
+
def schemalocation
|
28
|
+
@handler.schemalocation
|
29
|
+
end
|
30
|
+
|
31
|
+
def content
|
32
|
+
@handler.content
|
33
|
+
end
|
34
|
+
|
35
|
+
def parse_element(element)
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse_attr(attr, value)
|
40
|
+
case attr
|
41
|
+
when NamespaceAttrName
|
42
|
+
@namespace = value.source
|
43
|
+
when SchemaLocationAttrName
|
44
|
+
@handler.parse_schemalocation(value.source, root, parent)
|
45
|
+
else
|
46
|
+
nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# WSDL4R - XMLSchema import handler.
|
2
|
+
# Copyright (C) 2000-2007 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 'wsdl/info'
|
10
|
+
require 'wsdl/xmlSchema/importer'
|
11
|
+
|
12
|
+
|
13
|
+
module WSDL
|
14
|
+
module XMLSchema
|
15
|
+
|
16
|
+
|
17
|
+
class ImportHandler
|
18
|
+
attr_reader :schemalocation
|
19
|
+
attr_reader :content
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@schemalocation = nil
|
23
|
+
@content = nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse_schemalocation(location, root, parent)
|
27
|
+
@schemalocation = URI.parse(location)
|
28
|
+
if @schemalocation.relative? and !parent.location.nil? and
|
29
|
+
!parent.location.relative?
|
30
|
+
@schemalocation = parent.location + @schemalocation
|
31
|
+
end
|
32
|
+
if root.importedschema.key?(@schemalocation)
|
33
|
+
@content = root.importedschema[@schemalocation]
|
34
|
+
else
|
35
|
+
root.importedschema[@schemalocation] = nil # placeholder
|
36
|
+
@content = Importer.import(@schemalocation, root)
|
37
|
+
root.importedschema[@schemalocation] = @content
|
38
|
+
end
|
39
|
+
@schemalocation
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# WSDL4R - XSD importer library.
|
2
|
+
# Copyright (C) 2000-2007 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/soap'
|
10
|
+
require 'soap/httpconfigloader'
|
11
|
+
require 'wsdl/xmlSchema/parser'
|
12
|
+
|
13
|
+
|
14
|
+
module WSDL
|
15
|
+
module XMLSchema
|
16
|
+
|
17
|
+
|
18
|
+
class Importer
|
19
|
+
DO_NOT_IMPORT = [::SOAP::EncodingNamespace]
|
20
|
+
|
21
|
+
def self.import(location, originalroot = nil)
|
22
|
+
new.import(location, originalroot)
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize
|
26
|
+
@web_client = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
def import(location, originalroot = nil)
|
30
|
+
if DO_NOT_IMPORT.include?(location.to_s)
|
31
|
+
return nil
|
32
|
+
end
|
33
|
+
unless location.is_a?(URI)
|
34
|
+
location = URI.parse(location)
|
35
|
+
end
|
36
|
+
source, normalizedlocation = fetch(location)
|
37
|
+
content = parse(source, normalizedlocation, originalroot)
|
38
|
+
content.location = normalizedlocation
|
39
|
+
content
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def parse(content, location, originalroot)
|
45
|
+
opt = {
|
46
|
+
:location => location,
|
47
|
+
:originalroot => originalroot
|
48
|
+
}
|
49
|
+
WSDL::XMLSchema::Parser.new(opt).parse(content)
|
50
|
+
end
|
51
|
+
|
52
|
+
def fetch(location)
|
53
|
+
warn("importing: #{location}") if $DEBUG
|
54
|
+
content = nil
|
55
|
+
normalizedlocation = location
|
56
|
+
if location.scheme == 'file' or
|
57
|
+
(location.relative? and FileTest.exist?(location.path))
|
58
|
+
content = File.open(location.path).read
|
59
|
+
normalizedlocation = URI.parse('file://' + File.expand_path(location.path))
|
60
|
+
elsif location.scheme and location.scheme.size == 1 and
|
61
|
+
FileTest.exist?(location.to_s)
|
62
|
+
# ToDo: remove this ugly workaround for a path with drive letter
|
63
|
+
# (D://foo/bar)
|
64
|
+
content = File.open(location.to_s).read
|
65
|
+
else
|
66
|
+
client = web_client.new(nil, "WSDL4R")
|
67
|
+
client.proxy = ::SOAP::Env::HTTP_PROXY
|
68
|
+
client.no_proxy = ::SOAP::Env::NO_PROXY
|
69
|
+
if opt = ::SOAP::Property.loadproperty(::SOAP::PropertyName)
|
70
|
+
http_opt = opt["client.protocol.http"]
|
71
|
+
::SOAP::HTTPConfigLoader.set_options(client, http_opt) if http_opt
|
72
|
+
end
|
73
|
+
content = client.get_content(location)
|
74
|
+
end
|
75
|
+
return content, normalizedlocation
|
76
|
+
end
|
77
|
+
|
78
|
+
def web_client
|
79
|
+
return @web_client if @web_client
|
80
|
+
begin
|
81
|
+
require 'httpclient'
|
82
|
+
@web_client = HTTPClient
|
83
|
+
rescue LoadError
|
84
|
+
begin
|
85
|
+
require 'http-access2'
|
86
|
+
if HTTPAccess2::VERSION < "2.0"
|
87
|
+
raise LoadError.new("http-access/2.0 or later is required.")
|
88
|
+
end
|
89
|
+
@web_client = HTTPAccess2::Client
|
90
|
+
rescue LoadError
|
91
|
+
warn("Loading http-access2 failed. Net/http is used.") if $DEBUG
|
92
|
+
require 'soap/netHttpClient'
|
93
|
+
@web_client = ::SOAP::NetHttpClient
|
94
|
+
end
|
95
|
+
end
|
96
|
+
@web_client
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|