/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6221321 6295867
* @summary Test that annotations in Standard MBean interfaces
* correctly produce Descriptor entries
* @author Eamonn McManus
* @run clean AnnotationTest
* @run build AnnotationTest
* @run main AnnotationTest
*/
/*
This test checks that annotations produce Descriptor entries as
specified in javax.management.DescriptorKey. It does two things:
- An annotation consisting of an int and a String, each with an
appropriate @DescriptorKey annotation, is placed on every program
element where it can map to a Descriptor, namely:
. on an MBean interface
. on a getter for a read-only attribute
. on a setter for a write-only attribute
. on an operation
. on each parameter of an operation
. on a public constructor with no parameters
. on a public constructor with a parameter
. on the parameter of that public constructor
. on all of the above for an MXBean instead of an MBean
The test checks that in each case the corresponding Descriptor
appears in the appropriate place inside the MBean's MBeanInfo.
- An annotation consisting of enough other types to ensure coverage
is placed on a getter. The test checks that the generated
MBeanAttributeInfo contains the corresponding Descriptor. The tested
types are the following:
. Class
. an enumeration type (java.lang.annotation.RetentionPolicy)
. boolean
. String[]
. Class[]
. int[]
. an array of enumeration type (RetentionPolicy[])
. boolean[]
*/
public class AnnotationTest {
public static @interface Pair {
@DescriptorKey("x")
int x();
@DescriptorKey("y")
String y();
}
public static @interface Full {
@DescriptorKey("class")
@DescriptorKey("enum")
@DescriptorKey("boolean")
boolean booleanValue();
@DescriptorKey("stringArray")
@DescriptorKey("classArray")
@DescriptorKey("intArray")
int[] intArrayValue();
@DescriptorKey("enumArray")
@DescriptorKey("booleanArray")
boolean[] booleanArrayValue();
}
/* We use the annotation @Pair(x = 3, y = "foo") everywhere, and this is
the Descriptor that it should produce: */
new ImmutableDescriptor(new String[] {
"class", "enum", "boolean", "stringArray",
"classArray", "intArray", "enumArray",
"booleanArray",
},
new Object[] {
false,
new int[] {1, 2},
new boolean[] {false, true},
});
public static interface ThingMBean {
booleanValue=false,
classArrayValue={Full.class},
booleanArrayValue={false, true})
int getReadOnly();
void setWriteOnly(int x);
int getReadWrite1();
void setReadWrite1(int x);
int getReadWrite2();
void setReadWrite2(int x);
int getReadWrite3();
void setReadWrite3(int x);
}
public Thing() {}
public void setWriteOnly(int x) {}
public void setReadWrite1(int x) {}
public void setReadWrite2(int x) {}
public void setReadWrite3(int x) {}
}
public ThingImpl() {}
public void setWriteOnly(int x) {}
public void setReadWrite1(int x) {}
public void setReadWrite2(int x) {}
public void setReadWrite3(int x) {}
}
"reflected in Descriptor entries");
failed = "Expected MXBean";
}
else
}
// check the MBean itself
// check attributes
}
// check operations
}
}
}
}
try {
if (!u.equals(d))
} catch (IllegalArgumentException e) {
fail = e.getMessage();
}
} else {
failed = "NOT OK: Incorrect descriptor for: " + x;
}
}
for (DescriptorRead x : xx)
check(x);
}
}