diff --git a/src/main/java/org/json/XMLTokener.java b/src/main/java/org/json/XMLTokener.java
index 0ecdb4f45..3bbd3824b 100644
--- a/src/main/java/org/json/XMLTokener.java
+++ b/src/main/java/org/json/XMLTokener.java
@@ -167,7 +167,7 @@ static String unescapeEntity(String e) {
// if our entity is an encoded unicode point, parse it.
if (e.charAt(0) == '#') {
int cp;
- if (e.charAt(1) == 'x') {
+ if (e.charAt(1) == 'x' || e.charAt(1) == 'X') {
// hex encoded unicode
cp = Integer.parseInt(e.substring(2), 16);
} else {
diff --git a/src/test/java/org/json/junit/Util.java b/src/test/java/org/json/junit/Util.java
index 2e8f6be93..8dc27ddfa 100644
--- a/src/test/java/org/json/junit/Util.java
+++ b/src/test/java/org/json/junit/Util.java
@@ -103,20 +103,18 @@ private static void compareActualVsExpectedObjects(Object value,
*/
if (!(value instanceof Number && expectedValue instanceof Number)) {
// Non-Number and non-matching types
- assertTrue("object types should be equal for actual: "+
- value.toString()+" ("+
- value.getClass().toString()+") expected: "+
- expectedValue.toString()+" ("+
- expectedValue.getClass().toString()+")",
- value.getClass().toString().equals(
- expectedValue.getClass().toString()));
+ assertEquals("object types should be equal ",
+ expectedValue.getClass().toString(),
+ value.getClass().toString()
+ );
}
/**
* Same types or both Numbers, compare by toString()
*/
- assertTrue("string values should be equal for actual: "+
- value.toString()+" expected: "+expectedValue.toString(),
- value.toString().equals(expectedValue.toString()));
+ assertEquals("values should be equal",
+ expectedValue.toString(),
+ value.toString()
+ );
}
}
}
diff --git a/src/test/java/org/json/junit/XMLTest.java b/src/test/java/org/json/junit/XMLTest.java
index d59496133..17fd16776 100644
--- a/src/test/java/org/json/junit/XMLTest.java
+++ b/src/test/java/org/json/junit/XMLTest.java
@@ -34,12 +34,15 @@ of this software and associated documentation files (the "Software"), to deal
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
+import org.json.JSONTokener;
import org.json.XML;
import org.json.XMLParserConfiguration;
import org.junit.Rule;
@@ -898,4 +901,57 @@ public void testToJsonWithNullWhenNilConversionDisabled() {
final JSONObject json = XML.toJSONObject(originalXml, new XMLParserConfiguration());
assertEquals(expectedJsonString, json.toString());
}
+
+ /**
+ * Tests to verify that supported escapes in XML are converted to actual values.
+ */
+ @Test
+ public void testIssue537CaseSensitiveHexEscapeMinimal(){
+ String xmlStr =
+ "\n"+
+ "Neutrophils.Hypersegmented | Bld-Ser-Plas";
+ String expectedStr =
+ "{\"root\":\"Neutrophils.Hypersegmented | Bld-Ser-Plas\"}";
+ JSONObject xmlJSONObj = XML.toJSONObject(xmlStr, true);
+ JSONObject expected = new JSONObject(expectedStr);
+ Util.compareActualVsExpectedJsonObjects(xmlJSONObj, expected);
+ }
+
+ /**
+ * Tests to verify that supported escapes in XML are converted to actual values.
+ */
+ @Test
+ public void testIssue537CaseSensitiveHexEscapeFullFile(){
+ try {
+ try(
+ InputStream xmlStream = XMLTest.class.getClassLoader().getResourceAsStream("Issue537.xml");
+ Reader xmlReader = new InputStreamReader(xmlStream);
+ ){
+ JSONObject actual = XML.toJSONObject(xmlReader, true);
+ try(
+ InputStream jsonStream = XMLTest.class.getClassLoader().getResourceAsStream("Issue537.json");
+ ){
+ final JSONObject expected = new JSONObject(new JSONTokener(jsonStream));
+ Util.compareActualVsExpectedJsonObjects(actual,expected);
+ }
+ }
+ } catch (IOException e) {
+ fail("file writer error: " +e.getMessage());
+ }
+ }
+
+ /**
+ * Tests to verify that supported escapes in XML are converted to actual values.
+ */
+ @Test
+ public void testIssue537CaseSensitiveHexUnEscapeDirect(){
+ String origStr =
+ "Neutrophils.Hypersegmented | Bld-Ser-Plas";
+ String expectedStr =
+ "Neutrophils.Hypersegmented | Bld-Ser-Plas";
+ String actualStr = XML.unescape(origStr);
+
+ assertEquals("Case insensitive Entity unescape", expectedStr, actualStr);
+ }
+
}
\ No newline at end of file
diff --git a/src/test/resources/Issue537.json b/src/test/resources/Issue537.json
new file mode 100644
index 000000000..b3c82feb1
--- /dev/null
+++ b/src/test/resources/Issue537.json
@@ -0,0 +1,189 @@
+{
+ "clinical_study": {
+ "brief_summary": {
+ "textblock": "CLEAR SYNERGY is an international multi center 2x2 randomized placebo controlled trial of"
+ },
+ "brief_title": "CLEAR SYNERGY Neutrophil Substudy",
+ "overall_status": "Recruiting",
+ "eligibility": {
+ "study_pop": {
+ "textblock": "Patients who are randomized to the drug RCT portion of the CLEAR SYNERGY (OASIS 9) trial"
+ },
+ "minimum_age": "19 Years",
+ "sampling_method": "Non-Probability Sample",
+ "gender": "All",
+ "criteria": {
+ "textblock": "Inclusion Criteria:"
+ },
+ "healthy_volunteers": "No",
+ "maximum_age": "110 Years"
+ },
+ "number_of_groups": "2",
+ "source": "NYU Langone Health",
+ "location_countries": {
+ "country": "United States"
+ },
+ "study_design_info": {
+ "time_perspective": "Prospective",
+ "observational_model": "Other"
+ },
+ "last_update_submitted_qc": "September 10, 2019",
+ "intervention_browse": {
+ "mesh_term": "Colchicine"
+ },
+ "official_title": "Studies on the Effects of Colchicine on Neutrophil Biology in Acute Myocardial Infarction: A Substudy of the CLEAR SYNERGY (OASIS 9) Trial",
+ "primary_completion_date": {
+ "type": "Anticipated",
+ "content": "February 1, 2021"
+ },
+ "sponsors": {
+ "lead_sponsor": {
+ "agency_class": "Other",
+ "agency": "NYU Langone Health"
+ },
+ "collaborator": [
+ {
+ "agency_class": "Other",
+ "agency": "Population Health Research Institute"
+ },
+ {
+ "agency_class": "NIH",
+ "agency": "National Heart, Lung, and Blood Institute (NHLBI)"
+ }
+ ]
+ },
+ "overall_official": {
+ "role": "Principal Investigator",
+ "affiliation": "NYU School of Medicine",
+ "last_name": "Binita Shah, MD"
+ },
+ "overall_contact_backup": {
+ "last_name": "Binita Shah, MD"
+ },
+ "condition_browse": {
+ "mesh_term": [
+ "Myocardial Infarction",
+ "ST Elevation Myocardial Infarction",
+ "Infarction"
+ ]
+ },
+ "overall_contact": {
+ "phone": "646-501-9648",
+ "last_name": "Fatmira Curovic",
+ "email": "fatmira.curovic@nyumc.org"
+ },
+ "responsible_party": {
+ "responsible_party_type": "Principal Investigator",
+ "investigator_title": "Assistant Professor of Medicine",
+ "investigator_full_name": "Binita Shah",
+ "investigator_affiliation": "NYU Langone Health"
+ },
+ "study_first_submitted_qc": "March 12, 2019",
+ "start_date": {
+ "type": "Actual",
+ "content": "March 4, 2019"
+ },
+ "has_expanded_access": "No",
+ "study_first_posted": {
+ "type": "Actual",
+ "content": "March 14, 2019"
+ },
+ "arm_group": [
+ {
+ "arm_group_label": "Colchicine"
+ },
+ {
+ "arm_group_label": "Placebo"
+ }
+ ],
+ "primary_outcome": {
+ "measure": "soluble L-selectin",
+ "time_frame": "between baseline and 3 months",
+ "description": "Change in soluble L-selectin between baseline and 3 mo after STEMI in the placebo vs. colchicine groups."
+ },
+ "secondary_outcome": [
+ {
+ "measure": "Other soluble markers of neutrophil activity",
+ "time_frame": "between baseline and 3 months",
+ "description": "Other markers of neutrophil activity will be evaluated at baseline and 3 months after STEMI (myeloperoxidase, matrix metalloproteinase-9, neutrophil gelatinase-associated lipocalin, neutrophil elastase, intercellular/vascular cellular adhesion molecules)"
+ },
+ {
+ "measure": "Markers of systemic inflammation",
+ "time_frame": "between baseline and 3 months",
+ "description": "Markers of systemic inflammation will be evaluated at baseline and 3 months after STEMI (high sensitive CRP, IL-1β)"
+ },
+ {
+ "measure": "Neutrophil-driven responses that may further propagate injury",
+ "time_frame": "between baseline and 3 months",
+ "description": "Neutrophil-driven responses that may further propagate injury will be evaluated at baseline and 3 months after STEMI (neutrophil extracellular traps, neutrophil-derived microparticles)"
+ }
+ ],
+ "oversight_info": {
+ "is_fda_regulated_drug": "No",
+ "is_fda_regulated_device": "No",
+ "has_dmc": "No"
+ },
+ "last_update_posted": {
+ "type": "Actual",
+ "content": "September 12, 2019"
+ },
+ "id_info": {
+ "nct_id": "NCT03874338",
+ "org_study_id": "18-01323",
+ "secondary_id": "1R01HL146206"
+ },
+ "enrollment": {
+ "type": "Anticipated",
+ "content": "670"
+ },
+ "study_first_submitted": "March 12, 2019",
+ "condition": [
+ "Neutrophils.Hypersegmented | Bld-Ser-Plas",
+ "STEMI - ST Elevation Myocardial Infarction"
+ ],
+ "study_type": "Observational",
+ "required_header": {
+ "download_date": "ClinicalTrials.gov processed this data on July 19, 2020",
+ "link_text": "Link to the current ClinicalTrials.gov record.",
+ "url": "https://clinicaltrials.gov/show/NCT03874338"
+ },
+ "last_update_submitted": "September 10, 2019",
+ "completion_date": {
+ "type": "Anticipated",
+ "content": "February 1, 2022"
+ },
+ "location": {
+ "contact": {
+ "phone": "646-501-9648",
+ "last_name": "Fatmira Curovic",
+ "email": "fatmira.curovic@nyumc.org"
+ },
+ "facility": {
+ "address": {
+ "zip": "10016",
+ "country": "United States",
+ "city": "New York",
+ "state": "New York"
+ },
+ "name": "NYU School of Medicine"
+ },
+ "status": "Recruiting",
+ "contact_backup": {
+ "last_name": "Binita Shah, MD"
+ }
+ },
+ "intervention": {
+ "intervention_type": "Drug",
+ "arm_group_label": [
+ "Colchicine",
+ "Placebo"
+ ],
+ "description": "Participants in the main CLEAR SYNERGY trial are randomized to colchicine/spironolactone versus placebo in a 2x2 factorial design. The substudy is interested in the evaluation of biospecimens obtained from patients in the colchicine vs placebo group.",
+ "intervention_name": "Colchicine Pill"
+ },
+ "patient_data": {
+ "sharing_ipd": "No"
+ },
+ "verification_date": "September 2019"
+ }
+}
\ No newline at end of file
diff --git a/src/test/resources/Issue537.xml b/src/test/resources/Issue537.xml
new file mode 100644
index 000000000..bf78f3b39
--- /dev/null
+++ b/src/test/resources/Issue537.xml
@@ -0,0 +1,169 @@
+
+
+
+
+ ClinicalTrials.gov processed this data on July 19, 2020
+ Link to the current ClinicalTrials.gov record.
+ https://clinicaltrials.gov/show/NCT03874338
+
+
+ 18-01323
+ 1R01HL146206
+ NCT03874338
+
+ CLEAR SYNERGY Neutrophil Substudy
+ Studies on the Effects of Colchicine on Neutrophil Biology in Acute Myocardial Infarction: A Substudy of the CLEAR SYNERGY (OASIS 9) Trial
+
+
+ NYU Langone Health
+ Other
+
+
+ Population Health Research Institute
+ Other
+
+
+ National Heart, Lung, and Blood Institute (NHLBI)
+ NIH
+
+
+
+
+ No
+ No
+ No
+
+
+
+ CLEAR SYNERGY is an international multi center 2x2 randomized placebo controlled trial of
+
+
+ Recruiting
+ March 4, 2019
+ February 1, 2022
+ February 1, 2021
+ Observational
+ No
+
+ Other
+ Prospective
+
+
+ soluble L-selectin
+ between baseline and 3 months
+ Change in soluble L-selectin between baseline and 3 mo after STEMI in the placebo vs. colchicine groups.
+
+
+ Other soluble markers of neutrophil activity
+ between baseline and 3 months
+ Other markers of neutrophil activity will be evaluated at baseline and 3 months after STEMI (myeloperoxidase, matrix metalloproteinase-9, neutrophil gelatinase-associated lipocalin, neutrophil elastase, intercellular/vascular cellular adhesion molecules)
+
+
+ Markers of systemic inflammation
+ between baseline and 3 months
+ Markers of systemic inflammation will be evaluated at baseline and 3 months after STEMI (high sensitive CRP, IL-1β)
+
+
+ Neutrophil-driven responses that may further propagate injury
+ between baseline and 3 months
+ Neutrophil-driven responses that may further propagate injury will be evaluated at baseline and 3 months after STEMI (neutrophil extracellular traps, neutrophil-derived microparticles)
+
+ 2
+ 670
+ Neutrophils.Hypersegmented | Bld-Ser-Plas
+ STEMI - ST Elevation Myocardial Infarction
+
+ Colchicine
+
+
+ Placebo
+
+
+ Drug
+ Colchicine Pill
+ Participants in the main CLEAR SYNERGY trial are randomized to colchicine/spironolactone versus placebo in a 2x2 factorial design. The substudy is interested in the evaluation of biospecimens obtained from patients in the colchicine vs placebo group.
+ Colchicine
+ Placebo
+
+
+
+
+ Patients who are randomized to the drug RCT portion of the CLEAR SYNERGY (OASIS 9) trial
+
+
+ Non-Probability Sample
+
+
+ Inclusion Criteria:
+
+
+ All
+ 19 Years
+ 110 Years
+ No
+
+
+ Binita Shah, MD
+ Principal Investigator
+ NYU School of Medicine
+
+
+ Fatmira Curovic
+ 646-501-9648
+ fatmira.curovic@nyumc.org
+
+
+ Binita Shah, MD
+
+
+
+ NYU School of Medicine
+
+ New York
+ New York
+ 10016
+ United States
+
+
+ Recruiting
+
+ Fatmira Curovic
+ 646-501-9648
+ fatmira.curovic@nyumc.org
+
+
+ Binita Shah, MD
+
+
+
+ United States
+
+ September 2019
+ March 12, 2019
+ March 12, 2019
+ March 14, 2019
+ September 10, 2019
+ September 10, 2019
+ September 12, 2019
+
+ Principal Investigator
+ NYU Langone Health
+ Binita Shah
+ Assistant Professor of Medicine
+
+
+
+ Myocardial Infarction
+ ST Elevation Myocardial Infarction
+ Infarction
+
+
+
+ Colchicine
+
+
+ No
+
+
+