0N/A/*
2362N/A * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
0N/A * published by the Free Software Foundation.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/A/*
0N/A * @test
0N/A * @bug 6175517 6278707
0N/A * @summary Test that ambiguous ConstructorProperties annotations are detected.
0N/A * @author Eamonn McManus
0N/A * @run clean AmbiguousConstructorTest
0N/A * @run build AmbiguousConstructorTest
0N/A * @run main AmbiguousConstructorTest
0N/A */
0N/A
0N/Aimport java.beans.ConstructorProperties;
0N/Aimport java.io.InvalidObjectException;
0N/Aimport javax.management.*;
0N/A
0N/Apublic class AmbiguousConstructorTest {
0N/A public static void main(String[] args) throws Exception {
0N/A MBeanServer mbs = MBeanServerFactory.newMBeanServer();
0N/A
0N/A System.out.println("Unambiguous case:");
0N/A ObjectName unambigName = new ObjectName("d:type=Unambiguous");
0N/A mbs.registerMBean(new UnambiguousImpl(), unambigName);
0N/A System.out.println("...OK");
0N/A
0N/A System.out.println("Ambiguous case:");
0N/A ObjectName ambigName = new ObjectName("d:type=Ambiguous");
0N/A boolean exception = false;
0N/A try {
0N/A mbs.registerMBean(new AmbiguousImpl(), ambigName);
0N/A } catch (Exception e) {
0N/A // TODO - check for the specific exception we should get.
0N/A // Currently exception happens in preRegister so we have
0N/A // RuntimeMBeanException -> IllegalArgumentException ->
0N/A // InvalidObjectException, where the IllegalArgumentException
0N/A // is thrown by MXSupport.MBeanDispatcher.visitAttribute when
0N/A // it calls ConvertingMethod.checkCallFromOpen
0N/A System.out.println("...OK, got expected exception:");
0N/A e.printStackTrace(System.out);
0N/A exception = true;
0N/A }
0N/A if (!exception) {
0N/A System.out.println("TEST FAILED: expected exception, got none");
0N/A throw new Exception("Did not get expected exception");
0N/A }
0N/A
0N/A System.out.println("TEST PASSED");
0N/A }
0N/A
0N/A public static class Unambiguous {
0N/A public byte getA() {return 0;}
0N/A public short getB() {return 0;}
0N/A public int getC() {return 0;}
0N/A public long getD() {return 0;}
0N/A
0N/A @ConstructorProperties({"a", "b"})
0N/A public Unambiguous(byte a, short b) {}
0N/A
0N/A @ConstructorProperties({"b", "c"})
0N/A public Unambiguous(short b, int c) {}
0N/A
0N/A @ConstructorProperties({"a", "b", "c"})
0N/A public Unambiguous(byte a, short b, int c) {}
0N/A }
0N/A
0N/A public static class Ambiguous {
0N/A public byte getA() {return 0;}
0N/A public short getB() {return 0;}
0N/A public int getC() {return 0;}
0N/A public long getD() {return 0;}
0N/A
0N/A @ConstructorProperties({"a", "b"})
0N/A public Ambiguous(byte a, short b) {}
0N/A
0N/A @ConstructorProperties({"b", "c"})
0N/A public Ambiguous(short b, int c) {}
0N/A
0N/A @ConstructorProperties({"a", "b", "c", "d"})
0N/A public Ambiguous(byte a, short b, int c, long d) {}
0N/A }
0N/A
0N/A public static interface UnambiguousMXBean {
0N/A public void setUnambiguous(Unambiguous x);
0N/A }
0N/A
0N/A public static class UnambiguousImpl implements UnambiguousMXBean {
0N/A public void setUnambiguous(Unambiguous x) {}
0N/A }
0N/A
0N/A public static interface AmbiguousMXBean {
0N/A public void setAmbiguous(Ambiguous x);
0N/A }
0N/A
0N/A public static class AmbiguousImpl implements AmbiguousMXBean {
0N/A public void setAmbiguous(Ambiguous x) {}
0N/A }
0N/A}