View Javadoc

1   /*
2    * $Id: SoapMethod.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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   * A SOAP method representation where the parameters are named
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       * Creates a Soap Method using the param string set in the MUle configuration
42       * file
43       * 
44       * @param methodName the name of the method
45       * @param params the param string to parse
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 }