1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.soap.axis;
12
13 import org.mule.config.spring.editors.QNamePropertyEditor;
14 import org.mule.util.ClassUtils;
15 import org.mule.util.StringUtils;
16
17 import java.util.ArrayList;
18 import java.util.Iterator;
19 import java.util.List;
20 import java.util.StringTokenizer;
21
22 import javax.xml.namespace.QName;
23 import javax.xml.rpc.ParameterMode;
24
25
26
27
28 public class SoapMethod
29 {
30 private QName name;
31 private List namedParameters = new ArrayList();
32 private QName returnType;
33 private Class returnClass = Object.class;
34
35 public SoapMethod(String methodName, String paramsString) throws ClassNotFoundException
36 {
37 this(QNamePropertyEditor.convert(methodName), paramsString);
38 }
39
40
41
42
43
44
45
46
47 public SoapMethod(String methodName, List params) throws ClassNotFoundException
48 {
49 this(QNamePropertyEditor.convert(methodName), params);
50 }
51
52 public SoapMethod(QName methodName, String paramsString) throws ClassNotFoundException
53 {
54 name = methodName;
55 List params = new ArrayList();
56 for (StringTokenizer stringTokenizer = new StringTokenizer(paramsString, ","); stringTokenizer.hasMoreTokens();)
57 {
58 params.add(stringTokenizer.nextToken().trim());
59 }
60 initParams(params);
61 }
62
63 public SoapMethod(QName methodName, List params) throws ClassNotFoundException
64 {
65 name = methodName;
66 initParams(params);
67 }
68
69 private void initParams(List params) throws ClassNotFoundException
70 {
71
72 NamedParameter param;
73 for (Iterator iterator = params.iterator(); iterator.hasNext();)
74 {
75 String s = (String)iterator.next();
76
77 for (StringTokenizer tokenizer = new StringTokenizer(s, ";"); tokenizer.hasMoreTokens();)
78 {
79 String name = tokenizer.nextToken();
80 String type = tokenizer.nextToken();
81 if (name.equalsIgnoreCase("return"))
82 {
83 if (type.startsWith("qname{"))
84 {
85 returnType = QNamePropertyEditor.convert(type);
86 }
87 else
88 {
89 returnType = NamedParameter.createQName(type);
90 }
91 }
92 else if (name.equalsIgnoreCase("returnClass"))
93 {
94 returnClass = ClassUtils.loadClass(type, getClass());
95 }
96 else
97 {
98 String mode = tokenizer.nextToken();
99 QName paramName;
100 if (name.startsWith("qname{"))
101 {
102 paramName = QNamePropertyEditor.convert(name);
103 }
104 else
105 {
106 paramName = new QName(getName().getNamespaceURI(), name, getName().getPrefix());
107 }
108 QName qtype;
109 if (type.startsWith("qname{"))
110 {
111 qtype = QNamePropertyEditor.convert(type);
112 }
113 else
114 {
115 qtype = NamedParameter.createQName(type);
116 }
117 param = new NamedParameter(paramName, qtype, mode);
118 addNamedParameter(param);
119 }
120 }
121 }
122 }
123
124 public SoapMethod(QName name)
125 {
126 this.name = name;
127 this.returnType = null;
128 }
129
130 public SoapMethod(QName name, QName returnType)
131 {
132 this.name = name;
133 this.returnType = returnType;
134 }
135
136 public SoapMethod(QName name, QName returnType, Class returnClass)
137 {
138 this.name = name;
139 this.returnType = returnType;
140 this.returnClass = returnClass;
141 }
142
143 public SoapMethod(QName name, Class returnClass)
144 {
145 this.name = name;
146 this.returnClass = returnClass;
147 }
148
149 public SoapMethod(QName name, List namedParameters, QName returnType)
150 {
151 this.name = name;
152 this.namedParameters = namedParameters;
153 this.returnType = returnType;
154 }
155
156 public void addNamedParameter(NamedParameter param)
157 {
158 namedParameters.add(param);
159 }
160
161 public NamedParameter addNamedParameter(QName name, QName type, String mode)
162 {
163 if (StringUtils.isBlank(name.getNamespaceURI()))
164 {
165 name = new QName(getName().getNamespaceURI(), name.getLocalPart(), name.getPrefix());
166 }
167 NamedParameter param = new NamedParameter(name, type, mode);
168 namedParameters.add(param);
169 return param;
170 }
171
172 public NamedParameter addNamedParameter(QName name, QName type, ParameterMode mode)
173 {
174 if (StringUtils.isBlank(name.getNamespaceURI()))
175 {
176 name = new QName(getName().getNamespaceURI(), name.getLocalPart(), name.getPrefix());
177 }
178 NamedParameter param = new NamedParameter(name, type, mode);
179 namedParameters.add(param);
180 return param;
181 }
182
183 public void removeNamedParameter(NamedParameter param)
184 {
185 namedParameters.remove(param);
186 }
187
188 public QName getName()
189 {
190 return name;
191 }
192
193 public List getNamedParameters()
194 {
195 return namedParameters;
196 }
197
198 public QName getReturnType()
199 {
200 return returnType;
201 }
202
203 public void setReturnType(QName returnType)
204 {
205 this.returnType = returnType;
206 }
207
208 public Class getReturnClass()
209 {
210 return returnClass;
211 }
212
213 public void setReturnDataType(Class returnClass)
214 {
215 this.returnClass = returnClass;
216 }
217 }