KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > mx4j > tools > adaptor > http > HttpAdaptorXMLTest


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 package test.mx4j.tools.adaptor.http;
9
10 import java.io.IOException JavaDoc;
11 import java.io.InputStreamReader JavaDoc;
12 import java.io.Reader JavaDoc;
13 import java.io.StringReader JavaDoc;
14 import java.net.MalformedURLException JavaDoc;
15 import java.net.URL JavaDoc;
16 import java.net.URLConnection JavaDoc;
17 import java.util.ArrayList JavaDoc;
18 import java.util.HashMap JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Map JavaDoc;
21 import javax.management.Attribute JavaDoc;
22 import javax.management.MBeanNotificationInfo JavaDoc;
23 import javax.management.MBeanServer JavaDoc;
24 import javax.management.MBeanServerFactory JavaDoc;
25 import javax.management.NotificationBroadcasterSupport JavaDoc;
26 import javax.management.ObjectName JavaDoc;
27
28 import org.custommonkey.xmlunit.XMLTestCase;
29 import org.custommonkey.xmlunit.XMLUnit;
30
31 /**
32  * Test of HttpAdapter XML results
33  *
34  * @version $Revision: 1.3 $
35  */

36 public class HttpAdaptorXMLTest extends XMLTestCase
37 {
38    protected MBeanServer JavaDoc server;
39    protected ObjectName JavaDoc httpName, test1Name, test2Name, test3Name;
40    protected String JavaDoc 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    /**
47     * Construct the test case
48     */

49    public HttpAdaptorXMLTest(String JavaDoc name)
50    {
51       super(name);
52    }
53
54    public static interface TestClassMBean
55    {
56       public String JavaDoc getStr();
57
58       public Double JavaDoc getDouble();
59
60       public boolean isTrue();
61
62       public void setStr(String JavaDoc str);
63
64       public Boolean JavaDoc aMethod(String JavaDoc string);
65
66       public void anotherMethod(String JavaDoc string, int test);
67    }
68
69    public static class TestClass extends NotificationBroadcasterSupport JavaDoc implements TestClassMBean
70    {
71       private String JavaDoc str;
72
73       public TestClass(String JavaDoc str)
74       {
75          this.str = str;
76       }
77
78       public String JavaDoc getStr()
79       {
80          return str;
81       }
82
83       public void setStr(String JavaDoc str)
84       {
85          this.str = str;
86       }
87
88       public Double JavaDoc getDouble()
89       {
90          return new Double JavaDoc(0);
91       }
92
93       public boolean isTrue()
94       {
95          return true;
96       }
97
98       public Boolean JavaDoc aMethod(String JavaDoc string)
99       {
100          return new Boolean JavaDoc(string.equals("true"));
101       }
102
103       public void anotherMethod(String JavaDoc string, int test)
104       {
105          this.str = string;
106       }
107
108       public MBeanNotificationInfo JavaDoc[] getNotificationInfo()
109       {
110          MBeanNotificationInfo JavaDoc[] notifications = new MBeanNotificationInfo JavaDoc[1];
111          notifications[0] = new MBeanNotificationInfo JavaDoc(new String JavaDoc[]{"test1"
112                                                                    , "test2"}, "name", "test");
113          return notifications;
114       }
115
116    }
117
118    public static interface TestClass2MBean
119    {
120       public String JavaDoc getStr();
121
122       public String JavaDoc[] getStrArray();
123
124       public void setStrArray(String JavaDoc[] str);
125
126       public Double JavaDoc getDouble();
127
128       public void setDouble(Double JavaDoc doubleValue);
129
130       public void setStr(String JavaDoc str);
131
132       public Map JavaDoc getMap();
133
134       public List JavaDoc getList();
135    }
136
137    public static class TestClass2 extends NotificationBroadcasterSupport JavaDoc implements TestClass2MBean
138    {
139       private String JavaDoc str;
140       private String JavaDoc[] strArray = new String JavaDoc[]{"a", "b", "c"};
141       private Map JavaDoc map = new HashMap JavaDoc();
142       private List JavaDoc list = new ArrayList JavaDoc();
143       private Double JavaDoc doubleValue = new Double JavaDoc(0);
144
145       public TestClass2(String JavaDoc str)
146       {
147          this.str = str;
148          list.add("1");
149          list.add("2");
150          map.put("1", new Integer JavaDoc(1));
151          map.put("2", new Integer JavaDoc(2));
152       }
153
154       public String JavaDoc getStr()
155       {
156          return str;
157       }
158
159       public String JavaDoc[] getStrArray()
160       {
161          return strArray;
162       }
163
164       public void setStrArray(String JavaDoc[] str)
165       {
166          this.strArray = strArray;
167       }
168
169       public void setStr(String JavaDoc str)
170       {
171          this.str = str;
172       }
173
174       public void setDouble(Double JavaDoc doubleValue)
175       {
176          this.doubleValue = doubleValue;
177       }
178
179       public Double JavaDoc getDouble()
180       {
181          return doubleValue;
182       }
183
184       public Map JavaDoc getMap()
185       {
186          return map;
187       }
188
189       public List JavaDoc 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 JavaDoc("Http:name=HttpAdaptor");
202          test1Name = new ObjectName JavaDoc("Test:name=test1");
203          test2Name = new ObjectName JavaDoc("Test:name=test2");
204          test3Name = new ObjectName JavaDoc("Test:name=test3");
205          server.createMBean("mx4j.tools.adaptor.http.HttpAdaptor", httpName, null);
206          // customisations, if you have the 8080 port reserved
207
String JavaDoc hostProperty = System.getProperty("test.http.host");
208          if (hostProperty != null)
209          {
210             host = hostProperty;
211          }
212          String JavaDoc portProperty = System.getProperty("test.http.port");
213          if (portProperty != null)
214          {
215             port = Integer.parseInt(portProperty);
216          }
217          server.setAttribute(httpName, new Attribute JavaDoc("Host", host));
218          server.setAttribute(httpName, new Attribute JavaDoc("Port", new Integer JavaDoc(port)));
219          // add a couple of MBeans
220
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 JavaDoc e)
229       {
230          e.printStackTrace();
231       }
232
233    }
234
235    public void tearDown()
236    {
237       try
238       {
239          while (((Boolean JavaDoc)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 JavaDoc e)
250             {
251                continue;
252             }
253          }
254          server.unregisterMBean(httpName);
255       }
256       catch (Exception JavaDoc e)
257       {
258          e.printStackTrace();
259       }
260    }
261
262    /**
263     * Test the mbeans request
264     */

265    public void testServer() throws Exception JavaDoc
266    {
267       // test raw mbeans request, no organization
268
Reader JavaDoc stream = getReader(host, port, "server");
269       StringBuffer JavaDoc result = new StringBuffer JavaDoc();
270       int i = 0;
271       while ((i = stream.read()) >= 0)
272       {
273          result.append((char)i);
274       }
275       String JavaDoc 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    /**
293     * Test the mbeans request
294     */

295    public void testServerAndFilters() throws Exception JavaDoc
296    {
297       // test raw mbeans request, no organization
298
Reader JavaDoc stream = getReader(host, port, "server?instanceof=test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass");
299       String JavaDoc 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 JavaDoc(controlMBean), stream);
305       stream.close();
306    }
307
308    public void testServerByDomain() throws Exception JavaDoc
309    {
310       // test raw mbeans request grouped by domain
311
Reader JavaDoc stream = getReader(host, port, "serverbydomain");
312       String JavaDoc 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 JavaDoc(controlMBean), stream);
332    }
333
334    public void testServerByDomainAndFilters() throws Exception JavaDoc
335    {
336       // test raw mbeans request grouped by domain
337
Reader JavaDoc stream = getReader(host, port, "serverbydomain?instanceof=test.mx4j.tools.adaptor.http.HttpAdaptorXMLTest$TestClass");
338       String JavaDoc 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 JavaDoc(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 JavaDoc(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    /**
389     * Test the mbeans delete
390     */

391    public void testDelete() throws Exception JavaDoc
392    {
393       try
394       {
395          // test raw mbeans request, no organization
396
Reader JavaDoc stream = getReader(host, port, "delete?objectname=Test:name=test1");
397          String JavaDoc 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 JavaDoc(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 JavaDoc(controlMBean), stream);
410          stream.close();
411       }
412       finally
413       {
414          server.registerMBean(test1, test1Name);
415       }
416    }
417
418    /**
419     * Test the operations invoke
420     */

421    public void testInvoke() throws Exception JavaDoc
422    {
423       Reader JavaDoc stream = getReader(host, port, "invoke?objectname=Test:name=test1&operation=aMethod&type0=java.lang.String&value0=true");
424       String JavaDoc 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 JavaDoc(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 JavaDoc(controlMBean), stream);
436       stream.close();
437    }
438
439    /**
440     * Test the set attribute request
441     */

442    public void testSetAttribute() throws Exception JavaDoc
443    {
444       try
445       {
446          // test correct ser variable
447
Reader JavaDoc stream = getReader(host, port, "setattribute?objectname=Test:name=test1&attribute=Str&value=t2");
448          String JavaDoc 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 JavaDoc(controlMBean), stream);
453          assertEquals("t2", server.getAttribute(test1Name, "Str"));
454          server.setAttribute(test1Name, new Attribute JavaDoc("Str", "t1"));
455          stream.close();
456          // test correct ser variable
457
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 JavaDoc(controlMBean), stream);
463          assertEquals("t1", server.getAttribute(test1Name, "Str"));
464          // test correct ser variable
465
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 JavaDoc(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 JavaDoc(controlMBean), stream);
479          assertEquals("t1", server.getAttribute(test1Name, "Str"));
480          stream.close();
481       }
482       finally
483       {
484          server.setAttribute(test1Name, new Attribute JavaDoc("Str", "t1"));
485       }
486    }
487
488    /**
489     * Test the set attributes request
490     */

491    public void testSetAttributes() throws Exception JavaDoc
492    {
493       try
494       {
495          // test with set one variable
496
Reader JavaDoc stream = getReader(host, port, "setattributes?objectname=Test:name=test3&value_Str=t2&set_Str=Set");
497          String JavaDoc 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 JavaDoc(controlMBean), stream);
504          assertEquals("t2", server.getAttribute(test3Name, "Str"));
505          server.setAttribute(test3Name, new Attribute JavaDoc("Str", "t1"));
506          stream.close();
507          // test with set all
508
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 JavaDoc(controlMBean), stream);
517          assertEquals(new Double JavaDoc(3), server.getAttribute(test3Name, "Double"));
518          stream.close();
519          // test two variables
520
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 JavaDoc(controlMBean), stream);
529          assertEquals(new Double JavaDoc(4), server.getAttribute(test3Name, "Double"));
530          assertEquals("t3", server.getAttribute(test3Name, "Str"));
531          // test bug when setting a wrong value
532
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 JavaDoc(controlMBean), stream);
541          assertEquals(new Double JavaDoc(4), server.getAttribute(test3Name, "Double"));
542          assertEquals("t3", server.getAttribute(test3Name, "Str"));
543       }
544       finally
545       {
546          server.setAttribute(test3Name, new Attribute JavaDoc("Str", "t1"));
547          server.setAttribute(test3Name, new Attribute JavaDoc("Double", new Double JavaDoc(0)));
548       }
549    }
550
551    public void testCreate() throws Exception JavaDoc
552    {
553       ObjectName JavaDoc name = new ObjectName JavaDoc("Http:name=create");
554       try
555       {
556          // test raw mbeans request grouped by domain
557
Reader JavaDoc stream = getReader(host, port, "create?class=mx4j.tools.adaptor.http.HttpAdaptor&objectname=" + name.toString());
558          String JavaDoc 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 JavaDoc(controlMBean), stream);
563       }
564       finally
565       {
566          server.unregisterMBean(name);
567       }
568    }
569
570    public void testEmpty() throws Exception JavaDoc
571    {
572       // test empty request
573
Reader JavaDoc stream = getReader(host, port, "empty");
574       String JavaDoc controlMBean = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><empty/>\n";
575       assertXMLEqual(new StringReader JavaDoc(controlMBean), stream);
576    }
577
578    /**
579     * Test the mbeans request
580     */

581    public void testSingleMBean() throws Exception JavaDoc
582    {
583       // test one mbean request
584
Reader JavaDoc stream = getReader(host, port, "mbean?objectname=Test:name=test1");
585       String JavaDoc 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 JavaDoc(controlMBean), stream);
607
608       // Test with arrays/maps/collections
609
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&apos;s parameter n. 1\" id=\"0\" name=\"param1\" strinit=\"true\" type=\"java.lang.String\"/>" +
619                      "</Constructor>" +
620                      "</MBean>";
621       assertXMLEqual(new StringReader JavaDoc(controlMBean), stream);
622
623       // test isnull
624
Object JavaDoc theMap = server.getAttribute(new ObjectName JavaDoc("Test:name=test3"), "StrArray");
625       try
626       {
627          server.setAttribute(new ObjectName JavaDoc("Test:name=test3"), new Attribute JavaDoc("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&apos;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 JavaDoc("Test:name=test3"), new Attribute JavaDoc("StrArray", theMap));
644       }
645    }
646
647    public void testSingleMBeanAndFilters() throws Exception JavaDoc
648    {
649       // test one mbean request
650
Reader JavaDoc stream = getReader(host, port, "mbean?objectname=Test:name=test1&attributes=false");
651       String JavaDoc 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 JavaDoc(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 JavaDoc(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 JavaDoc(controlMBean), stream);
707       stream.close();
708       stream = getReader(host, port, "mbean?objectname=Test:name=test1&notifications=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 JavaDoc(controlMBean), stream);
727       stream.close();
728       stream = getReader(host, port, "mbean?objectname=Test:name=test1&notifications=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 JavaDoc(controlMBean), stream);
733    }
734
735    public void testConstructors() throws Exception JavaDoc
736    {
737       // test one constructors request
738
Reader JavaDoc stream = getReader(host, port, "constructors?classname=mx4j.tools.adaptor.http.HttpAdaptor");
739       String JavaDoc 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 JavaDoc(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 JavaDoc(controlMBean), stream);
759    }
760
761    /**
762     * Test the get attribute request for arrays
763     */

764    public void testGetAttribute() throws Exception JavaDoc
765    {
766       Reader JavaDoc stream = getReader(host, port, "getattribute?objectname=Test:name=test1&attribute=Str");
767       String JavaDoc 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 JavaDoc(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 JavaDoc(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 JavaDoc(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 JavaDoc(controlMBean), stream);
809
810       // test isnull
811
Object JavaDoc theArray = server.getAttribute(new ObjectName JavaDoc("Test:name=test3"), "StrArray");
812       try
813       {
814          server.setAttribute(new ObjectName JavaDoc("Test:name=test3"), new Attribute JavaDoc("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 JavaDoc("Test:name=test3"), new Attribute JavaDoc("StrArray", theArray));
824       }
825
826       // test for bug #622693
827
String JavaDoc strArray[] = (String JavaDoc[])server.getAttribute(new ObjectName JavaDoc("Test:name=test3"), "StrArray");
828       String JavaDoc valueAt1 = strArray[1];
829       strArray[1] = null;
830       try
831       {
832          server.setAttribute(new ObjectName JavaDoc("Test:name=test3"), new Attribute JavaDoc("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 JavaDoc("Test:name=test3"), new Attribute JavaDoc("StrArray", strArray));
849       }
850    }
851
852    public Reader JavaDoc getReader(String JavaDoc host, int port, String JavaDoc path) throws IOException JavaDoc, MalformedURLException JavaDoc
853    {
854       URL JavaDoc url = new URL JavaDoc("http://" + host + ":" + port + "/" + path);
855       URLConnection JavaDoc connection = url.openConnection();
856       return new InputStreamReader JavaDoc(connection.getInputStream());
857    }
858 }
859
860
Popular Tags