KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > axis > client > Stub


1 /*
2  * Copyright 2001-2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.axis.client;
18
19 import org.apache.axis.AxisFault;
20 import org.apache.axis.message.SOAPHeaderElement;
21 import org.apache.axis.utils.Messages;
22
23 import javax.xml.namespace.QName JavaDoc;
24 import javax.xml.rpc.JAXRPCException JavaDoc;
25 import javax.xml.rpc.Service JavaDoc;
26 import javax.xml.rpc.ServiceException JavaDoc;
27 import java.net.MalformedURLException JavaDoc;
28 import java.net.URL JavaDoc;
29 import java.util.Iterator JavaDoc;
30 import java.util.Properties JavaDoc;
31 import java.util.Vector JavaDoc;
32
33 /**
34 * This class is the base for all generated stubs.
35 */

36
37 public abstract class Stub implements javax.xml.rpc.Stub JavaDoc {
38
39     protected Service service = null;
40
41     // If maintainSessionSet is true, then setMaintainSession
42
// was called and it set the value of maintainSession.
43
// Use that value when getting the new Call object.
44
// If maintainSession HAS NOT been set, then the
45
// Call object uses the default maintainSession
46
// from the Service.
47
protected boolean maintainSessionSet = false;
48     protected boolean maintainSession = false;
49
50     protected Properties JavaDoc cachedProperties = new Properties JavaDoc();
51     protected String JavaDoc cachedUsername = null;
52     protected String JavaDoc cachedPassword = null;
53     protected URL JavaDoc cachedEndpoint = null;
54     protected Integer JavaDoc cachedTimeout = null;
55     protected QName JavaDoc cachedPortName = null;
56
57     // Support for Header
58
private Vector JavaDoc headers = new Vector JavaDoc();
59
60     // Support for Attachments
61
private Vector JavaDoc attachments = new Vector JavaDoc();
62     
63     // Flag to determine whether this is the first call to register type mappings.
64
// This need not be synchronized because firstCall is ONLY called from within
65
// a synchronized block in the generated stub code.
66
private boolean firstCall = true;
67
68     // The last call object
69
protected Call _call = null;
70
71     /**
72      * Is this the first time the type mappings are being registered?
73      */

74     protected boolean firstCall() {
75         boolean ret = firstCall;
76         firstCall = false;
77         return ret;
78     } // firstCall
79

80     /**
81      * Sets the value for a named property. JAX-RPC 1.0 specification
82      * specifies a standard set of properties that may be passed
83      * to the Stub._setProperty method. These properties include:
84      * <UL>
85      * <LI>javax.xml.rpc.security.auth.username: Username for the HTTP Basic Authentication
86      * <LI>javax.xml.rpc.security.auth.password: Password for the HTTP Basic Authentication
87      * <LI>javax.xml.rpc.service.endpoint.address: Target service endpoint address.
88      * <LI>[TBD: Additional properties]
89      * </UL>
90      *
91      * @param name - Name of the property
92      * @param value - Value of the property
93      */

94     public void _setProperty(String JavaDoc name, Object JavaDoc value) {
95         if (name == null || value == null) {
96             throw new JAXRPCException JavaDoc(
97                     Messages.getMessage(name == null ?
98                                          "badProp03" : "badProp04"));
99         }
100         else if (name.equals(Call.USERNAME_PROPERTY)) {
101             if (!(value instanceof String JavaDoc)) {
102                 throw new JAXRPCException JavaDoc(
103                         Messages.getMessage("badProp00", new String JavaDoc[] {
104                         name, "java.lang.String", value.getClass().getName()}));
105             }
106             cachedUsername = (String JavaDoc) value;
107         }
108         else if (name.equals(Call.PASSWORD_PROPERTY)) {
109             if (!(value instanceof String JavaDoc)) {
110                 throw new JAXRPCException JavaDoc(
111                         Messages.getMessage("badProp00", new String JavaDoc[] {
112                         name, "java.lang.String", value.getClass().getName()}));
113             }
114             cachedPassword = (String JavaDoc) value;
115         }
116         else if (name.equals(Stub.ENDPOINT_ADDRESS_PROPERTY)) {
117             if (!(value instanceof String JavaDoc)) {
118                 throw new JAXRPCException JavaDoc(
119                         Messages.getMessage("badProp00", new String JavaDoc[] {
120                         name, "java.lang.String", value.getClass().getName()}));
121             }
122             try {
123                 cachedEndpoint = new URL JavaDoc ((String JavaDoc) value);
124             }
125             catch (MalformedURLException JavaDoc mue) {
126                 throw new JAXRPCException JavaDoc(mue.getMessage());
127             }
128         }
129         else if (name.equals(Call.SESSION_MAINTAIN_PROPERTY)) {
130             if (!(value instanceof Boolean JavaDoc)) {
131                 throw new JAXRPCException JavaDoc(
132                         Messages.getMessage("badProp00", new String JavaDoc[]
133                         {name,
134                         "java.lang.Boolean",
135                         value.getClass().getName()}));
136             }
137             maintainSessionSet = true;
138             maintainSession = ((Boolean JavaDoc) value).booleanValue();
139         }
140         else if (name.startsWith("java.") || name.startsWith("javax.")) {
141             throw new JAXRPCException JavaDoc(
142                     Messages.getMessage("badProp05", name));
143         }
144         else {
145             cachedProperties.put(name, value);
146         }
147     } // _setProperty
148

149     /**
150      * Gets the value of a named property.
151      *
152      * @param name
153      *
154      * @return the value of a named property.
155      */

156     public Object JavaDoc _getProperty(String JavaDoc name) {
157         if (name == null) {
158             throw new JAXRPCException JavaDoc(
159                     Messages.getMessage("badProp05", name));
160         }
161         else {
162             if (name.equals(Call.USERNAME_PROPERTY)) {
163                 return cachedUsername;
164             }
165             else if (name.equals(Call.PASSWORD_PROPERTY)) {
166                 return cachedPassword;
167             }
168             else if (name.equals(Stub.ENDPOINT_ADDRESS_PROPERTY)) {
169                 return cachedEndpoint.toString();
170             }
171             else if (name.equals(Call.SESSION_MAINTAIN_PROPERTY)) {
172                 return maintainSessionSet ? (maintainSession ? Boolean.TRUE : Boolean.FALSE) : null;
173             }
174             else if (name.startsWith("java.") || name.startsWith("javax.")) {
175                 throw new JAXRPCException JavaDoc(
176                         Messages.getMessage("badProp05", name));
177             }
178             else {
179                 return cachedProperties.get(name);
180             }
181         }
182     } // _getProperty
183

184     /**
185      * Remove a property from this instance of the Stub
186      * NOTE: This is NOT part of JAX-RPC and is an Axis extension.
187      *
188      * @param name the name of the property to remove
189      * @return the value to which the key had been mapped, or null if the key did not have a mapping.
190      */

191     public Object JavaDoc removeProperty(String JavaDoc name) {
192         return cachedProperties.remove(name);
193     }
194     /**
195      * Return the names of configurable properties for this stub class.
196      */

197     public Iterator JavaDoc _getPropertyNames() {
198         return cachedProperties.keySet().iterator();
199     } // _getPropertyNames
200

201     /**
202      * Set the username.
203      */

204     public void setUsername(String JavaDoc username) {
205         cachedUsername = username;
206     } // setUsername
207

208     /**
209      * Get the user name
210      */

211     public String JavaDoc getUsername() {
212         return cachedUsername;
213     } // getUsername
214

215     /**
216      * Set the password.
217      */

218     public void setPassword(String JavaDoc password) {
219         cachedPassword = password;
220     } // setPassword
221

222     /**
223      * Get the password
224      */

225     public String JavaDoc getPassword() {
226         return cachedPassword;
227     } // getPassword
228

229     /**
230      * Get the timeout value in milliseconds. 0 means no timeout.
231      */

232     public int getTimeout() {
233         return cachedTimeout == null ? 0 : cachedTimeout.intValue();
234     } // getTimeout
235

236     /**
237      * Set the timeout in milliseconds.
238      */

239     public void setTimeout(int timeout) {
240         cachedTimeout = new Integer JavaDoc(timeout);
241     } // setTimeout
242

243     /**
244      * Get the port name.
245      */

246     public QName JavaDoc getPortName() {
247         return cachedPortName;
248     } // getPortName
249

250     /**
251      * Set the port QName.
252      */

253     public void setPortName(QName JavaDoc portName) {
254         cachedPortName = portName;
255     } // setPortName
256

257     /**
258      * Set the port name.
259      */

260     public void setPortName(String JavaDoc portName) {
261         setPortName(new QName JavaDoc(portName));
262     } // setPortName
263

264     /**
265      * If set to true, session is maintained; if false, it is not.
266      */

267     public void setMaintainSession(boolean session) {
268         maintainSessionSet = true;
269         maintainSession = session;
270         cachedProperties.put(Call.SESSION_MAINTAIN_PROPERTY, session ? Boolean.TRUE : Boolean.FALSE);
271     } // setmaintainSession
272

273
274     /**
275      * Set the header
276      * @param namespace
277      * @param partName that uniquely identify a header object.
278      * @param headerValue Object that is sent in the request as a SOAPHeader
279      */

280     public void setHeader(String JavaDoc namespace, String JavaDoc partName, Object JavaDoc headerValue) {
281         headers.add(new SOAPHeaderElement(namespace, partName, headerValue));
282     }
283
284     /**
285      * Set the header
286      */

287     public void setHeader(SOAPHeaderElement header) {
288         headers.add(header);
289     }
290
291     /**
292      * Extract attachments
293      * @param call
294      */

295     public void extractAttachments(Call call) {
296         attachments.clear();
297         if(call.getResponseMessage() != null) {
298             Iterator JavaDoc iterator = call.getResponseMessage().getAttachments();
299             while(iterator.hasNext()){
300                 attachments.add(iterator.next());
301             }
302         }
303     }
304     
305     /**
306      * Add an attachment
307      * @param handler
308      */

309     public void addAttachment(Object JavaDoc handler) {
310         attachments.add(handler);
311     }
312     
313     /**
314      * Get the header element
315      */

316     public SOAPHeaderElement getHeader(String JavaDoc namespace, String JavaDoc partName) {
317         for(int i=0;i<headers.size();i++) {
318             SOAPHeaderElement header = (SOAPHeaderElement)headers.get(i);
319             if(header.getNamespaceURI().equals(namespace) &&
320                header.getName().equals(partName))
321                 return header;
322         }
323         return null;
324     }
325
326     /**
327      * Get a response header element
328      */

329     public SOAPHeaderElement getResponseHeader(String JavaDoc namespace, String JavaDoc partName) {
330         try
331         {
332             if (_call == null)
333                 return null;
334             return _call.getResponseMessage().getSOAPEnvelope().getHeaderByName(namespace, partName);
335         }
336         catch (Exception JavaDoc e)
337         {
338             return null;
339         }
340     }
341
342     /**
343      * Get the array of header elements
344      */

345     public SOAPHeaderElement[] getHeaders() {
346         SOAPHeaderElement[] array = new SOAPHeaderElement[headers.size()];
347         headers.copyInto(array);
348         return array;
349     }
350
351     /**
352      * Get the array of response header elements
353      */

354     public SOAPHeaderElement[] getResponseHeaders() {
355         SOAPHeaderElement[] array = new SOAPHeaderElement[0];
356         try
357         {
358             if (_call == null)
359                 return array;
360             Vector JavaDoc h = _call.getResponseMessage().getSOAPEnvelope().getHeaders();
361             array = new SOAPHeaderElement[h.size()];
362             h.copyInto(array);
363             return array;
364         }
365         catch (Exception JavaDoc e)
366         {
367             return array;
368         }
369     }
370
371     /**
372      * Get the array of attachments
373      * The attachment array is cleared after this, so it is a destructive operation.
374      * @return the array of attachments that was in the message, or an empty array if
375      * there were none
376      */

377     public Object JavaDoc[] getAttachments() {
378         Object JavaDoc[] array = new Object JavaDoc[attachments.size()];
379         attachments.copyInto(array);
380         attachments.clear();
381         return array;
382     }
383
384     /**
385      * This method clears both requestHeaders and responseHeaders hashtables.
386      */

387     public void clearHeaders() {
388         headers.clear();
389     }
390     
391     /**
392      * This method clears the request attachments.
393      */

394     public void clearAttachments() {
395         attachments.clear();
396     }
397
398     protected void setRequestHeaders(org.apache.axis.client.Call call) throws AxisFault {
399         // Set the call headers.
400
SOAPHeaderElement[] headers = getHeaders();
401         for(int i=0;i<headers.length;i++){
402             call.addHeader(headers[i]);
403         }
404     }
405
406     /**
407      * copy the attachments from the stub to the call object. After doing so,
408      * the local set of attachments are cleared.
409      * @param call call object to configure
410      * @throws AxisFault
411      */

412     protected void setAttachments(org.apache.axis.client.Call call) throws AxisFault {
413         // Set the attachments.
414
Object JavaDoc[] attachments = getAttachments();
415         for(int i=0;i<attachments.length;i++){
416             call.addAttachmentPart(attachments[i]);
417         }
418         clearAttachments();
419     }
420
421     /**
422      * Provide access to the service object. Not part of JAX-RPC
423      *
424      * @return the service object for this stub
425      */

426     public Service _getService() {
427         return service;
428     }
429
430     /**
431      * Creates a call from the service.
432      * @return
433      */

434     public Call _createCall() throws ServiceException JavaDoc {
435         _call = (Call) service.createCall();
436
437         // TODO: There is a lot of code in the generated stubs that
438
// can be moved here.
439
return _call;
440     }
441
442     /**
443      * Returns last Call object associated with this stub.
444      */

445     public Call _getCall() {
446         return _call;
447     }
448
449     /**
450      * Helper method for updating headers from the response.
451      *
452      * Deprecated, since response headers should not be
453      * automatically reflected back into the stub list.
454      *
455      *
456      * @deprecated This method has been changed to a no-op but remains
457      * in the code to keep compatibility with pre-1.1
458      * generated stubs.
459      */

460      protected void getResponseHeaders(org.apache.axis.client.Call call) throws AxisFault {
461      }
462
463 }
464
Popular Tags