KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mx4j > tools > remote > soap > SOAPClientInvoker


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package mx4j.tools.remote.soap;
10
11 import java.io.IOException JavaDoc;
12 import java.util.Set JavaDoc;
13 import javax.management.AttributeList JavaDoc;
14 import javax.management.AttributeNotFoundException JavaDoc;
15 import javax.management.InstanceAlreadyExistsException JavaDoc;
16 import javax.management.InstanceNotFoundException JavaDoc;
17 import javax.management.IntrospectionException JavaDoc;
18 import javax.management.InvalidAttributeValueException JavaDoc;
19 import javax.management.ListenerNotFoundException JavaDoc;
20 import javax.management.MBeanException JavaDoc;
21 import javax.management.MBeanInfo JavaDoc;
22 import javax.management.MBeanRegistrationException JavaDoc;
23 import javax.management.NotCompliantMBeanException JavaDoc;
24 import javax.management.ObjectInstance JavaDoc;
25 import javax.management.ObjectName JavaDoc;
26 import javax.management.ReflectionException JavaDoc;
27 import javax.management.remote.NotificationResult JavaDoc;
28 import javax.security.auth.Subject JavaDoc;
29 import javax.xml.namespace.QName JavaDoc;
30 import javax.xml.rpc.ParameterMode JavaDoc;
31 import javax.xml.rpc.ServiceException JavaDoc;
32
33 import mx4j.tools.remote.http.HTTPConnection;
34 import org.apache.axis.client.Call;
35 import org.apache.axis.client.Service;
36 import org.apache.axis.encoding.XMLType;
37 import org.apache.axis.message.SOAPHeaderElement;
38
39 /**
40  * @version $Revision: 1.3 $
41  */

42 public class SOAPClientInvoker implements HTTPConnection
43 {
44    private static final QName JavaDoc qObjectName = new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "ObjectName");
45    private static final QName JavaDoc qObjectInstance = new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "ObjectInstance");
46    private static final QName JavaDoc qSubject = new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "Subject");
47
48    private final String JavaDoc endpoint;
49    private final Service service;
50    private String JavaDoc connectionId;
51
52    public SOAPClientInvoker(String JavaDoc endpoint, Service service)
53    {
54       this.endpoint = endpoint;
55       this.service = service;
56    }
57
58    public String JavaDoc connect(Object JavaDoc credentials) throws IOException JavaDoc, SecurityException JavaDoc
59    {
60       Call call = createCall();
61
62       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "connect"));
63       call.addParameter("credentials", XMLType.XSD_ANY, ParameterMode.IN);
64       call.setReturnType(XMLType.XSD_STRING);
65 // call.addFault(new QName(SOAPConstants.NAMESPACE_URI, "SecurityException"), SecurityException.class, XMLType.XSD_ANY, true);
66

67       connectionId = (String JavaDoc)call.invoke(new Object JavaDoc[]{credentials});
68       return connectionId;
69    }
70
71    public void close() throws IOException JavaDoc
72    {
73       Call call = createCall();
74
75       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "close"));
76       call.setReturnType(XMLType.AXIS_VOID);
77
78       call.invoke(new Object JavaDoc[0]);
79    }
80
81    public String JavaDoc getConnectionId() throws IOException JavaDoc
82    {
83       return connectionId;
84    }
85
86    public Integer JavaDoc addNotificationListener(ObjectName JavaDoc name, Object JavaDoc filter, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, IOException JavaDoc
87    {
88       Call call = createCall();
89
90       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "addNotificationListener"));
91       call.addParameter("observed", qObjectName, ParameterMode.IN);
92       call.addParameter("filter", XMLType.XSD_ANY, ParameterMode.IN);
93       call.addParameter("delegate", qSubject, ParameterMode.IN);
94       call.setReturnType(XMLType.XSD_INT);
95
96       return (Integer JavaDoc)call.invoke(new Object JavaDoc[]{name, filter, delegate});
97    }
98
99    public void removeNotificationListeners(ObjectName JavaDoc observed, Integer JavaDoc[] ids, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, ListenerNotFoundException JavaDoc, IOException JavaDoc
100    {
101       Call call = createCall();
102
103       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "removeNotificationListeners"));
104       call.addParameter("observed", qObjectName, ParameterMode.IN);
105       call.addParameter("ids", XMLType.SOAP_ARRAY, ParameterMode.IN);
106       call.addParameter("delegate", qSubject, ParameterMode.IN);
107       call.setReturnType(XMLType.AXIS_VOID);
108
109       call.invoke(new Object JavaDoc[]{observed, ids, delegate});
110    }
111
112    public NotificationResult JavaDoc fetchNotifications(long clientSequenceNumber, int maxNotifications, long timeout) throws IOException JavaDoc
113    {
114       Call call = createCall();
115
116       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "fetchNotifications"));
117       call.addParameter("sequence", XMLType.XSD_LONG, ParameterMode.IN);
118       call.addParameter("maxNumber", XMLType.XSD_INT, ParameterMode.IN);
119       call.addParameter("timeout", XMLType.XSD_LONG, ParameterMode.IN);
120       call.setReturnType(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "NotificationResult"));
121
122       NotificationResult JavaDoc result = (NotificationResult JavaDoc)call.invoke(new Object JavaDoc[]{new Long JavaDoc(clientSequenceNumber), new Integer JavaDoc(maxNotifications), new Long JavaDoc(timeout)});
123       return result;
124    }
125
126    public void addNotificationListener(ObjectName JavaDoc name, ObjectName JavaDoc listener, Object JavaDoc filter, Object JavaDoc handback, Subject JavaDoc delegate)
127            throws InstanceNotFoundException JavaDoc, IOException JavaDoc
128    {
129       Call call = createCall();
130
131       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "addNotificationListener"));
132       call.addParameter("observed", qObjectName, ParameterMode.IN);
133       call.addParameter("listener", qObjectName, ParameterMode.IN);
134       call.addParameter("filter", XMLType.XSD_ANY, ParameterMode.IN);
135       call.addParameter("handback", XMLType.XSD_ANY, ParameterMode.IN);
136       call.addParameter("delegate", qSubject, ParameterMode.IN);
137       call.setReturnType(XMLType.AXIS_VOID);
138
139       call.invoke(new Object JavaDoc[]{name, listener, filter, handback, delegate});
140    }
141
142    public void removeNotificationListener(ObjectName JavaDoc name, ObjectName JavaDoc listener, Subject JavaDoc delegate)
143            throws InstanceNotFoundException JavaDoc, ListenerNotFoundException JavaDoc, IOException JavaDoc
144    {
145       Call call = createCall();
146
147       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "removeNotificationListener"));
148       call.addParameter("observed", qObjectName, ParameterMode.IN);
149       call.addParameter("listener", qObjectName, ParameterMode.IN);
150       call.addParameter("delegate", qSubject, ParameterMode.IN);
151       call.setReturnType(XMLType.AXIS_VOID);
152
153       call.invoke(new Object JavaDoc[]{name, listener, delegate});
154    }
155
156    public void removeNotificationListener(ObjectName JavaDoc name, ObjectName JavaDoc listener, Object JavaDoc filter, Object JavaDoc handback, Subject JavaDoc delegate)
157            throws InstanceNotFoundException JavaDoc, ListenerNotFoundException JavaDoc, IOException JavaDoc
158    {
159       Call call = createCall();
160
161       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "removeNotificationListener"));
162       call.addParameter("observed", qObjectName, ParameterMode.IN);
163       call.addParameter("listener", qObjectName, ParameterMode.IN);
164       call.addParameter("filter", XMLType.XSD_ANY, ParameterMode.IN);
165       call.addParameter("handback", XMLType.XSD_ANY, ParameterMode.IN);
166       call.addParameter("delegate", qSubject, ParameterMode.IN);
167       call.setReturnType(XMLType.AXIS_VOID);
168
169       call.invoke(new Object JavaDoc[]{name, listener, filter, handback, delegate});
170    }
171
172    public MBeanInfo JavaDoc getMBeanInfo(ObjectName JavaDoc objectName, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, IntrospectionException JavaDoc, ReflectionException JavaDoc, IOException JavaDoc
173    {
174       Call call = createCall();
175
176       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "getMBeanInfo"));
177       call.addParameter("objectName", qObjectName, ParameterMode.IN);
178       call.addParameter("delegate", qSubject, ParameterMode.IN);
179       call.setReturnType(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "MBeanInfo"));
180
181       MBeanInfo JavaDoc info = (MBeanInfo JavaDoc)call.invoke(new Object JavaDoc[]{objectName, delegate});
182       return info;
183    }
184
185    public boolean isInstanceOf(ObjectName JavaDoc objectName, String JavaDoc className, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, IOException JavaDoc
186    {
187       Call call = createCall();
188
189       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "isInstanceOf"));
190       call.addParameter("objectName", qObjectName, ParameterMode.IN);
191       call.addParameter("className", XMLType.XSD_STRING, ParameterMode.IN);
192       call.addParameter("delegate", qSubject, ParameterMode.IN);
193       call.setReturnType(XMLType.XSD_BOOLEAN);
194
195       Boolean JavaDoc isinstanceof = (Boolean JavaDoc)call.invoke(new Object JavaDoc[]{objectName, className, delegate});
196       return isinstanceof.booleanValue();
197    }
198
199    public String JavaDoc[] getDomains(Subject JavaDoc delegate) throws IOException JavaDoc
200    {
201       Call call = createCall();
202
203       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "getDomains"));
204       call.addParameter("delegate", qSubject, ParameterMode.IN);
205       call.setReturnType(XMLType.SOAP_ARRAY);
206
207       String JavaDoc[] domains = (String JavaDoc[])call.invoke(new Object JavaDoc[]{delegate});
208       return domains;
209    }
210
211    public String JavaDoc getDefaultDomain(Subject JavaDoc delegate) throws IOException JavaDoc
212    {
213       Call call = createCall();
214
215       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "getDefaultDomain"));
216       call.addParameter("delegate", qSubject, ParameterMode.IN);
217       call.setReturnType(XMLType.XSD_STRING);
218
219       String JavaDoc domain = (String JavaDoc)call.invoke(new Object JavaDoc[]{delegate});
220       return domain;
221    }
222
223    public ObjectInstance JavaDoc createMBean(String JavaDoc className, ObjectName JavaDoc objectName, Object JavaDoc args, String JavaDoc[] parameters, Subject JavaDoc delegate) throws ReflectionException JavaDoc, InstanceAlreadyExistsException JavaDoc, MBeanRegistrationException JavaDoc, MBeanException JavaDoc, NotCompliantMBeanException JavaDoc, IOException JavaDoc
224    {
225       Call call = createCall();
226
227       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "createMBean"));
228
229       call.addParameter("className", XMLType.XSD_STRING, ParameterMode.IN);
230       call.addParameter("objectName", qObjectName, ParameterMode.IN);
231       call.addParameter("arguments", XMLType.SOAP_ARRAY, ParameterMode.IN);
232       call.addParameter("signature", XMLType.SOAP_ARRAY, ParameterMode.IN);
233       call.addParameter("delegate", qSubject, ParameterMode.IN);
234       call.setReturnType(qObjectInstance);
235
236       ObjectInstance JavaDoc instance = (ObjectInstance JavaDoc)call.invoke(new Object JavaDoc[]{className, objectName, args, parameters, delegate});
237       return instance;
238    }
239
240    public ObjectInstance JavaDoc createMBean(String JavaDoc className, ObjectName JavaDoc objectName, ObjectName JavaDoc loaderName, Object JavaDoc args, String JavaDoc[] parameters, Subject JavaDoc delegate) throws ReflectionException JavaDoc, InstanceAlreadyExistsException JavaDoc, MBeanRegistrationException JavaDoc, MBeanException JavaDoc, NotCompliantMBeanException JavaDoc, InstanceNotFoundException JavaDoc, IOException JavaDoc
241    {
242       Call call = createCall();
243
244       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "createMBean"));
245
246       call.addParameter("className", XMLType.XSD_STRING, ParameterMode.IN);
247       call.addParameter("objectName", qObjectName, ParameterMode.IN);
248       call.addParameter("loaderName", qObjectName, ParameterMode.IN);
249       call.addParameter("arguments", XMLType.SOAP_ARRAY, ParameterMode.IN);
250       call.addParameter("signature", XMLType.SOAP_ARRAY, ParameterMode.IN);
251       call.addParameter("delegate", qSubject, ParameterMode.IN);
252       call.setReturnType(qObjectInstance);
253
254       ObjectInstance JavaDoc instance = (ObjectInstance JavaDoc)call.invoke(new Object JavaDoc[]{className, objectName, loaderName, args, parameters, delegate});
255       return instance;
256    }
257
258    public void unregisterMBean(ObjectName JavaDoc objectName, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, MBeanRegistrationException JavaDoc, IOException JavaDoc
259    {
260       Call call = createCall();
261
262       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "unregisterMBean"));
263       call.addParameter("objectName", qObjectName, ParameterMode.IN);
264       call.addParameter("delegate", qSubject, ParameterMode.IN);
265       call.setReturnType(XMLType.AXIS_VOID);
266
267       call.invoke(new Object JavaDoc[]{objectName, delegate});
268    }
269
270    public Object JavaDoc getAttribute(ObjectName JavaDoc objectName, String JavaDoc attribute, Subject JavaDoc delegate) throws MBeanException JavaDoc, AttributeNotFoundException JavaDoc, InstanceNotFoundException JavaDoc, ReflectionException JavaDoc, IOException JavaDoc
271    {
272       Call call = createCall();
273
274       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "getAttribute"));
275       call.addParameter("objectName", qObjectName, ParameterMode.IN);
276       call.addParameter("attributeName", XMLType.XSD_STRING, ParameterMode.IN);
277       call.addParameter("delegate", qSubject, ParameterMode.IN);
278       call.setReturnType(XMLType.XSD_ANY);
279
280       Object JavaDoc result = call.invoke(new Object JavaDoc[]{objectName, attribute, delegate});
281       return result;
282    }
283
284    public void setAttribute(ObjectName JavaDoc objectName, Object JavaDoc attribute, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, AttributeNotFoundException JavaDoc, InvalidAttributeValueException JavaDoc, MBeanException JavaDoc, ReflectionException JavaDoc, IOException JavaDoc
285    {
286       Call call = createCall();
287
288       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "setAttribute"));
289
290       call.addParameter("objectName", qObjectName, ParameterMode.IN);
291       call.addParameter("attribute", new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "Attribute"), ParameterMode.IN);
292       call.addParameter("delegate", qSubject, ParameterMode.IN);
293       call.setReturnType(XMLType.AXIS_VOID);
294
295       call.invoke(new Object JavaDoc[]{objectName, attribute, delegate});
296    }
297
298    public AttributeList JavaDoc getAttributes(ObjectName JavaDoc objectName, String JavaDoc[] attributes, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, ReflectionException JavaDoc, IOException JavaDoc
299    {
300       Call call = createCall();
301
302       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "getAttributes"));
303       call.addParameter("objectName", qObjectName, ParameterMode.IN);
304       call.addParameter("attributeNames", XMLType.SOAP_ARRAY, ParameterMode.IN);
305       call.addParameter("delegate", qSubject, ParameterMode.IN);
306       call.setReturnType(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "AttributeList"));
307
308       AttributeList JavaDoc list = (AttributeList JavaDoc)call.invoke(new Object JavaDoc[]{objectName, attributes, delegate});
309       return list;
310    }
311
312    public AttributeList JavaDoc setAttributes(ObjectName JavaDoc objectName, Object JavaDoc attributes, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, ReflectionException JavaDoc, IOException JavaDoc
313    {
314       Call call = createCall();
315
316       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "setAttributes"));
317       QName JavaDoc qAttributeList = new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "AttributeList");
318       call.addParameter("objectName", qObjectName, ParameterMode.IN);
319       call.addParameter("attributeList", qAttributeList, ParameterMode.IN);
320       call.addParameter("delegate", qSubject, ParameterMode.IN);
321       call.setReturnType(qAttributeList);
322
323       AttributeList JavaDoc list = (AttributeList JavaDoc)call.invoke(new Object JavaDoc[]{objectName, attributes, delegate});
324       return list;
325    }
326
327    public Object JavaDoc invoke(ObjectName JavaDoc objectName, String JavaDoc methodName, Object JavaDoc args, String JavaDoc[] parameters, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, MBeanException JavaDoc, ReflectionException JavaDoc, IOException JavaDoc
328    {
329       Call call = createCall();
330
331       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "invoke"));
332       call.addParameter("objectName", qObjectName, ParameterMode.IN);
333       call.addParameter("operationName", XMLType.XSD_STRING, ParameterMode.IN);
334       call.addParameter("arguments", XMLType.SOAP_ARRAY, ParameterMode.IN);
335       call.addParameter("signature", XMLType.SOAP_ARRAY, ParameterMode.IN);
336       call.addParameter("delegate", qSubject, ParameterMode.IN);
337       call.setReturnType(XMLType.XSD_ANY);
338
339       Object JavaDoc object = call.invoke(new Object JavaDoc[]{objectName, methodName, args, parameters, delegate});
340       return object;
341    }
342
343    public Integer JavaDoc getMBeanCount(Subject JavaDoc delegate) throws IOException JavaDoc
344    {
345       Call call = createCall();
346
347       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "getMBeanCount"));
348       call.addParameter("delegate", qSubject, ParameterMode.IN);
349       call.setReturnType(XMLType.XSD_INT);
350
351       Integer JavaDoc count = (Integer JavaDoc)call.invoke(new Object JavaDoc[]{delegate});
352       return count;
353    }
354
355    public boolean isRegistered(ObjectName JavaDoc objectName, Subject JavaDoc delegate) throws IOException JavaDoc
356    {
357       Call call = createCall();
358
359       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "isRegistered"));
360
361       call.addParameter("objectName", qObjectName, ParameterMode.IN);
362       call.addParameter("delegate", qSubject, ParameterMode.IN);
363       call.setReturnType(XMLType.XSD_BOOLEAN);
364
365       Boolean JavaDoc registered = (Boolean JavaDoc)call.invoke(new Object JavaDoc[]{objectName, delegate});
366       return registered.booleanValue();
367    }
368
369    public ObjectInstance JavaDoc getObjectInstance(ObjectName JavaDoc objectName, Subject JavaDoc delegate) throws InstanceNotFoundException JavaDoc, IOException JavaDoc
370    {
371       Call call = createCall();
372
373       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "getObjectInstance"));
374       call.addParameter("objectName", qObjectName, ParameterMode.IN);
375       call.addParameter("delegate", qSubject, ParameterMode.IN);
376       call.setReturnType(qObjectInstance);
377
378       ObjectInstance JavaDoc instance = (ObjectInstance JavaDoc)call.invoke(new Object JavaDoc[]{objectName, delegate});
379       return instance;
380    }
381
382    public Set JavaDoc queryMBeans(ObjectName JavaDoc patternName, Object JavaDoc filter, Subject JavaDoc delegate) throws IOException JavaDoc
383    {
384       Call call = createCall();
385
386       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "queryMBeans"));
387       call.addParameter("pattern", qObjectName, ParameterMode.IN);
388       call.addParameter("query", XMLType.XSD_ANY, ParameterMode.IN);
389       call.addParameter("delegate", qSubject, ParameterMode.IN);
390       call.setReturnType(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "Set"));
391
392       Set JavaDoc set = (Set JavaDoc)call.invoke(new Object JavaDoc[]{patternName, filter, delegate});
393       return set;
394    }
395
396    public Set JavaDoc queryNames(ObjectName JavaDoc patternName, Object JavaDoc filter, Subject JavaDoc delegate) throws IOException JavaDoc
397    {
398       Call call = createCall();
399
400       call.setOperationName(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "queryNames"));
401       call.addParameter("pattern", qObjectName, ParameterMode.IN);
402       call.addParameter("query", XMLType.XSD_ANY, ParameterMode.IN);
403       call.addParameter("delegate", qSubject, ParameterMode.IN);
404       call.setReturnType(new QName JavaDoc(SOAPConstants.NAMESPACE_URI, "Set"));
405
406       Set JavaDoc set = (Set JavaDoc)call.invoke(new Object JavaDoc[]{patternName, filter, delegate});
407       return set;
408    }
409
410    private Call createCall() throws IOException JavaDoc
411    {
412       try
413       {
414          Call call = (Call)service.createCall();
415
416          call.setTargetEndpointAddress(endpoint);
417
418          SOAPHeaderElement connectionIDHeader = new SOAPHeaderElement(SOAPConstants.NAMESPACE_URI, SOAPConstants.CONNECTION_ID_HEADER_NAME, connectionId);
419          connectionIDHeader.setMustUnderstand(true);
420          call.addHeader(connectionIDHeader);
421
422          return call;
423       }
424       catch (ServiceException JavaDoc x)
425       {
426          throw new IOException JavaDoc(x.toString());
427       }
428    }
429 }
430
Popular Tags