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,14 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP filter.
|
|
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 'soap/filter/filterchain'
|
|
11
|
+
# envelope filter
|
|
12
|
+
require 'soap/filter/handler'
|
|
13
|
+
# steram filter
|
|
14
|
+
require 'soap/filter/streamhandler'
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP filter chain.
|
|
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 'soap/filter/handler'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module SOAP
|
|
14
|
+
module Filter
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class FilterChain
|
|
18
|
+
|
|
19
|
+
def each
|
|
20
|
+
@array.each do |filter|
|
|
21
|
+
yield filter
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def reverse_each
|
|
26
|
+
@array.reverse_each do |filter|
|
|
27
|
+
yield filter
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def initialize
|
|
32
|
+
@array = []
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def add(filter)
|
|
36
|
+
@array << filter
|
|
37
|
+
end
|
|
38
|
+
alias << add
|
|
39
|
+
|
|
40
|
+
def delete(filter)
|
|
41
|
+
@array.delete(filter)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def include?(filter)
|
|
45
|
+
@array.include?(filter)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP envelope filter base class.
|
|
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
|
+
module SOAP
|
|
11
|
+
module Filter
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Handler
|
|
15
|
+
|
|
16
|
+
# should return envelope. opt can be updated for other filters.
|
|
17
|
+
def on_outbound(envelope, opt)
|
|
18
|
+
# do something.
|
|
19
|
+
envelope
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# should return xml. opt can be updated for other filters.
|
|
23
|
+
def on_inbound(xml, opt)
|
|
24
|
+
# do something.
|
|
25
|
+
xml
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP stream filter base class.
|
|
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
|
+
module SOAP
|
|
11
|
+
module Filter
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class StreamHandler
|
|
15
|
+
|
|
16
|
+
# no returning value expected.
|
|
17
|
+
def on_http_outbound(req)
|
|
18
|
+
# do something.
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# no returning value expected.
|
|
22
|
+
def on_http_inbound(req, res)
|
|
23
|
+
# do something.
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP XML Instance Generator library.
|
|
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 'soap/soap'
|
|
11
|
+
require 'soap/ns'
|
|
12
|
+
require 'soap/baseData'
|
|
13
|
+
require 'soap/encodingstyle/handler'
|
|
14
|
+
require 'xsd/codegen/gensupport'
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
module SOAP
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
###
|
|
21
|
+
## CAUTION: MT-unsafe
|
|
22
|
+
#
|
|
23
|
+
class Generator
|
|
24
|
+
include SOAP
|
|
25
|
+
include XSD::CodeGen::GenSupport
|
|
26
|
+
|
|
27
|
+
class FormatEncodeError < Error; end
|
|
28
|
+
|
|
29
|
+
public
|
|
30
|
+
|
|
31
|
+
attr_accessor :charset
|
|
32
|
+
attr_accessor :default_encodingstyle
|
|
33
|
+
attr_accessor :generate_explicit_type
|
|
34
|
+
attr_accessor :use_numeric_character_reference
|
|
35
|
+
attr_accessor :use_default_namespace
|
|
36
|
+
|
|
37
|
+
def initialize(opt = {})
|
|
38
|
+
@reftarget = nil
|
|
39
|
+
@handlers = {}
|
|
40
|
+
@charset = opt[:charset] || XSD::Charset.xml_encoding_label
|
|
41
|
+
@default_encodingstyle = opt[:default_encodingstyle] || EncodingNamespace
|
|
42
|
+
@generate_explicit_type =
|
|
43
|
+
opt.key?(:generate_explicit_type) ? opt[:generate_explicit_type] : true
|
|
44
|
+
@use_default_namespace = opt[:use_default_namespace]
|
|
45
|
+
@attributeformdefault = opt[:attributeformdefault]
|
|
46
|
+
@use_numeric_character_reference = opt[:use_numeric_character_reference]
|
|
47
|
+
@indentstr = opt[:no_indent] ? '' : ' '
|
|
48
|
+
@buf = @indent = @curr = nil
|
|
49
|
+
@default_ns = opt[:default_ns]
|
|
50
|
+
@default_ns_tag = opt[:default_ns_tag]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def generate(obj, io = nil)
|
|
54
|
+
@buf = io || ''
|
|
55
|
+
@indent = ''
|
|
56
|
+
@encode_char_regexp = get_encode_char_regexp()
|
|
57
|
+
|
|
58
|
+
prologue
|
|
59
|
+
@handlers.each do |uri, handler|
|
|
60
|
+
handler.encode_prologue
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
ns = SOAP::NS.new
|
|
64
|
+
if @default_ns
|
|
65
|
+
@default_ns.each_ns do |default_ns, default_tag|
|
|
66
|
+
Generator.assign_ns(obj.extraattr, ns, default_ns, default_tag)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
if @default_ns_tag
|
|
70
|
+
@default_ns_tag.each_ns do |default_ns, default_tag|
|
|
71
|
+
ns.known_tag[default_ns] = default_tag
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
@buf << xmldecl
|
|
75
|
+
encode_data(ns, obj, nil)
|
|
76
|
+
|
|
77
|
+
@handlers.each do |uri, handler|
|
|
78
|
+
handler.encode_epilogue
|
|
79
|
+
end
|
|
80
|
+
epilogue
|
|
81
|
+
|
|
82
|
+
@buf
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def encode_data(ns, obj, parent)
|
|
86
|
+
if obj.respond_to?(:to_xmlpart)
|
|
87
|
+
formatted = trim_eol(obj.to_xmlpart)
|
|
88
|
+
formatted = trim_indent(formatted)
|
|
89
|
+
formatted = formatted.gsub(/^/, @indent).sub(/\n+\z/, '')
|
|
90
|
+
@buf << "\n#{formatted}"
|
|
91
|
+
return
|
|
92
|
+
elsif obj.is_a?(SOAPEnvelopeElement)
|
|
93
|
+
encode_element(ns, obj, parent)
|
|
94
|
+
return
|
|
95
|
+
end
|
|
96
|
+
if @reftarget && !obj.precedents.empty?
|
|
97
|
+
add_reftarget(obj.elename.name, obj)
|
|
98
|
+
ref = SOAPReference.new(obj)
|
|
99
|
+
ref.elename = ref.elename.dup_name(obj.elename.name)
|
|
100
|
+
obj.precedents.clear # Avoid cyclic delay.
|
|
101
|
+
obj.encodingstyle = parent.encodingstyle
|
|
102
|
+
# SOAPReference is encoded here.
|
|
103
|
+
obj = ref
|
|
104
|
+
end
|
|
105
|
+
encodingstyle = obj.encodingstyle
|
|
106
|
+
# Children's encodingstyle is derived from its parent.
|
|
107
|
+
encodingstyle ||= parent.encodingstyle if parent
|
|
108
|
+
obj.encodingstyle = encodingstyle
|
|
109
|
+
handler = find_handler(encodingstyle || @default_encodingstyle)
|
|
110
|
+
unless handler
|
|
111
|
+
raise FormatEncodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
|
|
112
|
+
end
|
|
113
|
+
if !obj.elename.name
|
|
114
|
+
raise FormatEncodeError.new("Element name not defined: #{ obj }.")
|
|
115
|
+
end
|
|
116
|
+
handler.encode_data(self, ns, obj, parent)
|
|
117
|
+
handler.encode_data_end(self, ns, obj, parent)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def add_reftarget(name, node)
|
|
121
|
+
unless @reftarget
|
|
122
|
+
raise FormatEncodeError.new("Reftarget is not defined.")
|
|
123
|
+
end
|
|
124
|
+
@reftarget.add(name, node)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def encode_child(ns, child, parent)
|
|
128
|
+
indent_backup, @indent = @indent, @indent + @indentstr
|
|
129
|
+
encode_data(ns.clone_ns, child, parent)
|
|
130
|
+
@indent = indent_backup
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def encode_element(ns, obj, parent)
|
|
134
|
+
attrs = obj.extraattr
|
|
135
|
+
if obj.is_a?(SOAPBody)
|
|
136
|
+
@reftarget = obj
|
|
137
|
+
obj.encode(self, ns, attrs) do |child|
|
|
138
|
+
indent_backup, @indent = @indent, @indent + @indentstr
|
|
139
|
+
encode_data(ns.clone_ns, child, obj)
|
|
140
|
+
@indent = indent_backup
|
|
141
|
+
end
|
|
142
|
+
@reftarget = nil
|
|
143
|
+
else
|
|
144
|
+
if obj.is_a?(SOAPEnvelope)
|
|
145
|
+
Generator.assign_ns(attrs, ns, XSD::InstanceNamespace)
|
|
146
|
+
Generator.assign_ns(attrs, ns, XSD::Namespace)
|
|
147
|
+
end
|
|
148
|
+
obj.encode(self, ns, attrs) do |child|
|
|
149
|
+
indent_backup, @indent = @indent, @indent + @indentstr
|
|
150
|
+
encode_data(ns.clone_ns, child, obj)
|
|
151
|
+
@indent = indent_backup
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def encode_name(ns, data, attrs)
|
|
157
|
+
if element_local?(data)
|
|
158
|
+
data.elename.name
|
|
159
|
+
else
|
|
160
|
+
if @use_default_namespace
|
|
161
|
+
Generator.assign_ns(attrs, ns, data.elename.namespace, '')
|
|
162
|
+
else
|
|
163
|
+
Generator.assign_ns(attrs, ns, data.elename.namespace)
|
|
164
|
+
end
|
|
165
|
+
ns.name(data.elename)
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def encode_name_end(ns, data)
|
|
170
|
+
if element_local?(data)
|
|
171
|
+
data.elename.name
|
|
172
|
+
else
|
|
173
|
+
ns.name(data.elename)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def encode_tag(elename, attrs = nil)
|
|
178
|
+
if attrs.nil? or attrs.empty?
|
|
179
|
+
@buf << "\n#{ @indent }<#{ elename }>"
|
|
180
|
+
return
|
|
181
|
+
end
|
|
182
|
+
ary = []
|
|
183
|
+
attrs.each do |key, value|
|
|
184
|
+
ary << %Q[#{ key }="#{ get_encoded(value.to_s) }"]
|
|
185
|
+
end
|
|
186
|
+
case ary.size
|
|
187
|
+
when 0
|
|
188
|
+
@buf << "\n#{ @indent }<#{ elename }>"
|
|
189
|
+
when 1
|
|
190
|
+
@buf << %Q[\n#{ @indent }<#{ elename } #{ ary[0] }>]
|
|
191
|
+
else
|
|
192
|
+
@buf << "\n#{ @indent }<#{ elename } " <<
|
|
193
|
+
ary.join("\n#{ @indent }#{ @indentstr * 2 }") <<
|
|
194
|
+
'>'
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def encode_tag_end(elename, cr = nil)
|
|
199
|
+
if cr
|
|
200
|
+
@buf << "\n#{ @indent }</#{ elename }>"
|
|
201
|
+
else
|
|
202
|
+
@buf << "</#{ elename }>"
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def encode_rawstring(str)
|
|
207
|
+
@buf << str
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def encode_string(str)
|
|
211
|
+
@buf << get_encoded(str)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def element_local?(element)
|
|
215
|
+
element.elename.namespace.nil?
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def self.assign_ns(attrs, ns, namespace, tag = nil)
|
|
219
|
+
if namespace.nil?
|
|
220
|
+
raise FormatEncodeError.new("empty namespace")
|
|
221
|
+
end
|
|
222
|
+
override_default_ns = (tag == '' and namespace != ns.default_namespace)
|
|
223
|
+
if override_default_ns or !ns.assigned?(namespace)
|
|
224
|
+
assign_ns!(attrs, ns, namespace, tag)
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def self.assign_ns!(attrs, ns, namespace, tag = nil)
|
|
229
|
+
tag = ns.assign(namespace, tag)
|
|
230
|
+
if tag == ''
|
|
231
|
+
attr = 'xmlns'
|
|
232
|
+
else
|
|
233
|
+
attr = "xmlns:#{tag}"
|
|
234
|
+
end
|
|
235
|
+
attrs[attr] = namespace
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
private
|
|
239
|
+
|
|
240
|
+
def prologue
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def epilogue
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
ENCODE_CHAR_REGEXP = {}
|
|
247
|
+
|
|
248
|
+
EncodeMap = {
|
|
249
|
+
'&' => '&',
|
|
250
|
+
'<' => '<',
|
|
251
|
+
'>' => '>',
|
|
252
|
+
'"' => '"',
|
|
253
|
+
'\'' => ''',
|
|
254
|
+
"\r" => '
'
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
def get_encoded(str)
|
|
258
|
+
if @use_numeric_character_reference and !XSD::Charset.is_us_ascii(str)
|
|
259
|
+
str.gsub!(@encode_char_regexp) { |c| EncodeMap[c] }
|
|
260
|
+
str.unpack("U*").collect { |c|
|
|
261
|
+
if c == 0x9 or c == 0xa or c == 0xd or (c >= 0x20 and c <= 0x7f)
|
|
262
|
+
c.chr
|
|
263
|
+
else
|
|
264
|
+
sprintf("&#x%x;", c)
|
|
265
|
+
end
|
|
266
|
+
}.join
|
|
267
|
+
else
|
|
268
|
+
str.gsub(@encode_char_regexp) { |c| EncodeMap[c] }
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def get_encode_char_regexp
|
|
273
|
+
ENCODE_CHAR_REGEXP[XSD::Charset.encoding] ||= Regexp.new("[#{EncodeMap.keys.join}]", nil, (RUBY_VERSION.to_f >= 1.9) ? 'n' : XSD::Charset.encoding) # RubyJedi: compatible with Ruby 1.8.6 and above
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def find_handler(encodingstyle)
|
|
277
|
+
unless @handlers.key?(encodingstyle)
|
|
278
|
+
factory = SOAP::EncodingStyle::Handler.handler(encodingstyle)
|
|
279
|
+
if factory
|
|
280
|
+
handler = factory.new(@charset)
|
|
281
|
+
handler.generate_explicit_type = @generate_explicit_type
|
|
282
|
+
handler.encode_prologue
|
|
283
|
+
@handlers[encodingstyle] = handler
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
@handlers[encodingstyle]
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
def xmldecl
|
|
290
|
+
if @charset
|
|
291
|
+
%Q[<?xml version="1.0" encoding="#{ @charset }" ?>]
|
|
292
|
+
else
|
|
293
|
+
%Q[<?xml version="1.0" ?>]
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# encoding: ASCII-8BIT
|
|
2
|
+
# SOAP4R - SOAP Header handler item
|
|
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 'soap/element'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
module SOAP
|
|
14
|
+
module Header
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Handler
|
|
18
|
+
attr_reader :elename
|
|
19
|
+
attr_accessor :mustunderstand
|
|
20
|
+
attr_reader :encodingstyle
|
|
21
|
+
attr_reader :target_actor
|
|
22
|
+
|
|
23
|
+
def initialize(elename)
|
|
24
|
+
@elename = elename
|
|
25
|
+
@mustunderstand = false
|
|
26
|
+
@encodingstyle = nil
|
|
27
|
+
@target_actor = nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Should return a SOAP/OM, a SOAPHeaderItem or nil.
|
|
31
|
+
def on_outbound
|
|
32
|
+
nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Given header is a SOAPHeaderItem or nil.
|
|
36
|
+
def on_inbound(header, mustunderstand = false)
|
|
37
|
+
# do something.
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def on_outbound_headeritem(header)
|
|
41
|
+
arity = self.method(:on_outbound).arity
|
|
42
|
+
item = (arity == 0) ? on_outbound : on_outbound(header)
|
|
43
|
+
if item.nil?
|
|
44
|
+
nil
|
|
45
|
+
elsif item.is_a?(::SOAP::SOAPHeaderItem)
|
|
46
|
+
item.elename = @elename
|
|
47
|
+
item
|
|
48
|
+
else
|
|
49
|
+
item.elename = @elename
|
|
50
|
+
::SOAP::SOAPHeaderItem.new(item, @mustunderstand, @encodingstyle,
|
|
51
|
+
@target_actor)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def on_inbound_headeritem(header, item)
|
|
56
|
+
on_inbound(item.element, item.mustunderstand)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|