提交 1589d57e 编写于 作者: J jfdenise

6501362: DescriptorSupport(String) could recognize "name=value" as well as XML format

Reviewed-by: emcmanus
上级 918b0732
......@@ -229,9 +229,10 @@ public class DescriptorSupport
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 @@ public class DescriptorSupport
* 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 @@ public class DescriptorSupport
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 @@ public class DescriptorSupport
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 @@ public class DescriptorSupport
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) {
......
/*
* 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");
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册