6501362: DescriptorSupport(String) could recognize "name=value" as well as XML format
Reviewed-by: emcmanus
--- a/jdk/src/share/classes/javax/management/modelmbean/DescriptorSupport.java Tue Dec 09 12:01:07 2008 +0100
+++ b/jdk/src/share/classes/javax/management/modelmbean/DescriptorSupport.java Tue Dec 09 14:44:42 2008 +0100
@@ -229,9 +229,10 @@
init(inDescr.descriptorMap);
}
-
/**
- * <p>Descriptor constructor taking an XML String.</p>
+ * <p>Descriptor constructor taking an XML String or a
+ * <i>fieldName=fieldValue</i> format String. The String parameter is
+ * parsed as XML if it begins with a '<' character.</p>
*
* <p>The format of the XML string is not defined, but an
* implementation must ensure that the string returned by
@@ -244,17 +245,20 @@
* programmer will have to reset or convert these fields
* correctly.</p>
*
- * @param inStr An XML-formatted string used to populate this
- * Descriptor. The format is not defined, but any
+ * @param inStr An XML-format or a fieldName=fieldValue formatted string
+ * used to populate this Descriptor. The XML format is not defined, but any
* implementation must ensure that the string returned by
* method {@link #toXMLString toXMLString} on an existing
* descriptor can be used to instantiate an equivalent
* descriptor when instantiated using this constructor.
*
- * @exception RuntimeOperationsException If the String inStr
- * passed in parameter is null
+ * @exception RuntimeOperationsException If the String inStr passed in
+ * parameter is null or, when it is not an XML string, if the field name or
+ * field value is illegal. If inStr is not an XML string then it must
+ * contain an "=". "fieldValue", "fieldName", and "fieldValue" are illegal.
+ * FieldName cannot be empty. "fieldName=" will cause the value to be empty.
* @exception XMLParseException XML parsing problem while parsing
- * the input String
+ * the XML-format input String
* @exception MBeanException Wraps a distributed communication Exception.
*/
/* At some stage we should rewrite this code to be cleverer. Using
@@ -283,14 +287,27 @@
throw new RuntimeOperationsException(iae, msg);
}
+ // parse parameter string into structures
+
+ init(null);
+
+ if(!inStr.startsWith("<")) {
+ parseNamesValues(inStr);
+ if (MODELMBEAN_LOGGER.isLoggable(Level.FINEST)) {
+ MODELMBEAN_LOGGER.logp(Level.FINEST,
+ DescriptorSupport.class.getName(),
+ "Descriptor(name=value)", "Exit");
+ }
+ return;
+ }
+
final String lowerInStr = inStr.toLowerCase();
if (!lowerInStr.startsWith("<descriptor>")
|| !lowerInStr.endsWith("</descriptor>")) {
throw new XMLParseException("No <descriptor>, </descriptor> pair");
}
- // parse xmlstring into structures
- init(null);
+
// create dummy descriptor: should have same size
// as number of fields in xmlstring
// loop through structures and put them in descriptor
@@ -454,6 +471,16 @@
init(null);
+ parseNamesValues(fields);
+
+ if (MODELMBEAN_LOGGER.isLoggable(Level.FINEST)) {
+ MODELMBEAN_LOGGER.logp(Level.FINEST,
+ DescriptorSupport.class.getName(),
+ "Descriptor(String... fields)", "Exit");
+ }
+ }
+
+ private void parseNamesValues(String... fields) {
for (int i=0; i < fields.length; i++) {
if ((fields[i] == null) || (fields[i].equals(""))) {
continue;
@@ -495,11 +522,6 @@
setField(fieldName,fieldValue);
}
- if (MODELMBEAN_LOGGER.isLoggable(Level.FINEST)) {
- MODELMBEAN_LOGGER.logp(Level.FINEST,
- DescriptorSupport.class.getName(),
- "Descriptor(String... fields)", "Exit");
- }
}
private void init(Map<String, ?> initMap) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/management/descriptor/DescriptorConstructorTest.java Tue Dec 09 14:44:42 2008 +0100
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2004-2005 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6501362
+ * @summary DescriptorSupport(String) could recognize "name=value" as well as XML format
+ * @author Jean-Francois Denise
+ * @run clean DescriptorConstructorTest
+ * @run build DescriptorConstructorTest
+ * @run main DescriptorConstructorTest
+ */
+
+import javax.management.modelmbean.DescriptorSupport;
+
+public class DescriptorConstructorTest {
+ public static void main(String[] args) throws Exception {
+ DescriptorSupport d1 = new DescriptorSupport("MyName1=MyValue1");
+ if(!d1.getFieldValue("MyName1").equals("MyValue1"))
+ throw new Exception("Invalid parsing");
+ DescriptorSupport d2 = new DescriptorSupport("<Descriptor>" +
+ "<field name=\"MyName2\" value=\"MyValue2\"></field></Descriptor>");
+ if(!d2.getFieldValue("MyName2").equals("MyValue2"))
+ throw new Exception("Invalid parsing");
+ }
+}