1 /* 2 * Copyright (c) 2003, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 4874819 27 * @summary Test that MBeanInfo classes no longer throw an 28 * IllegalArgumentException when attribute names, operation names, and 29 * Java type names do not strictly follow the expected Java syntax. 30 * @author Daniel Fuchs 31 * @run clean MustBeValidCommand 32 * @run build MustBeValidCommand 33 * @run main MustBeValidCommand 34 */ 35 36 import javax.management.MBeanInfo; 37 import javax.management.MBeanAttributeInfo; 38 import javax.management.MBeanOperationInfo; 39 import javax.management.MBeanParameterInfo; 40 import javax.management.MBeanNotificationInfo; 41 import javax.management.MBeanConstructorInfo; 42 43 public class MustBeValidCommand { 44 45 private static String[][] attributes = { 46 { "Attribute with valid identifiers", 47 "validType1","validNameAtt1" }, 48 { "Attribute with invalid type", 49 "invalid-type", "validNameAtt2" }, 50 { "Attribute with invalid name", "valid.type2", 51 "invalid-name-att3" }, 52 { "Attribute with invalid name and type", 53 "invalidtype[]","invalid.name.att4" } 54 }; 55 private static String[][] constructors = { 56 { "Constructor with valid name", 57 "ValidConstructor1" }, 58 { "Constructor with invalid name", 59 "invalid.Constructor2"}, 60 { "Constructor with invalid name", 61 "invalid-constructor-3" }, 62 { "Constructor with invalid name", 63 "invalid constructor" } 64 }; 65 private static String[][] mbeanclasses = { 66 { "MBean with valid class name", 67 "ValidMBeanClass1" }, 68 { "MBean with valid class name", 69 "valid.mbean.Class2" }, 70 { "MBean with invalid class name", 71 "invalid.MBeanClass3[]"}, 72 { "MBean with invalid class name", 73 "invalid-mbean-class-4" }, 74 { "MBean with invalid class name", 75 "invalid mbean class 5" } 76 }; 77 private static String[][] notificationclasses = { 78 { "Notification with valid class name", 79 "ValidNotificationClass1" }, 80 { "Notification with valid class name", 81 "valid.notification.Class2" }, 82 { "Notification with invalid class name", 83 "invalid.NotificationClass3[]"}, 84 { "Notification with invalid class name", 85 "invalid-notification-class-4" }, 86 { "Notification with invalid class name", 87 "invalid notification class 5" } 88 }; 89 private static String[][] operations = { 90 { "Operation with valid identifiers", 91 "validType1","validNameOp1" }, 92 { "Operation with invalid type", 93 "invalid-type", "validNameOp2" }, 94 { "Operation with invalid name", "valid.type2", 95 "invalid-name-op3" }, 96 { "Operation with invalid name and type", 97 "invalidtype[]","invalid.name.op4" } 98 }; 99 private static String[][] parameters = { 100 { "Parameter with valid identifiers", 101 "validType1","validNamePar1" }, 102 { "Parameter with invalid type", 103 "invalid-type", "validNamePar2" }, 104 { "Parameter with invalid name", "valid.type2", 105 "invalid-name-par3" }, 106 { "Parameter with invalid name and type", 107 "invalidtype[]","invalid.name.par4" } 108 }; 109 110 static private MBeanAttributeInfo[] makeAttInfos(String[][] spec) { 111 final MBeanAttributeInfo[] result = 112 new MBeanAttributeInfo[spec.length]; 113 for (int i=0;i<result.length;i++) { 114 System.out.println("\tCreate an MBeanAttributeInfo: " + 115 spec[i][0]); 116 final MBeanAttributeInfo item = 117 new MBeanAttributeInfo(spec[i][2],spec[i][1],spec[i][0], 118 true,true,false); 119 result[i]=item; 120 } 121 return result; 122 } 123 124 static private MBeanParameterInfo[] makeParInfos(String[][] spec) { 125 final MBeanParameterInfo[] result = 126 new MBeanParameterInfo[spec.length]; 127 for (int i=0;i<result.length;i++) { 128 System.out.println("\tCreate an MBeanParameterInfo: " + 129 spec[i][0]); 130 final MBeanParameterInfo item = 131 new MBeanParameterInfo(spec[i][2],spec[i][1],spec[i][0]); 132 result[i]=item; 133 } 134 return result; 135 } 136 137 static private MBeanOperationInfo[] makeOpInfos(String[][] spec) { 138 final MBeanOperationInfo[] result = 139 new MBeanOperationInfo[spec.length]; 140 final MBeanParameterInfo[] pars = makeParInfos(parameters); 141 for (int i=0;i<result.length;i++) { 142 System.out.println("\tCreate an MBeanOperationInfo: " + 143 spec[i][0]); 144 final MBeanOperationInfo item = 145 new MBeanOperationInfo(spec[i][2],spec[i][0],pars,spec[i][1], 146 MBeanOperationInfo.ACTION_INFO); 147 result[i]=item; 148 } 149 return result; 150 } 151 152 static private MBeanConstructorInfo[] makeCtorInfos(String[][] spec) { 153 final MBeanConstructorInfo[] result = 154 new MBeanConstructorInfo[spec.length]; 155 final MBeanParameterInfo[] pars = makeParInfos(parameters); 156 for (int i=0;i<result.length;i++) { 157 System.out.println("\tCreate an MBeanConstructorInfo: " + 158 spec[i][0]); 159 final MBeanConstructorInfo item = 160 new MBeanConstructorInfo(spec[i][1],spec[i][0],pars); 161 result[i]=item; 162 } 163 return result; 164 } 165 166 static private MBeanNotificationInfo[] makeNotifInfos(String[][] spec) { 167 final MBeanNotificationInfo[] result = 168 new MBeanNotificationInfo[spec.length]; 169 final String[] types = {"valid.type","invalid-type"}; 170 for (int i=0;i<result.length;i++) { 171 System.out.println("\tCreate an MBeanNotificationInfo: " + 172 spec[i][0]); 173 final MBeanNotificationInfo item = 174 new MBeanNotificationInfo(types,spec[i][1],spec[i][0]); 175 result[i]=item; 176 } 177 return result; 178 } 179 180 public static void main(String[] args) throws Exception { 181 // Instantiate the MBean server 182 // 183 final MBeanAttributeInfo[] atts = makeAttInfos(attributes); 184 final MBeanConstructorInfo[] ctors = makeCtorInfos(constructors); 185 final MBeanOperationInfo[] ops = makeOpInfos(operations); 186 final MBeanNotificationInfo[] notifs = 187 makeNotifInfos(notificationclasses); 188 189 for (int i=0; i<mbeanclasses.length;i++) { 190 System.out.println("Create an MBeanInfo: " + mbeanclasses[i][0]); 191 final MBeanInfo mbi = 192 new MBeanInfo(mbeanclasses[i][1],mbeanclasses[i][0], 193 atts, ctors, ops, notifs); 194 } 195 196 // Test OK! 197 // 198 System.out.println("All MBeanInfo successfuly created!"); 199 System.out.println("Bye! Bye!"); 200 } 201 }