blob: 20ac6956b73aba4fbdb8eb07e6240368218fa362 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/*
25 * @test
26 * @bug 6175517 6278707
27 * @summary Test that ambiguous ConstructorProperties annotations are detected.
28 * @author Eamonn McManus
29 * @run clean AmbiguousConstructorTest
30 * @run build AmbiguousConstructorTest
31 * @run main AmbiguousConstructorTest
32 */
33
34import java.beans.ConstructorProperties;
35import java.io.InvalidObjectException;
36import javax.management.*;
37
38public class AmbiguousConstructorTest {
39 public static void main(String[] args) throws Exception {
40 MBeanServer mbs = MBeanServerFactory.newMBeanServer();
41
42 System.out.println("Unambiguous case:");
43 ObjectName unambigName = new ObjectName("d:type=Unambiguous");
44 mbs.registerMBean(new UnambiguousImpl(), unambigName);
45 System.out.println("...OK");
46
47 System.out.println("Ambiguous case:");
48 ObjectName ambigName = new ObjectName("d:type=Ambiguous");
49 boolean exception = false;
50 try {
51 mbs.registerMBean(new AmbiguousImpl(), ambigName);
52 } catch (Exception e) {
53 // TODO - check for the specific exception we should get.
54 // Currently exception happens in preRegister so we have
55 // RuntimeMBeanException -> IllegalArgumentException ->
56 // InvalidObjectException, where the IllegalArgumentException
57 // is thrown by MXSupport.MBeanDispatcher.visitAttribute when
58 // it calls ConvertingMethod.checkCallFromOpen
59 System.out.println("...OK, got expected exception:");
60 e.printStackTrace(System.out);
61 exception = true;
62 }
63 if (!exception) {
64 System.out.println("TEST FAILED: expected exception, got none");
65 throw new Exception("Did not get expected exception");
66 }
67
68 System.out.println("TEST PASSED");
69 }
70
71 public static class Unambiguous {
72 public byte getA() {return 0;}
73 public short getB() {return 0;}
74 public int getC() {return 0;}
75 public long getD() {return 0;}
76
77 @ConstructorProperties({"a", "b"})
78 public Unambiguous(byte a, short b) {}
79
80 @ConstructorProperties({"b", "c"})
81 public Unambiguous(short b, int c) {}
82
83 @ConstructorProperties({"a", "b", "c"})
84 public Unambiguous(byte a, short b, int c) {}
85 }
86
87 public static class Ambiguous {
88 public byte getA() {return 0;}
89 public short getB() {return 0;}
90 public int getC() {return 0;}
91 public long getD() {return 0;}
92
93 @ConstructorProperties({"a", "b"})
94 public Ambiguous(byte a, short b) {}
95
96 @ConstructorProperties({"b", "c"})
97 public Ambiguous(short b, int c) {}
98
99 @ConstructorProperties({"a", "b", "c", "d"})
100 public Ambiguous(byte a, short b, int c, long d) {}
101 }
102
103 public static interface UnambiguousMXBean {
104 public void setUnambiguous(Unambiguous x);
105 }
106
107 public static class UnambiguousImpl implements UnambiguousMXBean {
108 public void setUnambiguous(Unambiguous x) {}
109 }
110
111 public static interface AmbiguousMXBean {
112 public void setAmbiguous(Ambiguous x);
113 }
114
115 public static class AmbiguousImpl implements AmbiguousMXBean {
116 public void setAmbiguous(Ambiguous x) {}
117 }
118}