soybean 1.0.0
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/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +38 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +44 -0
- data/VERSION +1 -0
- data/bin/soybean +22 -0
- data/bin/xsd2ruby +90 -0
- data/lib/soybean.rb +11 -0
- data/lib/soybean/actions/generate_classes.rb +33 -0
- data/soybean.gemspec +236 -0
- data/spec/soybean_spec.rb +5 -0
- data/spec/spec_helper.rb +12 -0
- data/vendor/soap4r/soap/attachment.rb +109 -0
- data/vendor/soap4r/soap/attrproxy.rb +35 -0
- data/vendor/soap4r/soap/base_data.rb +1095 -0
- data/vendor/soap4r/soap/element.rb +278 -0
- data/vendor/soap4r/soap/encodingstyle/asp_dot_net_handler.rb +208 -0
- data/vendor/soap4r/soap/encodingstyle/handler.rb +121 -0
- data/vendor/soap4r/soap/encodingstyle/literal_handler.rb +196 -0
- data/vendor/soap4r/soap/encodingstyle/soap_handler.rb +560 -0
- data/vendor/soap4r/soap/filter.rb +14 -0
- data/vendor/soap4r/soap/filter/filterchain.rb +52 -0
- data/vendor/soap4r/soap/filter/handler.rb +32 -0
- data/vendor/soap4r/soap/filter/streamhandler.rb +30 -0
- data/vendor/soap4r/soap/generator.rb +299 -0
- data/vendor/soap4r/soap/header/handler.rb +62 -0
- data/vendor/soap4r/soap/header/handlerset.rb +71 -0
- data/vendor/soap4r/soap/header/mappinghandler.rb +48 -0
- data/vendor/soap4r/soap/header/simplehandler.rb +45 -0
- data/vendor/soap4r/soap/httpconfigloader.rb +140 -0
- data/vendor/soap4r/soap/mapping.rb +13 -0
- data/vendor/soap4r/soap/mapping/encodedregistry.rb +539 -0
- data/vendor/soap4r/soap/mapping/factory.rb +389 -0
- data/vendor/soap4r/soap/mapping/literalregistry.rb +392 -0
- data/vendor/soap4r/soap/mapping/mapping.rb +577 -0
- data/vendor/soap4r/soap/mapping/registry.rb +296 -0
- data/vendor/soap4r/soap/mapping/rubytype_factory.rb +446 -0
- data/vendor/soap4r/soap/mapping/schemadefinition.rb +171 -0
- data/vendor/soap4r/soap/mapping/type_map.rb +107 -0
- data/vendor/soap4r/soap/mapping/wsdlencodedregistry.rb +212 -0
- data/vendor/soap4r/soap/mapping/wsdlliteralregistry.rb +249 -0
- data/vendor/soap4r/soap/marshal.rb +60 -0
- data/vendor/soap4r/soap/mimemessage.rb +243 -0
- data/vendor/soap4r/soap/nestedexception.rb +43 -0
- data/vendor/soap4r/soap/net_http_client.rb +242 -0
- data/vendor/soap4r/soap/ns.rb +39 -0
- data/vendor/soap4r/soap/parser.rb +253 -0
- data/vendor/soap4r/soap/processor.rb +67 -0
- data/vendor/soap4r/soap/property.rb +340 -0
- data/vendor/soap4r/soap/proxy.rb +15 -0
- data/vendor/soap4r/soap/rpc/cgistub.rb +248 -0
- data/vendor/soap4r/soap/rpc/driver.rb +222 -0
- data/vendor/soap4r/soap/rpc/element.rb +375 -0
- data/vendor/soap4r/soap/rpc/httpserver.rb +143 -0
- data/vendor/soap4r/soap/rpc/method_def.rb +69 -0
- data/vendor/soap4r/soap/rpc/proxy.rb +573 -0
- data/vendor/soap4r/soap/rpc/router.rb +663 -0
- data/vendor/soap4r/soap/rpc/rpc.rb +26 -0
- data/vendor/soap4r/soap/rpc/soaplet.rb +201 -0
- data/vendor/soap4r/soap/rpc/standalone_server.rb +44 -0
- data/vendor/soap4r/soap/soap.rb +154 -0
- data/vendor/soap4r/soap/stream_handler.rb +302 -0
- data/vendor/soap4r/soap/version.rb +9 -0
- data/vendor/soap4r/soap/wsdl_driver.rb +165 -0
- data/vendor/soap4r/wsdl/binding.rb +66 -0
- data/vendor/soap4r/wsdl/data.rb +65 -0
- data/vendor/soap4r/wsdl/definitions.rb +237 -0
- data/vendor/soap4r/wsdl/documentation.rb +33 -0
- data/vendor/soap4r/wsdl/import.rb +81 -0
- data/vendor/soap4r/wsdl/importer.rb +39 -0
- data/vendor/soap4r/wsdl/info.rb +51 -0
- data/vendor/soap4r/wsdl/message.rb +55 -0
- data/vendor/soap4r/wsdl/operation.rb +152 -0
- data/vendor/soap4r/wsdl/operation_binding.rb +241 -0
- data/vendor/soap4r/wsdl/param.rb +94 -0
- data/vendor/soap4r/wsdl/parser.rb +165 -0
- data/vendor/soap4r/wsdl/part.rb +53 -0
- data/vendor/soap4r/wsdl/port.rb +67 -0
- data/vendor/soap4r/wsdl/port_type.rb +76 -0
- data/vendor/soap4r/wsdl/service.rb +62 -0
- data/vendor/soap4r/wsdl/soap/address.rb +41 -0
- data/vendor/soap4r/wsdl/soap/binding.rb +50 -0
- data/vendor/soap4r/wsdl/soap/body.rb +59 -0
- data/vendor/soap4r/wsdl/soap/cgi_stub_creator.rb +93 -0
- data/vendor/soap4r/wsdl/soap/class_def_creator.rb +437 -0
- data/vendor/soap4r/wsdl/soap/class_def_creator_support.rb +241 -0
- data/vendor/soap4r/wsdl/soap/class_name_creator.rb +55 -0
- data/vendor/soap4r/wsdl/soap/client_skelton_creator.rb +107 -0
- data/vendor/soap4r/wsdl/soap/complex_type.rb +174 -0
- data/vendor/soap4r/wsdl/soap/data.rb +43 -0
- data/vendor/soap4r/wsdl/soap/definitions.rb +201 -0
- data/vendor/soap4r/wsdl/soap/driver_creator.rb +121 -0
- data/vendor/soap4r/wsdl/soap/element.rb +34 -0
- data/vendor/soap4r/wsdl/soap/encoded_mapping_registry_creator.rb +74 -0
- data/vendor/soap4r/wsdl/soap/fault.rb +57 -0
- data/vendor/soap4r/wsdl/soap/header.rb +87 -0
- data/vendor/soap4r/wsdl/soap/headerfault.rb +57 -0
- data/vendor/soap4r/wsdl/soap/literal_mapping_registry_creator.rb +116 -0
- data/vendor/soap4r/wsdl/soap/mapping_registry_creator.rb +59 -0
- data/vendor/soap4r/wsdl/soap/mapping_registry_creator_support.rb +377 -0
- data/vendor/soap4r/wsdl/soap/method_def_creator.rb +200 -0
- data/vendor/soap4r/wsdl/soap/operation.rb +113 -0
- data/vendor/soap4r/wsdl/soap/servant_skelton_creator.rb +92 -0
- data/vendor/soap4r/wsdl/soap/servlet_stub_creator.rb +105 -0
- data/vendor/soap4r/wsdl/soap/standalone_server_stub_creator.rb +101 -0
- data/vendor/soap4r/wsdl/soap/wsdl2ruby.rb +226 -0
- data/vendor/soap4r/wsdl/types.rb +45 -0
- data/vendor/soap4r/wsdl/wsdl.rb +25 -0
- data/vendor/soap4r/wsdl/xml_schema/all.rb +25 -0
- data/vendor/soap4r/wsdl/xml_schema/annotation.rb +35 -0
- data/vendor/soap4r/wsdl/xml_schema/any.rb +62 -0
- data/vendor/soap4r/wsdl/xml_schema/any_attribute.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/attribute.rb +105 -0
- data/vendor/soap4r/wsdl/xml_schema/attribute_group.rb +69 -0
- data/vendor/soap4r/wsdl/xml_schema/choice.rb +59 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_content.rb +98 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_extension.rb +120 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_restriction.rb +105 -0
- data/vendor/soap4r/wsdl/xml_schema/complex_type.rb +194 -0
- data/vendor/soap4r/wsdl/xml_schema/content.rb +96 -0
- data/vendor/soap4r/wsdl/xml_schema/data.rb +117 -0
- data/vendor/soap4r/wsdl/xml_schema/element.rb +154 -0
- data/vendor/soap4r/wsdl/xml_schema/enumeration.rb +37 -0
- data/vendor/soap4r/wsdl/xml_schema/fractiondigits.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/group.rb +101 -0
- data/vendor/soap4r/wsdl/xml_schema/import.rb +54 -0
- data/vendor/soap4r/wsdl/xml_schema/import_handler.rb +46 -0
- data/vendor/soap4r/wsdl/xml_schema/importer.rb +103 -0
- data/vendor/soap4r/wsdl/xml_schema/include.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/length.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/list.rb +49 -0
- data/vendor/soap4r/wsdl/xml_schema/maxexclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/maxinclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/maxlength.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/minexclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/mininclusive.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/minlength.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/parser.rb +168 -0
- data/vendor/soap4r/wsdl/xml_schema/pattern.rb +37 -0
- data/vendor/soap4r/wsdl/xml_schema/ref.rb +34 -0
- data/vendor/soap4r/wsdl/xml_schema/schema.rb +179 -0
- data/vendor/soap4r/wsdl/xml_schema/sequence.rb +55 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_content.rb +70 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_extension.rb +63 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_restriction.rb +133 -0
- data/vendor/soap4r/wsdl/xml_schema/simple_type.rb +88 -0
- data/vendor/soap4r/wsdl/xml_schema/totaldigits.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/union.rb +36 -0
- data/vendor/soap4r/wsdl/xml_schema/unique.rb +35 -0
- data/vendor/soap4r/wsdl/xml_schema/whitespace.rb +38 -0
- data/vendor/soap4r/wsdl/xml_schema/xsd2ruby.rb +176 -0
- data/vendor/soap4r/xsd/charset.rb +190 -0
- data/vendor/soap4r/xsd/codegen.rb +13 -0
- data/vendor/soap4r/xsd/codegen/classdef.rb +209 -0
- data/vendor/soap4r/xsd/codegen/commentdef.rb +35 -0
- data/vendor/soap4r/xsd/codegen/gensupport.rb +277 -0
- data/vendor/soap4r/xsd/codegen/methoddef.rb +71 -0
- data/vendor/soap4r/xsd/codegen/moduledef.rb +209 -0
- data/vendor/soap4r/xsd/datatypes.rb +1466 -0
- data/vendor/soap4r/xsd/datatypes1999.rb +21 -0
- data/vendor/soap4r/xsd/iconvcharset.rb +34 -0
- data/vendor/soap4r/xsd/mapping.rb +69 -0
- data/vendor/soap4r/xsd/namedelements.rb +133 -0
- data/vendor/soap4r/xsd/ns.rb +183 -0
- data/vendor/soap4r/xsd/qname.rb +80 -0
- data/vendor/soap4r/xsd/xmlparser.rb +77 -0
- data/vendor/soap4r/xsd/xmlparser/libxmlparser.rb +116 -0
- data/vendor/soap4r/xsd/xmlparser/parser.rb +101 -0
- data/vendor/soap4r/xsd/xmlparser/rexmlparser.rb +59 -0
- data/vendor/soap4r/xsd/xmlparser/xmlparser.rb +51 -0
- data/vendor/soap4r/xsd/xmlparser/xmlscanner.rb +150 -0
- metadata +316 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# WSDL4R - WSDL SOAP binding data definitions.
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'xsd/qname'
|
|
11
|
+
require 'wsdl/soap/definitions'
|
|
12
|
+
require 'wsdl/soap/binding'
|
|
13
|
+
require 'wsdl/soap/operation'
|
|
14
|
+
require 'wsdl/soap/body'
|
|
15
|
+
require 'wsdl/soap/element'
|
|
16
|
+
require 'wsdl/soap/header'
|
|
17
|
+
require 'wsdl/soap/headerfault'
|
|
18
|
+
require 'wsdl/soap/fault'
|
|
19
|
+
require 'wsdl/soap/address'
|
|
20
|
+
require 'wsdl/soap/complex_type'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module WSDL
|
|
24
|
+
module SOAP
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
HeaderFaultName = XSD::QName.new(SOAPBindingNamespace, 'headerfault')
|
|
28
|
+
|
|
29
|
+
LocationAttrName = XSD::QName.new(nil, 'location')
|
|
30
|
+
StyleAttrName = XSD::QName.new(nil, 'style')
|
|
31
|
+
TransportAttrName = XSD::QName.new(nil, 'transport')
|
|
32
|
+
UseAttrName = XSD::QName.new(nil, 'use')
|
|
33
|
+
PartsAttrName = XSD::QName.new(nil, 'parts')
|
|
34
|
+
PartAttrName = XSD::QName.new(nil, 'part')
|
|
35
|
+
NameAttrName = XSD::QName.new(nil, 'name')
|
|
36
|
+
MessageAttrName = XSD::QName.new(nil, 'message')
|
|
37
|
+
EncodingStyleAttrName = XSD::QName.new(nil, 'encodingStyle')
|
|
38
|
+
NamespaceAttrName = XSD::QName.new(nil, 'namespace')
|
|
39
|
+
SOAPActionAttrName = XSD::QName.new(nil, 'soapAction')
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# WSDL4R - WSDL additional definitions for SOAP.
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'wsdl/info'
|
|
11
|
+
require 'xsd/namedelements'
|
|
12
|
+
require 'soap/mapping'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
module WSDL
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Definitions < Info
|
|
19
|
+
def self.soap_rpc_complextypes
|
|
20
|
+
types = XSD::NamedElements.new
|
|
21
|
+
types << array_complextype
|
|
22
|
+
types << fault_complextype
|
|
23
|
+
types << exception_complextype
|
|
24
|
+
types
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.array_complextype
|
|
28
|
+
type = XMLSchema::ComplexType.new(::SOAP::ValueArrayName)
|
|
29
|
+
type.complexcontent = XMLSchema::ComplexContent.new
|
|
30
|
+
type.complexcontent.restriction = XMLSchema::ComplexRestriction.new
|
|
31
|
+
type.complexcontent.restriction.base = ::SOAP::ValueArrayName
|
|
32
|
+
attr = XMLSchema::Attribute.new
|
|
33
|
+
attr.ref = ::SOAP::AttrArrayTypeName
|
|
34
|
+
anyarray = XSD::QName.new(
|
|
35
|
+
XSD::AnyTypeName.namespace,
|
|
36
|
+
XSD::AnyTypeName.name + '[]')
|
|
37
|
+
attr.arytype = anyarray
|
|
38
|
+
type.complexcontent.restriction.attributes << attr
|
|
39
|
+
type
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
=begin
|
|
43
|
+
<xs:complexType name="Fault" final="extension">
|
|
44
|
+
<xs:sequence>
|
|
45
|
+
<xs:element name="faultcode" type="xs:QName" />
|
|
46
|
+
<xs:element name="faultstring" type="xs:string" />
|
|
47
|
+
<xs:element name="faultactor" type="xs:anyURI" minOccurs="0" />
|
|
48
|
+
<xs:element name="detail" type="tns:detail" minOccurs="0" />
|
|
49
|
+
</xs:sequence>
|
|
50
|
+
</xs:complexType>
|
|
51
|
+
=end
|
|
52
|
+
def self.fault_complextype
|
|
53
|
+
type = XMLSchema::ComplexType.new(::SOAP::EleFaultName)
|
|
54
|
+
faultcode = XMLSchema::Element.new(::SOAP::EleFaultCodeName, XSD::XSDQName::Type)
|
|
55
|
+
faultstring = XMLSchema::Element.new(::SOAP::EleFaultStringName, XSD::XSDString::Type)
|
|
56
|
+
faultactor = XMLSchema::Element.new(::SOAP::EleFaultActorName, XSD::XSDAnyURI::Type)
|
|
57
|
+
faultactor.minoccurs = 0
|
|
58
|
+
detail = XMLSchema::Element.new(::SOAP::EleFaultDetailName, XSD::AnyTypeName)
|
|
59
|
+
detail.minoccurs = 0
|
|
60
|
+
type.all_elements = [faultcode, faultstring, faultactor, detail]
|
|
61
|
+
type.final = 'extension'
|
|
62
|
+
type
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.exception_complextype
|
|
66
|
+
type = XMLSchema::ComplexType.new(XSD::QName.new(
|
|
67
|
+
::SOAP::Mapping::RubyCustomTypeNamespace, 'SOAPException'))
|
|
68
|
+
excn_name = XMLSchema::Element.new(XSD::QName.new(nil, 'excn_type_name'), XSD::XSDString::Type)
|
|
69
|
+
cause = XMLSchema::Element.new(XSD::QName.new(nil, 'cause'), XSD::AnyTypeName)
|
|
70
|
+
backtrace = XMLSchema::Element.new(XSD::QName.new(nil, 'backtrace'), ::SOAP::ValueArrayName)
|
|
71
|
+
message = XMLSchema::Element.new(XSD::QName.new(nil, 'message'), XSD::XSDString::Type)
|
|
72
|
+
type.all_elements = [excn_name, cause, backtrace, message]
|
|
73
|
+
type
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def soap_rpc_complextypes(binding)
|
|
77
|
+
types = rpc_operation_complextypes(binding)
|
|
78
|
+
types + self.class.soap_rpc_complextypes
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def collect_faulttypes
|
|
82
|
+
result = []
|
|
83
|
+
collect_fault_messages.each do |name|
|
|
84
|
+
faultparts = message(name).parts
|
|
85
|
+
if faultparts.size != 1
|
|
86
|
+
raise RuntimeError.new("Expecting fault message \"#{name}\" to have ONE part")
|
|
87
|
+
end
|
|
88
|
+
fault_part = faultparts[0]
|
|
89
|
+
# WS-I Basic Profile Version 1.1 (R2205) requires fault message parts
|
|
90
|
+
# to refer to elements rather than types
|
|
91
|
+
faulttype = fault_part.element
|
|
92
|
+
if not faulttype
|
|
93
|
+
warn("Fault message \"#{name}\" part \"#{fault_part.name}\" must specify an \"element\" attribute")
|
|
94
|
+
faulttype = fault_part.type
|
|
95
|
+
end
|
|
96
|
+
if faulttype and result.index(faulttype).nil?
|
|
97
|
+
result << faulttype
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
result
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
def get_fault_binding(op_binding, fault_name)
|
|
106
|
+
op_binding.fault.each do |fault|
|
|
107
|
+
return fault if fault.name == fault_name
|
|
108
|
+
end
|
|
109
|
+
return nil
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def op_binding_declares_fault(op_binding, fault_name)
|
|
113
|
+
return get_fault_binding(op_binding, fault_name) != nil
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def collect_fault_messages
|
|
117
|
+
result = []
|
|
118
|
+
porttypes.each do |porttype|
|
|
119
|
+
port_binding = porttype.find_binding()
|
|
120
|
+
next unless port_binding
|
|
121
|
+
porttype.operations.each do |operation|
|
|
122
|
+
op_binding = port_binding.operations.find { |ele| ele.name == operation.name }
|
|
123
|
+
next unless op_binding
|
|
124
|
+
operation.fault.each do |fault|
|
|
125
|
+
# Make sure the operation fault has a name
|
|
126
|
+
if not fault.name
|
|
127
|
+
warn("Operation \"#{operation.name}\": fault must specify a \"name\" attribute")
|
|
128
|
+
next
|
|
129
|
+
end
|
|
130
|
+
# Make sure that portType fault has a corresponding soap:fault
|
|
131
|
+
# definition in binding section.
|
|
132
|
+
if not op_binding_declares_fault(op_binding, fault.name)
|
|
133
|
+
warn("Operation \"#{operation.name}\", fault \"#{fault.name}\": no corresponding wsdl:fault binding found with a matching \"name\" attribute")
|
|
134
|
+
next
|
|
135
|
+
end
|
|
136
|
+
fault_binding = get_fault_binding(op_binding, fault.name)
|
|
137
|
+
if fault_binding.soapfault.nil?
|
|
138
|
+
warn("WARNING: no soap:fault found for wsdl:fault \"#{fault_binding.name}\" in operation \"#{operation.name}\" \n\n")
|
|
139
|
+
next
|
|
140
|
+
end
|
|
141
|
+
if fault_binding.soapfault.name != fault_binding.name
|
|
142
|
+
warn("WARNING: name of soap:fault \"#{fault_binding.soapfault.name}\" doesn't match the name of wsdl:fault \"#{fault_binding.name}\" in operation \"#{operation.name}\" \n\n")
|
|
143
|
+
next
|
|
144
|
+
end
|
|
145
|
+
# According to WS-I (R2723): if in a wsdl:binding the use attribute
|
|
146
|
+
# on a contained soapbind:fault element is present, its value MUST
|
|
147
|
+
# be "literal".
|
|
148
|
+
if fault_binding.soapfault.use and fault_binding.soapfault.use != "literal"
|
|
149
|
+
warn("Operation \"#{operation.name}\", fault \"#{fault.name}\": soap:fault \"use\" attribute must be \"literal\"")
|
|
150
|
+
end
|
|
151
|
+
if result.index(fault.message).nil?
|
|
152
|
+
result << fault.message
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
result
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def rpc_operation_complextypes(binding)
|
|
161
|
+
types = XSD::NamedElements.new
|
|
162
|
+
binding.operations.each do |op_bind|
|
|
163
|
+
if op_bind_rpc?(op_bind)
|
|
164
|
+
operation = op_bind.find_operation
|
|
165
|
+
if op_bind.input
|
|
166
|
+
type = XMLSchema::ComplexType.new(op_bind.soapoperation_name)
|
|
167
|
+
message = messages[operation.input.message]
|
|
168
|
+
type.sequence_elements = elements_from_message(message)
|
|
169
|
+
types << type
|
|
170
|
+
end
|
|
171
|
+
if op_bind.output
|
|
172
|
+
type = XMLSchema::ComplexType.new(operation.outputname)
|
|
173
|
+
message = messages[operation.output.message]
|
|
174
|
+
type.sequence_elements = elements_from_message(message)
|
|
175
|
+
types << type
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
types
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def op_bind_rpc?(op_bind)
|
|
183
|
+
op_bind.soapoperation_style == :rpc
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def elements_from_message(message)
|
|
187
|
+
message.parts.collect { |part|
|
|
188
|
+
if part.element
|
|
189
|
+
collect_elements[part.element]
|
|
190
|
+
elsif part.name.nil? or part.type.nil?
|
|
191
|
+
raise RuntimeError.new("part of a message must be an element or typed")
|
|
192
|
+
else
|
|
193
|
+
qname = XSD::QName.new(nil, part.name)
|
|
194
|
+
XMLSchema::Element.new(qname, part.type)
|
|
195
|
+
end
|
|
196
|
+
}
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# WSDL4R - Creating driver code from WSDL.
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'wsdl/info'
|
|
11
|
+
require 'wsdl/soap/mapping_registry_creator'
|
|
12
|
+
require 'wsdl/soap/method_def_creator'
|
|
13
|
+
require 'wsdl/soap/class_def_creator_support'
|
|
14
|
+
require 'xsd/codegen'
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
module WSDL
|
|
18
|
+
module SOAP
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class DriverCreator
|
|
22
|
+
include ClassDefCreatorSupport
|
|
23
|
+
|
|
24
|
+
attr_reader :definitions
|
|
25
|
+
attr_accessor :drivername_postfix
|
|
26
|
+
|
|
27
|
+
def initialize(definitions, name_creator, modulepath = nil)
|
|
28
|
+
@definitions = definitions
|
|
29
|
+
@name_creator = name_creator
|
|
30
|
+
@modulepath = modulepath
|
|
31
|
+
@drivername_postfix = ''
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def dump(porttype = nil)
|
|
35
|
+
result = "require 'soap/rpc/driver'\n\n"
|
|
36
|
+
if @modulepath
|
|
37
|
+
modulepath = @modulepath.respond_to?(:lines) ? @modulepath.lines : @modulepath # RubyJedi: compatible with Ruby 1.8.6 and above
|
|
38
|
+
modulepath.each do |name|
|
|
39
|
+
result << "module #{name}\n"
|
|
40
|
+
end
|
|
41
|
+
result << "\n"
|
|
42
|
+
end
|
|
43
|
+
if porttype.nil?
|
|
44
|
+
@definitions.porttypes.each do |type|
|
|
45
|
+
result << dump_porttype(type.name)
|
|
46
|
+
result << "\n"
|
|
47
|
+
end
|
|
48
|
+
else
|
|
49
|
+
result << dump_porttype(porttype)
|
|
50
|
+
end
|
|
51
|
+
if @modulepath
|
|
52
|
+
result << "\n"
|
|
53
|
+
modulepath = @modulepath.respond_to?(:lines) ? @modulepath.lines : @modulepath # RubyJedi: compatible with Ruby 1.8.6 and above
|
|
54
|
+
modulepath.each do |name|
|
|
55
|
+
result << "end\n"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
result
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
|
|
63
|
+
def dump_porttype(porttype)
|
|
64
|
+
drivername = porttype.name + @drivername_postfix
|
|
65
|
+
qname = XSD::QName.new(porttype.namespace, drivername)
|
|
66
|
+
class_name = mapped_class_basename(qname, @modulepath)
|
|
67
|
+
defined_const = {}
|
|
68
|
+
mdcreator = MethodDefCreator.new(@definitions, @name_creator, @modulepath, defined_const)
|
|
69
|
+
methoddef = mdcreator.dump(porttype)
|
|
70
|
+
binding = @definitions.bindings.find { |item| item.type == porttype }
|
|
71
|
+
if binding.nil? or binding.soapbinding.nil?
|
|
72
|
+
# not bound or not a SOAP binding
|
|
73
|
+
return ''
|
|
74
|
+
end
|
|
75
|
+
address = @definitions.porttype(porttype).locations[0]
|
|
76
|
+
|
|
77
|
+
c = XSD::CodeGen::ClassDef.new(class_name, "::SOAP::RPC::Driver")
|
|
78
|
+
c.def_const("DefaultEndpointUrl", ndq(address))
|
|
79
|
+
c.def_code <<-EOD
|
|
80
|
+
Methods = [
|
|
81
|
+
#{methoddef.gsub(/^/, " ")}
|
|
82
|
+
]
|
|
83
|
+
EOD
|
|
84
|
+
wsdl_name = @definitions.name ? @definitions.name.name : 'default'
|
|
85
|
+
mrname = safeconstname(wsdl_name + 'MappingRegistry')
|
|
86
|
+
c.def_method("initialize", "endpoint_url = nil") do
|
|
87
|
+
%Q[endpoint_url ||= DefaultEndpointUrl\n] +
|
|
88
|
+
%Q[super(endpoint_url, nil)\n] +
|
|
89
|
+
%Q[self.mapping_registry = #{mrname}::EncodedRegistry\n] +
|
|
90
|
+
%Q[self.literal_mapping_registry = #{mrname}::LiteralRegistry\n] +
|
|
91
|
+
%Q[init_methods]
|
|
92
|
+
end
|
|
93
|
+
c.def_privatemethod("init_methods") do
|
|
94
|
+
<<-EOD
|
|
95
|
+
Methods.each do |definitions|
|
|
96
|
+
opt = definitions.last
|
|
97
|
+
if opt[:request_style] == :document
|
|
98
|
+
add_document_operation(*definitions)
|
|
99
|
+
else
|
|
100
|
+
add_rpc_operation(*definitions)
|
|
101
|
+
qname = definitions[0]
|
|
102
|
+
name = definitions[2]
|
|
103
|
+
if qname.name != name and qname.name.capitalize == name.capitalize
|
|
104
|
+
::SOAP::Mapping.define_singleton_method(self, qname.name) do |*arg|
|
|
105
|
+
__send__(name, *arg)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
EOD
|
|
111
|
+
end
|
|
112
|
+
defined_const.each do |ns, tag|
|
|
113
|
+
c.def_const(tag, dq(ns))
|
|
114
|
+
end
|
|
115
|
+
c.dump
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# WSDL4R - XMLSchema element definition for WSDL.
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'wsdl/xml_schema/element'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module WSDL
|
|
14
|
+
module XMLSchema
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Element < Info
|
|
18
|
+
def map_as_array?
|
|
19
|
+
# parent sequence / choice may be marked as maxOccurs="unbounded"
|
|
20
|
+
maxoccurs.nil? or maxoccurs != 1 or (parent and parent.map_as_array?)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def anonymous_type?
|
|
24
|
+
!@ref and @name and @local_complextype
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def attributes
|
|
28
|
+
@local_complextype.attributes
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# WSDL4R - Creating EncodedMappingRegistry code from WSDL.
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
require 'wsdl/info'
|
|
11
|
+
require 'wsdl/soap/mapping_registry_creator_support'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
module WSDL
|
|
15
|
+
module SOAP
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class EncodedMappingRegistryCreator
|
|
19
|
+
include MappingRegistryCreatorSupport
|
|
20
|
+
|
|
21
|
+
attr_reader :definitions
|
|
22
|
+
|
|
23
|
+
def initialize(definitions, name_creator, modulepath, defined_const)
|
|
24
|
+
@definitions = definitions
|
|
25
|
+
@name_creator = name_creator
|
|
26
|
+
@modulepath = modulepath
|
|
27
|
+
@simpletypes = definitions.collect_simpletypes
|
|
28
|
+
@simpletypes.uniq!
|
|
29
|
+
@complextypes = definitions.collect_complextypes
|
|
30
|
+
@complextypes.uniq!
|
|
31
|
+
@varname = nil
|
|
32
|
+
@defined_const = defined_const
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def dump(varname)
|
|
36
|
+
@varname = varname
|
|
37
|
+
result = ''
|
|
38
|
+
str = dump_complextype
|
|
39
|
+
unless str.empty?
|
|
40
|
+
result << "\n" unless result.empty?
|
|
41
|
+
result << str
|
|
42
|
+
end
|
|
43
|
+
str = dump_simpletype
|
|
44
|
+
unless str.empty?
|
|
45
|
+
result << "\n" unless result.empty?
|
|
46
|
+
result << str
|
|
47
|
+
end
|
|
48
|
+
result
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def dump_complextype
|
|
54
|
+
@complextypes.collect { |type|
|
|
55
|
+
unless type.abstract
|
|
56
|
+
dump_with_inner {
|
|
57
|
+
dump_complextypedef(@modulepath, type.name, type, nil, :encoded => true)
|
|
58
|
+
}
|
|
59
|
+
end
|
|
60
|
+
}.compact.join("\n")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def dump_simpletype
|
|
64
|
+
@simpletypes.collect { |type|
|
|
65
|
+
dump_with_inner {
|
|
66
|
+
dump_simpletypedef(@modulepath, type.name, type, nil, :encoded => true)
|
|
67
|
+
}
|
|
68
|
+
}.compact.join("\n")
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
end
|