1 8 package test.mx4j.tools.adaptor.http; 9 10 import java.io.IOException ; 11 import java.io.InputStreamReader ; 12 import java.io.Reader ; 13 import java.io.StringReader ; 14 import java.net.MalformedURLException ; 15 import java.net.URL ; 16 import java.net.URLConnection ; 17 import java.util.ArrayList ; 18 import java.util.HashMap ; 19 import java.util.List ; 20 import java.util.Map ; 21 import javax.management.Attribute ; 22 import javax.management.MBeanNotificationInfo ; 23 import javax.management.MBeanServer ; 24 import javax.management.MBeanServerFactory ; 25 import javax.management.NotificationBroadcasterSupport ; 26 import javax.management.ObjectName ; 27 28 import org.custommonkey.xmlunit.XMLTestCase; 29 import org.custommonkey.xmlunit.XMLUnit; 30 31 36 public class HttpAdaptorXMLTest extends XMLTestCase 37 { 38 protected MBeanServer server; 39 protected ObjectName httpName, test1Name, test2Name, test3Name; 40 protected String host = "localhost"; 41 protected int port = 8080; 42 TestClass test1 = new TestClass("t1"); 43 TestClass test2 = new TestClass("t1"); 44 TestClass2 test3 = new TestClass2("t3"); 45 46 49 public HttpAdaptorXMLTest(String name) 50 { 51 super(name); 52 } 53 54 public static interface TestClassMBean 55 { 56 public String getStr(); 57 58 public Double getDouble(); 59 60 public boolean isTrue(); 61 62 public void setStr(String str); 63 64 public Boolean aMethod(String string); 65 66 public void anotherMethod(String string, int test); 67 } 68 69 public static class TestClass extends NotificationBroadcasterSupport implements TestClassMBean 70 { 71 private String str; 72 73 public TestClass(String str) 74 { 75 this.str = str; 76 } 77 78 public String getStr() 79 { 80 return str; 81 } 82 83 public void setStr(String str) 84 { 85 this.str = str; 86 } 87 88 public Double getDouble() 89 { 90 return new Double (0); 91 } 92 93 public boolean isTrue() 94 { 95 return true; 96 } 97 98 public Boolean aMethod(String string) 99 { 100 return new Boolean (string.equals("true")); 101 } 102 103 public void anotherMethod(String string, int test) 104 { 105 this.str = string; 106 } 107 108 public MBeanNotificationInfo [] getNotificationInfo() 109 { 110 MBeanNotificationInfo [] notifications = new MBeanNotificationInfo [1]; 111 notifications[0] = new MBeanNotificationInfo (new String []{"test1" 112 , "test2"}, "name", "test"); 113 return notifications; 114 } 115 116 } 117 118 public static interface TestClass2MBean 119 { 120 public String getStr(); 121 122 public String [] getStrArray(); 123 124 public void setStrArray(String [] str); 125 126 public Double getDouble(); 127 128 public void setDouble(Double doubleValue); 129 130 public void setStr(String str); 131 132 public Map getMap(); 133 134 public List getList(); 135 } 136 137 public static class TestClass2 extends NotificationBroadcasterSupport implements TestClass2MBean 138 { 139 private String str; 140 private String [] strArray = new String []{"a", "b", "c"}; 141 private Map map = new HashMap (); 142 private List list = new ArrayList (); 143 private Double doubleValue = new Double (0); 144 145 public TestClass2(String str) 146 { 147 this.str = str; 148 list.add("1"); 149 list.add("2"); 150 map.put("1", new Integer (1)); 151 map.put("2", new Integer (2)); 152 } 153 154 public String getStr() 155 { 156 return str; 157 } 158 159 public String [] getStrArray() 160 { 161 return strArray; 162 } 163 164 public void setStrArray(String [] str) 165 { 166 this.strArray = strArray; 167 } 168 169 public void setStr(String str) 170 { 171 this.str = str; 172 } 173 174 public void setDouble(Double doubleValue) 175 { 176 this.doubleValue = doubleValue; 177 } 178 179 public Double getDouble() 180 { 181 return doubleValue; 182 } 183 184 public Map getMap() 185 { 186 return map; 187 } 188 189 public List getList() 190 { 191 return list; 192 } 193 } 194 195 196 public void setUp() 197 { 198 try 199 { 200 server = MBeanServerFactory.createMBeanServer("Http"); 201 httpName = new ObjectName ("Http:name=HttpAdaptor"); 202 test1Name = new ObjectName ("Test:name=test1"); 203 test2Name = new ObjectName ("Test:name=test2"); 204 test3Name = new ObjectName ("Test:name=test3"); 205 server.createMBean("mx4j.tools.adaptor.http.HttpAdaptor", httpName, null); 206 String hostProperty = System.getProperty("test.http.host"); 208 if (hostProperty != null) 209 { 210 host = hostProperty; 211 } 212 String portProperty = System.getProperty("test.http.port"); 213 if (portProperty != null) 214 { 215 port = Integer.parseInt(portProperty); 216 } 217 server.setAttribute(httpName, new Attribute ("Host", host)); 218 server.setAttribute(httpName, new Attribute ("Port", new Integer (port))); 219 server.registerMBean(test1, test1Name); 221 server.registerMBean(test2, test2Name); 222 server.registerMBean(test3, test3Name); 223 server.invoke(httpName, "start", null, null); 224 XMLUnit.setIgnoreWhitespace(true); 225 XMLUnit.setControlParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"); 226 XMLUnit.setTestParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"); 227 } 228 catch (Exception e) 229 { 230 e.printStackTrace(); 231 } 232 233 } 234 235 public void tearDown() 236 { 237 try 238 { 239 while (((Boolean )server.getAttribute(httpName, "Active")).booleanValue()) 240 { 241 try 242 { 243 server.invoke(httpName, "stop", null, null); 244 synchronized (this) 245 { 246 wait(1000); 247 } 248 } 249 catch (Exception e) 250 { 251 continue; 252 } 253 } 254 server.unregisterMBean(httpName); 255 } 256 catch (Exception e) 257 { 258 e.printStackTrace(); 259 } 260 } 261 262 265 public void testServer() throws Exception 266 { 267 Reader stream = getReader(host, port, "server"); 269 StringBuffer result = new StringBuffer (); 270 int i = 0; 271 while ((i = stream.read()) >= 0) 272 { 273 result.append((char)i); 274 } 275 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 276 "<Server>" + 277 "<MBean classname=\"mx4j.tools.adaptor.http.HttpAdaptor\" description=\"HttpAdaptor MBean\" objectname=\"Http:name=HttpAdaptor\"/>" + 278 "<MBean classname=\"mx4j.server.interceptor.ContextClassLoaderMBeanServerInterceptor\" description=\"MBeanServer interceptor\" objectname=\"JMImplementation:interceptor=contextclassloader\"/>" + 279 "<MBean classname=\"mx4j.server.interceptor.InvokerMBeanServerInterceptor\" description=\"The interceptor that invokes on the MBean instance\" objectname=\"JMImplementation:interceptor=invoker\"/>" + 280 "<MBean classname=\"mx4j.server.interceptor.NotificationListenerMBeanServerInterceptor\" description=\"MBeanServer interceptor\" objectname=\"JMImplementation:interceptor=notificationwrapper\"/>" + 281 "<MBean classname=\"mx4j.server.interceptor.SecurityMBeanServerInterceptor\" description=\"The interceptor that performs security checks for MBeanServer to MBean calls\" objectname=\"JMImplementation:interceptor=security\"/>" + 282 "<MBean classname=\"mx4j.server.MX4JMBeanServerDelegate\" description=\"Manageable Bean\" objectname=\"JMImplementation:type=MBeanServerDelegate\"/>" + 283 "<MBean classname=\"mx4j.server.interceptor.MBeanServerInterceptorConfigurator\" description=\"Configurator for MBeanServer to MBean interceptors\" objectname=\"JMImplementation:type=MBeanServerInterceptorConfigurator\"/>" + 284 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\"/>" + 285 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test2\"/>" + 286 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\"/>" + 287 "</Server>"; 288 assertXMLEqual(controlMBean, result.toString()); 289 stream.close(); 290 } 291 292 295 public void testServerAndFilters() throws Exception 296 { 297 Reader stream = getReader(host, port, "server?instanceof=test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass"); 299 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 300 "<Server>" + 301 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\"/>" + 302 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test2\"/>" + 303 "</Server>"; 304 assertXMLEqual(new StringReader (controlMBean), stream); 305 stream.close(); 306 } 307 308 public void testServerByDomain() throws Exception 309 { 310 Reader stream = getReader(host, port, "serverbydomain"); 312 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 313 "<Server>" + 314 "<Domain name=\"Http\">" + 315 "<MBean classname=\"mx4j.tools.adaptor.http.HttpAdaptor\" description=\"HttpAdaptor MBean\" objectname=\"Http:name=HttpAdaptor\"/>" + 316 "</Domain>" + 317 "<Domain name=\"JMImplementation\">" + 318 "<MBean classname=\"mx4j.server.interceptor.ContextClassLoaderMBeanServerInterceptor\" description=\"MBeanServer interceptor\" objectname=\"JMImplementation:interceptor=contextclassloader\"/>" + 319 "<MBean classname=\"mx4j.server.interceptor.InvokerMBeanServerInterceptor\" description=\"The interceptor that invokes on the MBean instance\" objectname=\"JMImplementation:interceptor=invoker\"/>" + 320 "<MBean classname=\"mx4j.server.interceptor.NotificationListenerMBeanServerInterceptor\" description=\"MBeanServer interceptor\" objectname=\"JMImplementation:interceptor=notificationwrapper\"/>" + 321 "<MBean classname=\"mx4j.server.interceptor.SecurityMBeanServerInterceptor\" description=\"The interceptor that performs security checks for MBeanServer to MBean calls\" objectname=\"JMImplementation:interceptor=security\"/>" + 322 "<MBean classname=\"mx4j.server.MX4JMBeanServerDelegate\" description=\"Manageable Bean\" objectname=\"JMImplementation:type=MBeanServerDelegate\"/>" + 323 "<MBean classname=\"mx4j.server.interceptor.MBeanServerInterceptorConfigurator\" description=\"Configurator for MBeanServer to MBean interceptors\" objectname=\"JMImplementation:type=MBeanServerInterceptorConfigurator\"/>" + 324 "</Domain>" + 325 "<Domain name=\"Test\">" + 326 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\"/>" + 327 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test2\"/>" + 328 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\"/>" + 329 "</Domain>" + 330 "</Server>"; 331 assertXMLEqual(new StringReader (controlMBean), stream); 332 } 333 334 public void testServerByDomainAndFilters() throws Exception 335 { 336 Reader stream = getReader(host, port, "serverbydomain?instanceof=test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass"); 338 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 339 "<Server>" + 340 "<Domain name=\"Http\"/>" + 341 "<Domain name=\"JMImplementation\"/>" + 342 "<Domain name=\"Test\">" + 343 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\"/>" + 344 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test2\"/>" + 345 "</Domain>" + 346 "</Server>"; 347 assertXMLEqual(new StringReader (controlMBean), stream); 348 349 stream = getReader(host, port, "serverbydomain?querynames=*:*"); 350 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 351 "<Server>" + 352 "<Domain name=\"Http\">" + 353 "<MBean classname=\"mx4j.tools.adaptor.http.HttpAdaptor\" description=\"HttpAdaptor MBean\" objectname=\"Http:name=HttpAdaptor\"/>" + 354 "</Domain>" + 355 "<Domain name=\"JMImplementation\">" + 356 "<MBean classname=\"mx4j.server.interceptor.ContextClassLoaderMBeanServerInterceptor\" description=\"MBeanServer interceptor\" objectname=\"JMImplementation:interceptor=contextclassloader\"/>" + 357 "<MBean classname=\"mx4j.server.interceptor.InvokerMBeanServerInterceptor\" description=\"The interceptor that invokes on the MBean instance\" objectname=\"JMImplementation:interceptor=invoker\"/>" + 358 "<MBean classname=\"mx4j.server.interceptor.NotificationListenerMBeanServerInterceptor\" description=\"MBeanServer interceptor\" objectname=\"JMImplementation:interceptor=notificationwrapper\"/>" + 359 "<MBean classname=\"mx4j.server.interceptor.SecurityMBeanServerInterceptor\" description=\"The interceptor that performs security checks for MBeanServer to MBean calls\" objectname=\"JMImplementation:interceptor=security\"/>" + 360 "<MBean classname=\"mx4j.server.MX4JMBeanServerDelegate\" description=\"Manageable Bean\" objectname=\"JMImplementation:type=MBeanServerDelegate\"/>" + 361 "<MBean classname=\"mx4j.server.interceptor.MBeanServerInterceptorConfigurator\" description=\"Configurator for MBeanServer to MBean interceptors\" objectname=\"JMImplementation:type=MBeanServerInterceptorConfigurator\"/>" + 362 "</Domain>" + 363 "<Domain name=\"Test\">" + 364 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\"/>" + 365 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test2\"/>" + 366 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\"/>" + 367 "</Domain>" + 368 "</Server>"; 369 370 stream = getReader(host, port, "serverbydomain?querynames=Test:*"); 371 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 372 "<Server>" + 373 "<Domain name=\"Test\">" + 374 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\"/>" + 375 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test2\"/>" + 376 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\"/>" + 377 "</Domain>" + 378 "</Server>"; 379 assertXMLEqual(new StringReader (controlMBean), stream); 380 381 stream = getReader(host, port, "serverbydomain?querynames=something"); 382 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 383 "<Server>" + 384 "<Exception errorMsg=\"\"/>" + 385 "</Server>"; 386 } 387 388 391 public void testDelete() throws Exception 392 { 393 try 394 { 395 Reader stream = getReader(host, port, "delete?objectname=Test:name=test1"); 397 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 398 "<MBeanOperation>" + 399 "<Operation objectname=\"Test:name=test1\" operation=\"delete\" result=\"success\"/>" + 400 "</MBeanOperation>"; 401 assertXMLEqual(new StringReader (controlMBean), stream); 402 assertTrue(!server.isRegistered(test1Name)); 403 stream.close(); 404 stream = getReader(host, port, "delete?objectname=Test:name=test5"); 405 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 406 "<MBeanOperation>" + 407 "<Operation errorMsg=\"MBean Test:name=test5 not registered\" objectname=\"Test:name=test5\" operation=\"delete\" result=\"error\"/>" + 408 "</MBeanOperation>"; 409 assertXMLEqual(new StringReader (controlMBean), stream); 410 stream.close(); 411 } 412 finally 413 { 414 server.registerMBean(test1, test1Name); 415 } 416 } 417 418 421 public void testInvoke() throws Exception 422 { 423 Reader stream = getReader(host, port, "invoke?objectname=Test:name=test1&operation=aMethod&type0=java.lang.String&value0=true"); 424 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 425 "<MBeanOperation>" + 426 "<Operation objectname=\"Test:name=test1\" operation=\"invoke\" result=\"success\" return=\"true\" returnclass=\"java.lang.Boolean\"/>" + 427 "</MBeanOperation>"; 428 assertXMLEqual(new StringReader (controlMBean), stream); 429 stream.close(); 430 stream = getReader(host, port, "invoke?objectname=Test:name=test1&operation=aMethod&type0=java.lang.String&value0=test"); 431 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 432 "<MBeanOperation>" + 433 "<Operation objectname=\"Test:name=test1\" operation=\"invoke\" result=\"success\" return=\"false\" returnclass=\"java.lang.Boolean\"/>" + 434 "</MBeanOperation>"; 435 assertXMLEqual(new StringReader (controlMBean), stream); 436 stream.close(); 437 } 438 439 442 public void testSetAttribute() throws Exception 443 { 444 try 445 { 446 Reader stream = getReader(host, port, "setattribute?objectname=Test:name=test1&attribute=Str&value=t2"); 448 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 449 "<MBeanOperation>" + 450 "<Operation objectname=\"Test:name=test1\" operation=\"setattribute\" result=\"success\"/>" + 451 "</MBeanOperation>"; 452 assertXMLEqual(new StringReader (controlMBean), stream); 453 assertEquals("t2", server.getAttribute(test1Name, "Str")); 454 server.setAttribute(test1Name, new Attribute ("Str", "t1")); 455 stream.close(); 456 stream = getReader(host, port, "setattribute?attribute=Str&value=t2"); 458 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 459 "<MBeanOperation>" + 460 "<Operation errorMsg=\"Incorrect parameters in the request\" operation=\"setattribute\" result=\"error\"/>" + 461 "</MBeanOperation>"; 462 assertXMLEqual(new StringReader (controlMBean), stream); 463 assertEquals("t1", server.getAttribute(test1Name, "Str")); 464 stream = getReader(host, port, "setattribute?objectname=3&attribute=Str&value=t2"); 466 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 467 "<MBeanOperation>" + 468 "<Operation errorMsg=\"Malformed object name\" objectname=\"3\" operation=\"setattribute\" result=\"error\"/>" + 469 "</MBeanOperation>"; 470 assertXMLEqual(new StringReader (controlMBean), stream); 471 assertEquals("t1", server.getAttribute(test1Name, "Str")); 472 stream.close(); 473 stream = getReader(host, port, "setattribute?objectname=Test:name=test1&attribute=Number&value=t2"); 474 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 475 "<MBeanOperation>" + 476 "<Operation errorMsg=\"Attribute Number not found\" objectname=\"Test:name=test1\" operation=\"setattribute\" result=\"error\"/>" + 477 "</MBeanOperation>"; 478 assertXMLEqual(new StringReader (controlMBean), stream); 479 assertEquals("t1", server.getAttribute(test1Name, "Str")); 480 stream.close(); 481 } 482 finally 483 { 484 server.setAttribute(test1Name, new Attribute ("Str", "t1")); 485 } 486 } 487 488 491 public void testSetAttributes() throws Exception 492 { 493 try 494 { 495 Reader stream = getReader(host, port, "setattributes?objectname=Test:name=test3&value_Str=t2&set_Str=Set"); 497 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 498 "<MBeanOperation>" + 499 "<Operation objectname=\"Test:name=test3\" operation=\"setattributes\">" + 500 "<Attribute attribute=\"Str\" value=\"t2\" result=\"success\"/>" + 501 "</Operation>" + 502 "</MBeanOperation>"; 503 assertXMLEqual(new StringReader (controlMBean), stream); 504 assertEquals("t2", server.getAttribute(test3Name, "Str")); 505 server.setAttribute(test3Name, new Attribute ("Str", "t1")); 506 stream.close(); 507 stream = getReader(host, port, "setattributes?objectname=Test:name=test3&value_Str=t2&value_Double=3&setall=Set"); 509 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 510 "<MBeanOperation>" + 511 "<Operation objectname=\"Test:name=test3\" operation=\"setattributes\">" + 512 "<Attribute attribute=\"Double\" value=\"3\" result=\"success\"/>" + 513 "<Attribute attribute=\"Str\" value=\"t2\" result=\"success\"/>" + 514 "</Operation>" + 515 "</MBeanOperation>"; 516 assertXMLEqual(new StringReader (controlMBean), stream); 517 assertEquals(new Double (3), server.getAttribute(test3Name, "Double")); 518 stream.close(); 519 stream = getReader(host, port, "setattributes?objectname=Test:name=test3&value_Str=t3&value_Double=4&set_Str=Set&set_Double=Set"); 521 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 522 "<MBeanOperation>" + 523 "<Operation objectname=\"Test:name=test3\" operation=\"setattributes\">" + 524 "<Attribute attribute=\"Double\" value=\"4\" result=\"success\"/>" + 525 "<Attribute attribute=\"Str\" value=\"t3\" result=\"success\"/>" + 526 "</Operation>" + 527 "</MBeanOperation>"; 528 assertXMLEqual(new StringReader (controlMBean), stream); 529 assertEquals(new Double (4), server.getAttribute(test3Name, "Double")); 530 assertEquals("t3", server.getAttribute(test3Name, "Str")); 531 stream = getReader(host, port, "setattributes?objectname=Test:name=test3&value_Str=t3&value_Double=c4&set_Str=Set&set_Double=Set"); 533 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 534 "<MBeanOperation>" + 535 "<Operation objectname=\"Test:name=test3\" operation=\"setattributes\">" + 536 "<Attribute attribute=\"Double\" errorMsg=\"Value: c4 could not be converted to java.lang.Double\" result=\"error\"/>" + 537 "<Attribute attribute=\"Str\" value=\"t3\" result=\"success\"/>" + 538 "</Operation>" + 539 "</MBeanOperation>"; 540 assertXMLEqual(new StringReader (controlMBean), stream); 541 assertEquals(new Double (4), server.getAttribute(test3Name, "Double")); 542 assertEquals("t3", server.getAttribute(test3Name, "Str")); 543 } 544 finally 545 { 546 server.setAttribute(test3Name, new Attribute ("Str", "t1")); 547 server.setAttribute(test3Name, new Attribute ("Double", new Double (0))); 548 } 549 } 550 551 public void testCreate() throws Exception 552 { 553 ObjectName name = new ObjectName ("Http:name=create"); 554 try 555 { 556 Reader stream = getReader(host, port, "create?class=mx4j.tools.adaptor.http.HttpAdaptor&objectname=" + name.toString()); 558 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 559 "<MBeanOperation>" + 560 "<Operation objectname=\"Http:name=create\" name=\"create\" result=\"success\"/>" + 561 "</MBeanOperation>"; 562 assertXMLEqual(new StringReader (controlMBean), stream); 563 } 564 finally 565 { 566 server.unregisterMBean(name); 567 } 568 } 569 570 public void testEmpty() throws Exception 571 { 572 Reader stream = getReader(host, port, "empty"); 574 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><empty/>\n"; 575 assertXMLEqual(new StringReader (controlMBean), stream); 576 } 577 578 581 public void testSingleMBean() throws Exception 582 { 583 Reader stream = getReader(host, port, "mbean?objectname=Test:name=test1"); 585 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 586 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\">" + 587 "<Attribute availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Double\" strinit=\"true\" type=\"java.lang.Double\" value=\"0.0\"/>" + 588 "<Attribute availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Str\" strinit=\"true\" type=\"java.lang.String\" value=\"t1\"/>" + 589 "<Attribute availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"True\" strinit=\"true\" type=\"boolean\" value=\"true\"/>" + 590 "<Constructor description=\"Constructor exposed for management\" name=\"HttpAdaptorXMLTest$TestClass\">" + 591 "<Parameter description=\"Constructor's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"/>" + 592 "</Constructor>" + 593 "<Operation description=\"Operation exposed for management\" impact=\"unknown\" name=\"aMethod\" return=\"java.lang.Boolean\">" + 594 "<Parameter description=\"Operation's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\">" + 595 "</Parameter>" + 596 "</Operation>" + 597 "<Operation description=\"Operation exposed for management\" impact=\"unknown\" name=\"anotherMethod\" return=\"void\">" + 598 "<Parameter description=\"Operation's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"></Parameter>" + 599 "<Parameter description=\"Operation's parameter n. 2\" id=\"1\" name=\"param2\" strinit=\"true\" type=\"int\"></Parameter>" + 600 "</Operation>" + 601 "<Notification description=\"test\" name=\"name\">" + 602 "<Type name=\"test1\"></Type>" + 603 "<Type name=\"test2\"></Type>" + 604 "</Notification>" + 605 "</MBean>"; 606 assertXMLEqual(new StringReader (controlMBean), stream); 607 608 stream = getReader(host, port, "mbean?objectname=Test:name=test3"); 610 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 611 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\">" + 612 "<Attribute availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Double\" strinit=\"true\" type=\"java.lang.Double\" value=\"0.0\"/>" + 613 "<Attribute aggregation=\"collection\" availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"List\" strinit=\"false\" type=\"java.util.List\" value=\"[1, 2]\"/>" + 614 "<Attribute aggregation=\"map\" availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Map\" strinit=\"false\" type=\"java.util.Map\" value=\"{2=2, 1=1}\"/>" + 615 "<Attribute availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Str\" strinit=\"true\" type=\"java.lang.String\" value=\"t3\"/>" + 616 "<Attribute aggregation=\"array\" availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"StrArray\" strinit=\"false\" type=\"[Ljava.lang.String;\" value=\"" + test3.getStrArray().toString() + "\"/>" + 617 "<Constructor description=\"Constructor exposed for management\" name=\"HttpAdaptorXMLTest$TestClass2\">" + 618 "<Parameter description=\"Constructor's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"/>" + 619 "</Constructor>" + 620 "</MBean>"; 621 assertXMLEqual(new StringReader (controlMBean), stream); 622 623 Object theMap = server.getAttribute(new ObjectName ("Test:name=test3"), "StrArray"); 625 try 626 { 627 server.setAttribute(new ObjectName ("Test:name=test3"), new Attribute ("StrArray", null)); 628 stream = getReader(host, port, "getattribute?objectname=Test:name=test3&attribute=StrArray&format=map"); 629 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 630 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\">" + 631 "<Attribute aggregation=\"array\" availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"true\" name=\"StrArray\" strinit=\"false\" type=\"[Ljava.lang.String;\" value=\"null\"/>" + 632 "<Attribute availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Double\" strinit=\"true\" type=\"java.lang.Double\" value=\"0.0\"/>" + 633 "<Attribute aggregation=\"collection\" availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"List\" strinit=\"false\" type=\"java.util.List\" value=\"[1, 2]\"/>" + 634 "<Attribute aggregation=\"map\" availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Map\" strinit=\"false\" type=\"java.util.Map\" value=\"{2=2, 1=1}\"/>" + 635 "<Attribute availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Str\" strinit=\"true\" type=\"java.lang.String\" value=\"t3\"/>" + 636 "<Constructor description=\"Constructor exposed for management\" name=\"HttpAdaptorXMLTest$TestClass2\">" + 637 "<Parameter description=\"Constructor's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"/>" + 638 "</Constructor>" + 639 "</MBean>"; 640 } 641 finally 642 { 643 server.setAttribute(new ObjectName ("Test:name=test3"), new Attribute ("StrArray", theMap)); 644 } 645 } 646 647 public void testSingleMBeanAndFilters() throws Exception 648 { 649 Reader stream = getReader(host, port, "mbean?objectname=Test:name=test1&attributes=false"); 651 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 652 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\">" + 653 "<Constructor description=\"Constructor exposed for management\" name=\"HttpAdaptorXMLTest$TestClass\">" + 654 "<Parameter description=\"Constructor's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"/>" + 655 "</Constructor>" + 656 "<Operation description=\"Operation exposed for management\" impact=\"unknown\" name=\"aMethod\" return=\"java.lang.Boolean\">" + 657 "<Parameter description=\"Operation's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\">" + 658 "</Parameter>" + 659 "</Operation>" + 660 "<Operation description=\"Operation exposed for management\" impact=\"unknown\" name=\"anotherMethod\" return=\"void\">" + 661 "<Parameter description=\"Operation's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"></Parameter>" + 662 "<Parameter description=\"Operation's parameter n. 2\" id=\"1\" name=\"param2\" strinit=\"true\" type=\"int\"></Parameter>" + 663 "</Operation>" + 664 "<Notification description=\"test\" name=\"name\">" + 665 "<Type name=\"test1\"></Type>" + 666 "<Type name=\"test2\"></Type>" + 667 "</Notification>" + 668 "</MBean>"; 669 assertXMLEqual(new StringReader (controlMBean), stream); 670 stream.close(); 671 stream = getReader(host, port, "mbean?objectname=Test:name=test1&constructors=false"); 672 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 673 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\">" + 674 "<Attribute availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Double\" strinit=\"true\" type=\"java.lang.Double\" value=\"0.0\"/>" + 675 "<Attribute availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Str\" strinit=\"true\" type=\"java.lang.String\" value=\"t1\"/>" + 676 "<Attribute availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"True\" strinit=\"true\" type=\"boolean\" value=\"true\"/>" + 677 "<Operation description=\"Operation exposed for management\" impact=\"unknown\" name=\"aMethod\" return=\"java.lang.Boolean\">" + 678 "<Parameter description=\"Operation's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\">" + 679 "</Parameter>" + 680 "</Operation>" + 681 "<Operation description=\"Operation exposed for management\" impact=\"unknown\" name=\"anotherMethod\" return=\"void\">" + 682 "<Parameter description=\"Operation's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"></Parameter>" + 683 "<Parameter description=\"Operation's parameter n. 2\" id=\"1\" name=\"param2\" strinit=\"true\" type=\"int\"></Parameter>" + 684 "</Operation>" + 685 "<Notification description=\"test\" name=\"name\">" + 686 "<Type name=\"test1\"></Type>" + 687 "<Type name=\"test2\"></Type>" + 688 "</Notification>" + 689 "</MBean>"; 690 assertXMLEqual(new StringReader (controlMBean), stream); 691 stream.close(); 692 stream = getReader(host, port, "mbean?objectname=Test:name=test1&operations=false"); 693 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 694 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\">" + 695 "<Attribute availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Double\" strinit=\"true\" type=\"java.lang.Double\" value=\"0.0\"/>" + 696 "<Attribute availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Str\" strinit=\"true\" type=\"java.lang.String\" value=\"t1\"/>" + 697 "<Attribute availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"True\" strinit=\"true\" type=\"boolean\" value=\"true\"/>" + 698 "<Constructor description=\"Constructor exposed for management\" name=\"HttpAdaptorXMLTest$TestClass\">" + 699 "<Parameter description=\"Constructor's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"/>" + 700 "</Constructor>" + 701 "<Notification description=\"test\" name=\"name\">" + 702 "<Type name=\"test1\"></Type>" + 703 "<Type name=\"test2\"></Type>" + 704 "</Notification>" + 705 "</MBean>"; 706 assertXMLEqual(new StringReader (controlMBean), stream); 707 stream.close(); 708 stream = getReader(host, port, "mbean?objectname=Test:name=test1¬ifications=false"); 709 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 710 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\">" + 711 "<Attribute availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Double\" strinit=\"true\" type=\"java.lang.Double\" value=\"0.0\"/>" + 712 "<Attribute availability=\"RW\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"Str\" strinit=\"true\" type=\"java.lang.String\" value=\"t1\"/>" + 713 "<Attribute availability=\"RO\" description=\"Attribute exposed for management\" isnull=\"false\" name=\"True\" strinit=\"true\" type=\"boolean\" value=\"true\"/>" + 714 "<Constructor description=\"Constructor exposed for management\" name=\"HttpAdaptorXMLTest$TestClass\">" + 715 "<Parameter description=\"Constructor's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"/>" + 716 "</Constructor>" + 717 "<Operation description=\"Operation exposed for management\" impact=\"unknown\" name=\"aMethod\" return=\"java.lang.Boolean\">" + 718 "<Parameter description=\"Operation's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\">" + 719 "</Parameter>" + 720 "</Operation>" + 721 "<Operation description=\"Operation exposed for management\" impact=\"unknown\" name=\"anotherMethod\" return=\"void\">" + 722 "<Parameter description=\"Operation's parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"></Parameter>" + 723 "<Parameter description=\"Operation's parameter n. 2\" id=\"1\" name=\"param2\" strinit=\"true\" type=\"int\"></Parameter>" + 724 "</Operation>" + 725 "</MBean>"; 726 assertXMLEqual(new StringReader (controlMBean), stream); 727 stream.close(); 728 stream = getReader(host, port, "mbean?objectname=Test:name=test1¬ifications=false&attributes=false&operations=false&constructors=false"); 729 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 730 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\">" + 731 "</MBean>"; 732 assertXMLEqual(new StringReader (controlMBean), stream); 733 } 734 735 public void testConstructors() throws Exception 736 { 737 Reader stream = getReader(host, port, "constructors?classname=mx4j.tools.adaptor.http.HttpAdaptor"); 739 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 740 "<Class classname=\"mx4j.tools.adaptor.http.HttpAdaptor\">" + 741 "<Constructor name=\"mx4j.tools.adaptor.http.HttpAdaptor\"/>" + 742 "<Constructor name=\"mx4j.tools.adaptor.http.HttpAdaptor\">" + 743 "<Parameter id=\"0\" strinit=\"true\" type=\"int\"/>" + 744 "</Constructor>" + 745 "<Constructor name=\"mx4j.tools.adaptor.http.HttpAdaptor\">" + 746 "<Parameter id=\"0\" strinit=\"true\" type=\"java.lang.String\"/>" + 747 "</Constructor>" + 748 "<Constructor name=\"mx4j.tools.adaptor.http.HttpAdaptor\">" + 749 "<Parameter id=\"0\" strinit=\"true\" type=\"int\"/>" + 750 "<Parameter id=\"1\" strinit=\"true\" type=\"java.lang.String\"/>" + 751 "</Constructor>" + 752 "</Class>"; 753 assertXMLEqual(new StringReader (controlMBean), stream); 754 755 stream = getReader(host, port, "constructors?classname=mx4j.Something"); 756 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 757 "<Exception classname=\"mx4j.Something\" errorMsg=\"class mx4j.Something not found\"/>"; 758 assertXMLEqual(new StringReader (controlMBean), stream); 759 } 760 761 764 public void testGetAttribute() throws Exception 765 { 766 Reader stream = getReader(host, port, "getattribute?objectname=Test:name=test1&attribute=Str"); 767 String controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 768 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass\" description=\"Manageable Bean\" objectname=\"Test:name=test1\">" + 769 "<Attribute classname=\"java.lang.String\" isnull=\"false\" name=\"Str\" value=\"t1\"/>" + 770 "</MBean>"; 771 assertXMLEqual(new StringReader (controlMBean), stream); 772 stream.close(); 773 stream = getReader(host, port, "getattribute?objectname=Test:name=test3&attribute=StrArray&format=array"); 774 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 775 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\">" + 776 "<Attribute classname=\"[Ljava.lang.String;\" isnull=\"false\" name=\"StrArray\">" + 777 "<Array componentclass=\"java.lang.String\" length=\"3\">" + 778 "<Element element=\"a\" isnull=\"false\" index=\"0\"/>" + 779 "<Element element=\"b\" isnull=\"false\" index=\"1\"/>" + 780 "<Element element=\"c\" isnull=\"false\" index=\"2\"/>" + 781 "</Array>" + 782 "</Attribute>" + 783 "</MBean>"; 784 assertXMLEqual(new StringReader (controlMBean), stream); 785 stream.close(); 786 stream = getReader(host, port, "getattribute?objectname=Test:name=test3&attribute=List&format=collection"); 787 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 788 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\">" + 789 "<Attribute classname=\"java.util.List\" isnull=\"false\" name=\"List\">" + 790 "<Collection length=\"2\">" + 791 "<Element element=\"1\" elementclass=\"java.lang.String\" index=\"0\"/>" + 792 "<Element element=\"2\" elementclass=\"java.lang.String\" index=\"1\"/>" + 793 "</Collection>" + 794 "</Attribute>" + 795 "</MBean>"; 796 assertXMLEqual(new StringReader (controlMBean), stream); 797 stream.close(); 798 stream = getReader(host, port, "getattribute?objectname=Test:name=test3&attribute=Map&format=map"); 799 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 800 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\">" + 801 "<Attribute classname=\"java.util.Map\" isnull=\"false\" name=\"Map\">" + 802 "<Map length=\"2\">" + 803 "<Element index=\"0\" key=\"2\" keyclass=\"java.lang.String\" element=\"2\" elementclass=\"java.lang.Integer\"/>" + 804 "<Element index=\"1\" key=\"1\" keyclass=\"java.lang.String\" element=\"1\" elementclass=\"java.lang.Integer\"/>" + 805 "</Map>" + 806 "</Attribute>" + 807 "</MBean>"; 808 assertXMLEqual(new StringReader (controlMBean), stream); 809 810 Object theArray = server.getAttribute(new ObjectName ("Test:name=test3"), "StrArray"); 812 try 813 { 814 server.setAttribute(new ObjectName ("Test:name=test3"), new Attribute ("StrArray", null)); 815 stream = getReader(host, port, "getattribute?objectname=Test:name=test3&attribute=StrArray&format=map"); 816 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 817 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\">" + 818 "<Attribute classname=\"[Ljava.lang.String;\" isnull=\"true\" name=\"StrArray\"/>" + 819 "</MBean>"; 820 } 821 finally 822 { 823 server.setAttribute(new ObjectName ("Test:name=test3"), new Attribute ("StrArray", theArray)); 824 } 825 826 String strArray[] = (String [])server.getAttribute(new ObjectName ("Test:name=test3"), "StrArray"); 828 String valueAt1 = strArray[1]; 829 strArray[1] = null; 830 try 831 { 832 server.setAttribute(new ObjectName ("Test:name=test3"), new Attribute ("StrArray", strArray)); 833 stream = getReader(host, port, "getattribute?objectname=Test:name=test3&attribute=StrArray&format=map"); 834 controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 835 "<MBean classname=\"test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass2\" description=\"Manageable Bean\" objectname=\"Test:name=test3\">" + 836 "<Attribute classname=\"[Ljava.lang.String;\" isnull=\"false\" name=\"StrArray\">" + 837 "<Array componentclass=\"java.lang.String\" length=\"3\">" + 838 "<Element element=\"a\" isnull=\"false\" index=\"0\"/>" + 839 "<Element element=\"null\" isnull=\"true\" index=\"1\"/>" + 840 "<Element element=\"c\" isnull=\"false\" index=\"2\"/>" + 841 "</Array>" + 842 "</Attribute>" + 843 "</MBean>"; 844 } 845 finally 846 { 847 strArray[1] = valueAt1; 848 server.setAttribute(new ObjectName ("Test:name=test3"), new Attribute ("StrArray", strArray)); 849 } 850 } 851 852 public Reader getReader(String host, int port, String path) throws IOException , MalformedURLException 853 { 854 URL url = new URL ("http://" + host + ":" + port + "/" + path); 855 URLConnection connection = url.openConnection(); 856 return new InputStreamReader (connection.getInputStream()); 857 } 858 } 859 860 | Popular Tags |