mirror of
https://github.com/stleary/JSON-java.git
synced 2025-08-03 11:25:30 -04:00
Merge pull request #729 from TamasPergerDWP/f-parserconfig
Refactor ParserConfiguration class hierarchy
This commit is contained in:
commit
45bcba518f
@ -7,17 +7,12 @@ Public Domain.
|
|||||||
* Configuration object for the XML to JSONML parser. The configuration is immutable.
|
* Configuration object for the XML to JSONML parser. The configuration is immutable.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({""})
|
@SuppressWarnings({""})
|
||||||
public class JSONMLParserConfiguration {
|
public class JSONMLParserConfiguration extends ParserConfiguration {
|
||||||
/**
|
|
||||||
* Used to indicate there's no defined limit to the maximum nesting depth when parsing a XML
|
|
||||||
* document to JSONML.
|
|
||||||
*/
|
|
||||||
public static final int UNDEFINED_MAXIMUM_NESTING_DEPTH = -1;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default maximum nesting depth when parsing a XML document to JSONML.
|
* We can override the default maximum nesting depth if needed.
|
||||||
*/
|
*/
|
||||||
public static final int DEFAULT_MAXIMUM_NESTING_DEPTH = 512;
|
public static final int DEFAULT_MAXIMUM_NESTING_DEPTH = ParserConfiguration.DEFAULT_MAXIMUM_NESTING_DEPTH;
|
||||||
|
|
||||||
/** Original Configuration of the XML to JSONML Parser. */
|
/** Original Configuration of the XML to JSONML Parser. */
|
||||||
public static final JSONMLParserConfiguration ORIGINAL
|
public static final JSONMLParserConfiguration ORIGINAL
|
||||||
@ -26,22 +21,12 @@ public class JSONMLParserConfiguration {
|
|||||||
public static final JSONMLParserConfiguration KEEP_STRINGS
|
public static final JSONMLParserConfiguration KEEP_STRINGS
|
||||||
= new JSONMLParserConfiguration().withKeepStrings(true);
|
= new JSONMLParserConfiguration().withKeepStrings(true);
|
||||||
|
|
||||||
/**
|
|
||||||
* When parsing the XML into JSONML, specifies if values should be kept as strings (<code>true</code>), or if
|
|
||||||
* they should try to be guessed into JSON values (numeric, boolean, string)
|
|
||||||
*/
|
|
||||||
private boolean keepStrings;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The maximum nesting depth when parsing a XML document to JSONML.
|
|
||||||
*/
|
|
||||||
private int maxNestingDepth = DEFAULT_MAXIMUM_NESTING_DEPTH;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default parser configuration. Does not keep strings (tries to implicitly convert values).
|
* Default parser configuration. Does not keep strings (tries to implicitly convert values).
|
||||||
*/
|
*/
|
||||||
public JSONMLParserConfiguration() {
|
public JSONMLParserConfiguration() {
|
||||||
this.keepStrings = false;
|
super();
|
||||||
|
this.maxNestingDepth = DEFAULT_MAXIMUM_NESTING_DEPTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,9 +35,8 @@ public class JSONMLParserConfiguration {
|
|||||||
* <code>false</code> to try and convert XML string values into a JSON value.
|
* <code>false</code> to try and convert XML string values into a JSON value.
|
||||||
* @param maxNestingDepth <code>int</code> to limit the nesting depth
|
* @param maxNestingDepth <code>int</code> to limit the nesting depth
|
||||||
*/
|
*/
|
||||||
private JSONMLParserConfiguration(final boolean keepStrings, final int maxNestingDepth) {
|
protected JSONMLParserConfiguration(final boolean keepStrings, final int maxNestingDepth) {
|
||||||
this.keepStrings = keepStrings;
|
super(keepStrings, maxNestingDepth);
|
||||||
this.maxNestingDepth = maxNestingDepth;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,58 +55,13 @@ public class JSONMLParserConfiguration {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* When parsing the XML into JSONML, specifies if values should be kept as strings (<code>true</code>), or if
|
|
||||||
* they should try to be guessed into JSON values (numeric, boolean, string)
|
|
||||||
*
|
|
||||||
* @return The <code>keepStrings</code> configuration value.
|
|
||||||
*/
|
|
||||||
public boolean isKeepStrings() {
|
|
||||||
return this.keepStrings;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* When parsing the XML into JSONML, specifies if values should be kept as strings (<code>true</code>), or if
|
|
||||||
* they should try to be guessed into JSON values (numeric, boolean, string)
|
|
||||||
*
|
|
||||||
* @param newVal
|
|
||||||
* new value to use for the <code>keepStrings</code> configuration option.
|
|
||||||
*
|
|
||||||
* @return The existing configuration will not be modified. A new configuration is returned.
|
|
||||||
*/
|
|
||||||
public JSONMLParserConfiguration withKeepStrings(final boolean newVal) {
|
public JSONMLParserConfiguration withKeepStrings(final boolean newVal) {
|
||||||
JSONMLParserConfiguration newConfig = this.clone();
|
return super.withKeepStrings(newVal);
|
||||||
newConfig.keepStrings = newVal;
|
|
||||||
return newConfig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* The maximum nesting depth that the parser will descend before throwing an exception
|
|
||||||
* when parsing the XML into JSONML.
|
|
||||||
* @return the maximum nesting depth set for this configuration
|
|
||||||
*/
|
|
||||||
public int getMaxNestingDepth() {
|
|
||||||
return maxNestingDepth;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines the maximum nesting depth that the parser will descend before throwing an exception
|
|
||||||
* when parsing the XML into JSONML. The default max nesting depth is 512, which means the parser
|
|
||||||
* will throw a JsonException if the maximum depth is reached.
|
|
||||||
* Using any negative value as a parameter is equivalent to setting no limit to the nesting depth,
|
|
||||||
* which means the parses will go as deep as the maximum call stack size allows.
|
|
||||||
* @param maxNestingDepth the maximum nesting depth allowed to the XML parser
|
|
||||||
* @return The existing configuration will not be modified. A new configuration is returned.
|
|
||||||
*/
|
|
||||||
public JSONMLParserConfiguration withMaxNestingDepth(int maxNestingDepth) {
|
public JSONMLParserConfiguration withMaxNestingDepth(int maxNestingDepth) {
|
||||||
JSONMLParserConfiguration newConfig = this.clone();
|
return super.withMaxNestingDepth(maxNestingDepth);
|
||||||
|
|
||||||
if (maxNestingDepth > UNDEFINED_MAXIMUM_NESTING_DEPTH) {
|
|
||||||
newConfig.maxNestingDepth = maxNestingDepth;
|
|
||||||
} else {
|
|
||||||
newConfig.maxNestingDepth = UNDEFINED_MAXIMUM_NESTING_DEPTH;
|
|
||||||
}
|
|
||||||
|
|
||||||
return newConfig;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
112
src/main/java/org/json/ParserConfiguration.java
Normal file
112
src/main/java/org/json/ParserConfiguration.java
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
package org.json;
|
||||||
|
/*
|
||||||
|
Public Domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration base object for parsers. The configuration is immutable.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({""})
|
||||||
|
public class ParserConfiguration {
|
||||||
|
/**
|
||||||
|
* Used to indicate there's no defined limit to the maximum nesting depth when parsing a document.
|
||||||
|
*/
|
||||||
|
public static final int UNDEFINED_MAXIMUM_NESTING_DEPTH = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default maximum nesting depth when parsing a document.
|
||||||
|
*/
|
||||||
|
public static final int DEFAULT_MAXIMUM_NESTING_DEPTH = 512;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies if values should be kept as strings (<code>true</code>), or if
|
||||||
|
* they should try to be guessed into JSON values (numeric, boolean, string)
|
||||||
|
*/
|
||||||
|
protected boolean keepStrings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum nesting depth when parsing a document.
|
||||||
|
*/
|
||||||
|
protected int maxNestingDepth;
|
||||||
|
|
||||||
|
public ParserConfiguration() {
|
||||||
|
this.keepStrings = false;
|
||||||
|
this.maxNestingDepth = DEFAULT_MAXIMUM_NESTING_DEPTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ParserConfiguration(final boolean keepStrings, final int maxNestingDepth) {
|
||||||
|
this.keepStrings = keepStrings;
|
||||||
|
this.maxNestingDepth = maxNestingDepth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a new instance of the same configuration.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected ParserConfiguration clone() {
|
||||||
|
// future modifications to this method should always ensure a "deep"
|
||||||
|
// clone in the case of collections. i.e. if a Map is added as a configuration
|
||||||
|
// item, a new map instance should be created and if possible each value in the
|
||||||
|
// map should be cloned as well. If the values of the map are known to also
|
||||||
|
// be immutable, then a shallow clone of the map is acceptable.
|
||||||
|
return new ParserConfiguration(
|
||||||
|
this.keepStrings,
|
||||||
|
this.maxNestingDepth
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When parsing the XML into JSONML, specifies if values should be kept as strings (<code>true</code>), or if
|
||||||
|
* they should try to be guessed into JSON values (numeric, boolean, string)
|
||||||
|
*
|
||||||
|
* @return The <code>keepStrings</code> configuration value.
|
||||||
|
*/
|
||||||
|
public boolean isKeepStrings() {
|
||||||
|
return this.keepStrings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When parsing the XML into JSONML, specifies if values should be kept as strings (<code>true</code>), or if
|
||||||
|
* they should try to be guessed into JSON values (numeric, boolean, string)
|
||||||
|
*
|
||||||
|
* @param newVal
|
||||||
|
* new value to use for the <code>keepStrings</code> configuration option.
|
||||||
|
*
|
||||||
|
* @return The existing configuration will not be modified. A new configuration is returned.
|
||||||
|
*/
|
||||||
|
public <T extends ParserConfiguration> T withKeepStrings(final boolean newVal) {
|
||||||
|
T newConfig = (T)this.clone();
|
||||||
|
newConfig.keepStrings = newVal;
|
||||||
|
return newConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum nesting depth that the parser will descend before throwing an exception
|
||||||
|
* when parsing the XML into JSONML.
|
||||||
|
* @return the maximum nesting depth set for this configuration
|
||||||
|
*/
|
||||||
|
public int getMaxNestingDepth() {
|
||||||
|
return maxNestingDepth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the maximum nesting depth that the parser will descend before throwing an exception
|
||||||
|
* when parsing the XML into JSONML. The default max nesting depth is 512, which means the parser
|
||||||
|
* will throw a JsonException if the maximum depth is reached.
|
||||||
|
* Using any negative value as a parameter is equivalent to setting no limit to the nesting depth,
|
||||||
|
* which means the parses will go as deep as the maximum call stack size allows.
|
||||||
|
* @param maxNestingDepth the maximum nesting depth allowed to the XML parser
|
||||||
|
* @return The existing configuration will not be modified. A new configuration is returned.
|
||||||
|
*/
|
||||||
|
public <T extends ParserConfiguration> T withMaxNestingDepth(int maxNestingDepth) {
|
||||||
|
T newConfig = (T)this.clone();
|
||||||
|
|
||||||
|
if (maxNestingDepth > UNDEFINED_MAXIMUM_NESTING_DEPTH) {
|
||||||
|
newConfig.maxNestingDepth = maxNestingDepth;
|
||||||
|
} else {
|
||||||
|
newConfig.maxNestingDepth = UNDEFINED_MAXIMUM_NESTING_DEPTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
return newConfig;
|
||||||
|
}
|
||||||
|
}
|
@ -15,17 +15,12 @@ import java.util.Set;
|
|||||||
* @author AylwardJ
|
* @author AylwardJ
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({""})
|
@SuppressWarnings({""})
|
||||||
public class XMLParserConfiguration {
|
public class XMLParserConfiguration extends ParserConfiguration {
|
||||||
/**
|
|
||||||
* Used to indicate there's no defined limit to the maximum nesting depth when parsing a XML
|
|
||||||
* document to JSON.
|
|
||||||
*/
|
|
||||||
public static final int UNDEFINED_MAXIMUM_NESTING_DEPTH = -1;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default maximum nesting depth when parsing a XML document to JSON.
|
* The default maximum nesting depth when parsing a XML document to JSON.
|
||||||
*/
|
*/
|
||||||
public static final int DEFAULT_MAXIMUM_NESTING_DEPTH = 512;
|
// public static final int DEFAULT_MAXIMUM_NESTING_DEPTH = 512; // We could override
|
||||||
|
|
||||||
/** Original Configuration of the XML Parser. */
|
/** Original Configuration of the XML Parser. */
|
||||||
public static final XMLParserConfiguration ORIGINAL
|
public static final XMLParserConfiguration ORIGINAL
|
||||||
@ -34,12 +29,6 @@ public class XMLParserConfiguration {
|
|||||||
public static final XMLParserConfiguration KEEP_STRINGS
|
public static final XMLParserConfiguration KEEP_STRINGS
|
||||||
= new XMLParserConfiguration().withKeepStrings(true);
|
= new XMLParserConfiguration().withKeepStrings(true);
|
||||||
|
|
||||||
/**
|
|
||||||
* When parsing the XML into JSON, specifies if values should be kept as strings (<code>true</code>), or if
|
|
||||||
* they should try to be guessed into JSON values (numeric, boolean, string)
|
|
||||||
*/
|
|
||||||
private boolean keepStrings;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the key in a JSON Object that indicates a CDATA section. Historically this has
|
* The name of the key in a JSON Object that indicates a CDATA section. Historically this has
|
||||||
* been the value "content" but can be changed. Use <code>null</code> to indicate no CDATA
|
* been the value "content" but can be changed. Use <code>null</code> to indicate no CDATA
|
||||||
@ -65,17 +54,12 @@ public class XMLParserConfiguration {
|
|||||||
*/
|
*/
|
||||||
private Set<String> forceList;
|
private Set<String> forceList;
|
||||||
|
|
||||||
/**
|
|
||||||
* The maximum nesting depth when parsing a XML document to JSON.
|
|
||||||
*/
|
|
||||||
private int maxNestingDepth = DEFAULT_MAXIMUM_NESTING_DEPTH;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default parser configuration. Does not keep strings (tries to implicitly convert
|
* Default parser configuration. Does not keep strings (tries to implicitly convert
|
||||||
* values), and the CDATA Tag Name is "content".
|
* values), and the CDATA Tag Name is "content".
|
||||||
*/
|
*/
|
||||||
public XMLParserConfiguration () {
|
public XMLParserConfiguration () {
|
||||||
this.keepStrings = false;
|
super();
|
||||||
this.cDataTagName = "content";
|
this.cDataTagName = "content";
|
||||||
this.convertNilAttributeToNull = false;
|
this.convertNilAttributeToNull = false;
|
||||||
this.xsiTypeMap = Collections.emptyMap();
|
this.xsiTypeMap = Collections.emptyMap();
|
||||||
@ -122,7 +106,7 @@ public class XMLParserConfiguration {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public XMLParserConfiguration (final boolean keepStrings, final String cDataTagName) {
|
public XMLParserConfiguration (final boolean keepStrings, final String cDataTagName) {
|
||||||
this.keepStrings = keepStrings;
|
super(keepStrings, DEFAULT_MAXIMUM_NESTING_DEPTH);
|
||||||
this.cDataTagName = cDataTagName;
|
this.cDataTagName = cDataTagName;
|
||||||
this.convertNilAttributeToNull = false;
|
this.convertNilAttributeToNull = false;
|
||||||
}
|
}
|
||||||
@ -141,7 +125,7 @@ public class XMLParserConfiguration {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public XMLParserConfiguration (final boolean keepStrings, final String cDataTagName, final boolean convertNilAttributeToNull) {
|
public XMLParserConfiguration (final boolean keepStrings, final String cDataTagName, final boolean convertNilAttributeToNull) {
|
||||||
this.keepStrings = keepStrings;
|
super(keepStrings, DEFAULT_MAXIMUM_NESTING_DEPTH);
|
||||||
this.cDataTagName = cDataTagName;
|
this.cDataTagName = cDataTagName;
|
||||||
this.convertNilAttributeToNull = convertNilAttributeToNull;
|
this.convertNilAttributeToNull = convertNilAttributeToNull;
|
||||||
}
|
}
|
||||||
@ -162,12 +146,11 @@ public class XMLParserConfiguration {
|
|||||||
private XMLParserConfiguration (final boolean keepStrings, final String cDataTagName,
|
private XMLParserConfiguration (final boolean keepStrings, final String cDataTagName,
|
||||||
final boolean convertNilAttributeToNull, final Map<String, XMLXsiTypeConverter<?>> xsiTypeMap, final Set<String> forceList,
|
final boolean convertNilAttributeToNull, final Map<String, XMLXsiTypeConverter<?>> xsiTypeMap, final Set<String> forceList,
|
||||||
final int maxNestingDepth) {
|
final int maxNestingDepth) {
|
||||||
this.keepStrings = keepStrings;
|
super(keepStrings, maxNestingDepth);
|
||||||
this.cDataTagName = cDataTagName;
|
this.cDataTagName = cDataTagName;
|
||||||
this.convertNilAttributeToNull = convertNilAttributeToNull;
|
this.convertNilAttributeToNull = convertNilAttributeToNull;
|
||||||
this.xsiTypeMap = Collections.unmodifiableMap(xsiTypeMap);
|
this.xsiTypeMap = Collections.unmodifiableMap(xsiTypeMap);
|
||||||
this.forceList = Collections.unmodifiableSet(forceList);
|
this.forceList = Collections.unmodifiableSet(forceList);
|
||||||
this.maxNestingDepth = maxNestingDepth;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -190,16 +173,6 @@ public class XMLParserConfiguration {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* When parsing the XML into JSON, specifies if values should be kept as strings (<code>true</code>), or if
|
|
||||||
* they should try to be guessed into JSON values (numeric, boolean, string)
|
|
||||||
*
|
|
||||||
* @return The <code>keepStrings</code> configuration value.
|
|
||||||
*/
|
|
||||||
public boolean isKeepStrings() {
|
|
||||||
return this.keepStrings;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When parsing the XML into JSON, specifies if values should be kept as strings (<code>true</code>), or if
|
* When parsing the XML into JSON, specifies if values should be kept as strings (<code>true</code>), or if
|
||||||
* they should try to be guessed into JSON values (numeric, boolean, string)
|
* they should try to be guessed into JSON values (numeric, boolean, string)
|
||||||
@ -209,10 +182,9 @@ public class XMLParserConfiguration {
|
|||||||
*
|
*
|
||||||
* @return The existing configuration will not be modified. A new configuration is returned.
|
* @return The existing configuration will not be modified. A new configuration is returned.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public XMLParserConfiguration withKeepStrings(final boolean newVal) {
|
public XMLParserConfiguration withKeepStrings(final boolean newVal) {
|
||||||
XMLParserConfiguration newConfig = this.clone();
|
return super.withKeepStrings(newVal);
|
||||||
newConfig.keepStrings = newVal;
|
|
||||||
return newConfig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -318,15 +290,6 @@ public class XMLParserConfiguration {
|
|||||||
return newConfig;
|
return newConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The maximum nesting depth that the parser will descend before throwing an exception
|
|
||||||
* when parsing the XML into JSON.
|
|
||||||
* @return the maximum nesting depth set for this configuration
|
|
||||||
*/
|
|
||||||
public int getMaxNestingDepth() {
|
|
||||||
return maxNestingDepth;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines the maximum nesting depth that the parser will descend before throwing an exception
|
* Defines the maximum nesting depth that the parser will descend before throwing an exception
|
||||||
* when parsing the XML into JSON. The default max nesting depth is 512, which means the parser
|
* when parsing the XML into JSON. The default max nesting depth is 512, which means the parser
|
||||||
@ -336,15 +299,8 @@ public class XMLParserConfiguration {
|
|||||||
* @param maxNestingDepth the maximum nesting depth allowed to the XML parser
|
* @param maxNestingDepth the maximum nesting depth allowed to the XML parser
|
||||||
* @return The existing configuration will not be modified. A new configuration is returned.
|
* @return The existing configuration will not be modified. A new configuration is returned.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public XMLParserConfiguration withMaxNestingDepth(int maxNestingDepth) {
|
public XMLParserConfiguration withMaxNestingDepth(int maxNestingDepth) {
|
||||||
XMLParserConfiguration newConfig = this.clone();
|
return super.withMaxNestingDepth(maxNestingDepth);
|
||||||
|
|
||||||
if (maxNestingDepth > UNDEFINED_MAXIMUM_NESTING_DEPTH) {
|
|
||||||
newConfig.maxNestingDepth = maxNestingDepth;
|
|
||||||
} else {
|
|
||||||
newConfig.maxNestingDepth = UNDEFINED_MAXIMUM_NESTING_DEPTH;
|
|
||||||
}
|
|
||||||
|
|
||||||
return newConfig;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -895,7 +895,36 @@ public class JSONMLTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testToJSONObjectMaxDefaultNestingDepthIsRespected() {
|
||||||
|
final String wayTooLongMalformedXML = new String(new char[6000]).replace("\0", "<a>");
|
||||||
|
|
||||||
|
try {
|
||||||
|
JSONML.toJSONObject(wayTooLongMalformedXML, JSONMLParserConfiguration.ORIGINAL);
|
||||||
|
|
||||||
|
fail("Expecting a JSONException");
|
||||||
|
} catch (JSONException e) {
|
||||||
|
assertTrue("Wrong throwable thrown: not expecting message <" + e.getMessage() + ">",
|
||||||
|
e.getMessage().startsWith("Maximum nesting depth of " + JSONMLParserConfiguration.DEFAULT_MAXIMUM_NESTING_DEPTH));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testToJSONObjectUnlimitedNestingDepthIsPossible() {
|
||||||
|
int actualDepth = JSONMLParserConfiguration.DEFAULT_MAXIMUM_NESTING_DEPTH +10;
|
||||||
|
final String deeperThanDefaultMax = new String(new char[actualDepth]).replace("\0", "<a>") +
|
||||||
|
"value" +
|
||||||
|
new String(new char[actualDepth]).replace("\0", "</a>");
|
||||||
|
|
||||||
|
try {
|
||||||
|
JSONML.toJSONObject(deeperThanDefaultMax, JSONMLParserConfiguration.ORIGINAL
|
||||||
|
.withMaxNestingDepth(JSONMLParserConfiguration.UNDEFINED_MAXIMUM_NESTING_DEPTH));
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
fail("XML document should be parsed beyond the default maximum depth if maxNestingDepth " +
|
||||||
|
"parameter is set to -1 in JSONMLParserConfiguration");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user