1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
=begin
WSDL4R - WSDL SOAP operation definition.
Copyright (C) 2002, 2003 NAKAMURA, Hiroshi.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PRATICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 675 Mass
Ave, Cambridge, MA 02139, USA.
=end
require 'wsdl/info'
module WSDL
module SOAP
class Operation < Info
class OperationInfo
attr_reader :style
attr_reader :op_name
attr_reader :optype_name
attr_reader :headerparts
attr_reader :bodyparts
attr_reader :faultpart
attr_reader :soapaction
def initialize(style, op_name, optype_name, headerparts, bodyparts, faultpart, soapaction)
@style = style
@op_name = op_name
@optype_name = optype_name
@headerparts = headerparts
@bodyparts = bodyparts
@faultpart = faultpart
@soapaction = soapaction
end
end
attr_reader :soapaction
attr_reader :style
def initialize
super
@soapaction = nil
@style = nil
end
def parse_element(element)
nil
end
def parse_attr(attr, value)
case attr
when StyleAttrName
if ["document", "rpc"].include?(value)
@style = value.intern
else
raise AttributeConstraintError.new("Unexpected value #{ value }.")
end
when SOAPActionAttrName
@soapaction = value
else
nil
end
end
def input_info
name_info = parent.find_operation.input_info
param_info(name_info, parent.input)
end
def output_info
name_info = parent.find_operation.output_info
param_info(name_info, parent.output)
end
def operation_style
return @style if @style
if parent_binding.soapbinding
return parent_binding.soapbinding.style
end
nil
end
private
def parent_binding
parent.parent
end
def param_info(name_info, param)
op_name = name_info.op_name
optype_name = name_info.optype_name
soapheader = param.soapheader
headerparts = soapheader.collect { |item| item.find_part }
soapbody = param.soapbody
if soapbody.encodingstyle and
soapbody.encodingstyle != ::SOAP::EncodingNamespace
raise NotImplementedError.new(
"EncodingStyle '#{ soapbody.encodingstyle }' not supported.")
end
if soapbody.namespace
op_name = op_name.dup
op_name.namespace = soapbody.namespace
end
if soapbody.parts
raise NotImplementedError.new("soap:body parts")
else
bodyparts = name_info.parts
end
faultpart = nil
soapaction = parent.soapoperation.soapaction
OperationInfo.new(operation_style, op_name, optype_name, headerparts, bodyparts, faultpart, soapaction)
end
end
end
end
|