1 8 9 package mx4j.tools.remote.soap; 10 11 import java.io.IOException ; 12 import java.util.Set ; 13 import javax.management.AttributeList ; 14 import javax.management.AttributeNotFoundException ; 15 import javax.management.InstanceAlreadyExistsException ; 16 import javax.management.InstanceNotFoundException ; 17 import javax.management.IntrospectionException ; 18 import javax.management.InvalidAttributeValueException ; 19 import javax.management.ListenerNotFoundException ; 20 import javax.management.MBeanException ; 21 import javax.management.MBeanInfo ; 22 import javax.management.MBeanRegistrationException ; 23 import javax.management.NotCompliantMBeanException ; 24 import javax.management.ObjectInstance ; 25 import javax.management.ObjectName ; 26 import javax.management.ReflectionException ; 27 import javax.management.remote.NotificationResult ; 28 import javax.security.auth.Subject ; 29 import javax.xml.namespace.QName ; 30 import javax.xml.rpc.ParameterMode ; 31 import javax.xml.rpc.ServiceException ; 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 42 public class SOAPClientInvoker implements HTTPConnection 43 { 44 private static final QName qObjectName = new QName (SOAPConstants.NAMESPACE_URI, "ObjectName"); 45 private static final QName qObjectInstance = new QName (SOAPConstants.NAMESPACE_URI, "ObjectInstance"); 46 private static final QName qSubject = new QName (SOAPConstants.NAMESPACE_URI, "Subject"); 47 48 private final String endpoint; 49 private final Service service; 50 private String connectionId; 51 52 public SOAPClientInvoker(String endpoint, Service service) 53 { 54 this.endpoint = endpoint; 55 this.service = service; 56 } 57 58 public String connect(Object credentials) throws IOException , SecurityException 59 { 60 Call call = createCall(); 61 62 call.setOperationName(new QName (SOAPConstants.NAMESPACE_URI, "connect")); 63 call.addParameter("credentials", XMLType.XSD_ANY, ParameterMode.IN); 64 call.setReturnType(XMLType.XSD_STRING); 65 67 connectionId = (String )call.invoke(new Object []{credentials}); 68 return connectionId; 69 } 70 71 public void close() throws IOException 72 { 73 Call call = createCall(); 74 75 call.setOperationName(new QName (SOAPConstants.NAMESPACE_URI, "close")); 76 call.setReturnType(XMLType.AXIS_VOID); 77 78 call.invoke(new Object [0]); 79 } 80 81 public String getConnectionId() throws IOException 82 { 83 return connectionId; 84 } 85 86 public Integer addNotificationListener(ObjectName name, Object filter, Subject delegate) throws InstanceNotFoundException , IOException 87 { 88 Call call = createCall(); 89 90 call.setOperationName(new QName (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 )call.invoke(new Object []{name, filter, delegate}); 97 } 98 99 public void removeNotificationListeners(ObjectName observed, Integer [] ids, Subject delegate) throws InstanceNotFoundException , ListenerNotFoundException , IOException 100 { 101 Call call = createCall(); 102 103 call.setOperationName(new QName (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 []{observed, ids, delegate}); 110 } 111 112 public NotificationResult fetchNotifications(long clientSequenceNumber, int maxNotifications, long timeout) throws IOException 113 { 114 Call call = createCall(); 115 116 call.setOperationName(new QName (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 (SOAPConstants.NAMESPACE_URI, "NotificationResult")); 121 122 NotificationResult result = (NotificationResult )call.invoke(new Object []{new Long (clientSequenceNumber), new Integer (maxNotifications), new Long (timeout)}); 123 return result; 124 } 125 126 public void addNotificationListener(ObjectName name, ObjectName listener, Object filter, Object handback, Subject delegate) 127 throws InstanceNotFoundException , IOException 128 { 129 Call call = createCall(); 130 131 call.setOperationName(new QName (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 []{name, listener, filter, handback, delegate}); 140 } 141 142 public void removeNotificationListener(ObjectName name, ObjectName listener, Subject delegate) 143 throws InstanceNotFoundException , ListenerNotFoundException , IOException 144 { 145 Call call = createCall(); 146 147 call.setOperationName(new QName (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 []{name, listener, delegate}); 154 } 155 156 public void removeNotificationListener(ObjectName name, ObjectName listener, Object filter, Object handback, Subject delegate) 157 throws InstanceNotFoundException , ListenerNotFoundException , IOException 158 { 159 Call call = createCall(); 160 161 call.setOperationName(new QName (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 []{name, listener, filter, handback, delegate}); 170 } 171 172 public MBeanInfo getMBeanInfo(ObjectName objectName, Subject delegate) throws InstanceNotFoundException , IntrospectionException , ReflectionException , IOException 173 { 174 Call call = createCall(); 175 176 call.setOperationName(new QName (SOAPConstants.NAMESPACE_URI, "getMBeanInfo")); 177 call.addParameter("objectName", qObjectName, ParameterMode.IN); 178 call.addParameter("delegate", qSubject, ParameterMode.IN); 179 call.setReturnType(new QName (SOAPConstants.NAMESPACE_URI, "MBeanInfo")); 180 181 MBeanInfo info = (MBeanInfo )call.invoke(new Object []{objectName, delegate}); 182 return info; 183 } 184 185 public boolean isInstanceOf(ObjectName objectName, String className, Subject delegate) throws InstanceNotFoundException , IOException 186 { 187 Call call = createCall(); 188 189 call.setOperationName(new QName (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 isinstanceof = (Boolean )call.invoke(new Object []{objectName, className, delegate}); 196 return isinstanceof.booleanValue(); 197 } 198 199 public String [] getDomains(Subject delegate) throws IOException 200 { 201 Call call = createCall(); 202 203 call.setOperationName(new QName (SOAPConstants.NAMESPACE_URI, "getDomains")); 204 call.addParameter("delegate", qSubject, ParameterMode.IN); 205 call.setReturnType(XMLType.SOAP_ARRAY); 206 207 String [] domains = (String [])call.invoke(new Object []{delegate}); 208 return domains; 209 } 210 211 public String getDefaultDomain(Subject delegate) throws IOException 212 { 213 Call call = createCall(); 214 215 call.setOperationName(new QName (SOAPConstants.NAMESPACE_URI, "getDefaultDomain")); 216 call.addParameter("delegate", qSubject, ParameterMode.IN); 217 call.setReturnType(XMLType.XSD_STRING); 218 219 String domain = (String )call.invoke(new Object []{delegate}); 220 return domain; 221 } 222 223 public ObjectInstance createMBean(String className, ObjectName objectName, Object args, String [] parameters, Subject delegate) throws ReflectionException , InstanceAlreadyExistsException , MBeanRegistrationException , MBeanException , NotCompliantMBeanException , IOException 224 { 225 Call call = createCall(); 226 227 call.setOperationName(new QName (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 instance = (ObjectInstance )call.invoke(new Object []{className, objectName, args, parameters, delegate}); 237 return instance; 238 } 239 240 public ObjectInstance createMBean(String className, ObjectName objectName, ObjectName loaderName, Object args, String [] parameters, Subject delegate) throws ReflectionException , InstanceAlreadyExistsException , MBeanRegistrationException , MBeanException , NotCompliantMBeanException , InstanceNotFoundException , IOException 241 { 242 Call call = createCall(); 243 244 call.setOperationName(new QName (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 instance = (ObjectInstance )call.invoke(new Object []{className, objectName, loaderName, args, parameters, delegate}); 255 return instance; 256 } 257 258 public void unregisterMBean(ObjectName objectName, Subject delegate) throws InstanceNotFoundException , MBeanRegistrationException , IOException 259 { 260 Call call = createCall(); 261 262 call.setOperationName(new QName (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 []{objectName, delegate}); 268 } 269 270 public Object getAttribute(ObjectName objectName, String attribute, Subject delegate) throws MBeanException , AttributeNotFoundException , InstanceNotFoundException , ReflectionException , IOException 271 { 272 Call call = createCall(); 273 274 call.setOperationName(new QName (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 result = call.invoke(new Object []{objectName, attribute, delegate}); 281 return result; 282 } 283 284 public void setAttribute(ObjectName objectName, Object attribute, Subject delegate) throws InstanceNotFoundException , AttributeNotFoundException , InvalidAttributeValueException , MBeanException , ReflectionException , IOException 285 { 286 Call call = createCall(); 287 288 call.setOperationName(new QName (SOAPConstants.NAMESPACE_URI, "setAttribute")); 289 290 call.addParameter("objectName", qObjectName, ParameterMode.IN); 291 call.addParameter("attribute", new QName (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 []{objectName, attribute, delegate}); 296 } 297 298 public AttributeList getAttributes(ObjectName objectName, String [] attributes, Subject delegate) throws InstanceNotFoundException , ReflectionException , IOException 299 { 300 Call call = createCall(); 301 302 call.setOperationName(new QName (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 (SOAPConstants.NAMESPACE_URI, "AttributeList")); 307 308 AttributeList list = (AttributeList )call.invoke(new Object []{objectName, attributes, delegate}); 309 return list; 310 } 311 312 public AttributeList setAttributes(ObjectName objectName, Object attributes, Subject delegate) throws InstanceNotFoundException , ReflectionException , IOException 313 { 314 Call call = createCall(); 315 316 call.setOperationName(new QName (SOAPConstants.NAMESPACE_URI, "setAttributes")); 317 QName qAttributeList = new QName (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 list = (AttributeList )call.invoke(new Object []{objectName, attributes, delegate}); 324 return list; 325 } 326 327 public Object invoke(ObjectName objectName, String methodName, Object args, String [] parameters, Subject delegate) throws InstanceNotFoundException , MBeanException , ReflectionException , IOException 328 { 329 Call call = createCall(); 330 331 call.setOperationName(new QName (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 object = call.invoke(new Object []{objectName, methodName, args, parameters, delegate}); 340 return object; 341 } 342 343 public Integer getMBeanCount(Subject delegate) throws IOException 344 { 345 Call call = createCall(); 346 347 call.setOperationName(new QName (SOAPConstants.NAMESPACE_URI, "getMBeanCount")); 348 call.addParameter("delegate", qSubject, ParameterMode.IN); 349 call.setReturnType(XMLType.XSD_INT); 350 351 Integer count = (Integer )call.invoke(new Object []{delegate}); 352 return count; 353 } 354 355 public boolean isRegistered(ObjectName objectName, Subject delegate) throws IOException 356 { 357 Call call = createCall(); 358 359 call.setOperationName(new QName (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 registered = (Boolean )call.invoke(new Object []{objectName, delegate}); 366 return registered.booleanValue(); 367 } 368 369 public ObjectInstance getObjectInstance(ObjectName objectName, Subject delegate) throws InstanceNotFoundException , IOException 370 { 371 Call call = createCall(); 372 373 call.setOperationName(new QName (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 instance = (ObjectInstance )call.invoke(new Object []{objectName, delegate}); 379 return instance; 380 } 381 382 public Set queryMBeans(ObjectName patternName, Object filter, Subject delegate) throws IOException 383 { 384 Call call = createCall(); 385 386 call.setOperationName(new QName (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 (SOAPConstants.NAMESPACE_URI, "Set")); 391 392 Set set = (Set )call.invoke(new Object []{patternName, filter, delegate}); 393 return set; 394 } 395 396 public Set queryNames(ObjectName patternName, Object filter, Subject delegate) throws IOException 397 { 398 Call call = createCall(); 399 400 call.setOperationName(new QName (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 (SOAPConstants.NAMESPACE_URI, "Set")); 405 406 Set set = (Set )call.invoke(new Object []{patternName, filter, delegate}); 407 return set; 408 } 409 410 private Call createCall() throws IOException 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 x) 425 { 426 throw new IOException (x.toString()); 427 } 428 } 429 } 430 | Popular Tags |