/* * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sf.json.xml; import junit.framework.TestCase; import net.sf.json.Assertions; import net.sf.json.JSON; import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; import net.sf.json.test.JSONAssert; /** * @author Andres Almiray <aalmiray@users.sourceforge.net> */ public class TestUserSubmitted extends TestCase { public static void main( String[] args ) { junit.textui.TestRunner.run( TestUserSubmitted.class ); } public TestUserSubmitted( String name ) { super( name ); } public void testReadFromXMLToJSON_1735732() throws Exception { // bug 1735732 XMLSerializer xmlSerializer = new XMLSerializer(); JSONObject actual = (JSONObject) xmlSerializer.readFromFile( "net/sf/json/xml/1735732.xml" ); JSONObject expected = new JSONObject().element( "@xmlns:ns2", "http://schemas.foo.com/HelloWorld" ) .element( "item", new JSONObject().element( "age", "2 5" ) .element( "name", "emp1" ) ) .accumulate( "item", new JSONObject().element( "age", "2" ) .element( "name", "emp2" ) ); JSONAssert.assertEquals( expected, actual ); } public void testReadFromXMLToJSON_1739066() throws Exception { // bug 1739066 XMLSerializer xmlSerializer = new XMLSerializer(); xmlSerializer.setTrimSpaces( true ); JSONObject actual = (JSONObject) xmlSerializer.readFromFile( "net/sf/json/xml/1739066.xml" ); JSONObject expected = new JSONObject().element( "Address", "http://localhost:0/te stToString" ) .element( "@xmlns", "http://www.w3.org/2005/08/addressing" ) .element( "Metadata", new JSONObject().element( "@xmlns:wsa-wsdl", "http://www.w3.org/2006/01/wsdl-instance" ) .element( "@wsa-wsdl:wsdlLocation", "file:///b.wsdl" ) .element( "ns3:InterfaceName", new JSONObject().element( "@xmlns:tns", "http://com.iona.cxf/GreetMe" ) .element( "@xmlns:ns3", "http://www.w3.org/2005/02/addressing/wsdl" ) .element( "#text", "tns:GreetMePortType" ) ) .element( "ns3:ServiceName", new JSONObject().element( "@EndpointName", "GreetMePort" ) .element( "@xmlns:tns", "http://com.iona.cxf/GreetMe" ) .element( "@xmlns:ns3", "http://www.w3.org/2005/02/addressing/wsdl" ) .element( "#text", "tns:GreetMeService" ) ) ); JSONAssert.assertEquals( expected, actual ); } public void testIgnoreWhitespaceWhileReading() { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<ARCXML version=\"1.1\">\n" + "<RESPONSE>\n" + "<FEATURES>\n" + "<FEATURE>\n" + "<ENVELOPE minx=\"-178.216552734375\" miny=\"18.9254779815674\" maxx=\"179.775939941406\" maxy=\"71.3514404296875\"/>\n" + "<FIELDS>\n" + "<FIELD name=\"FIPS_CNTRY\" value=\"US\" />\n" + "<FIELD name=\"GMI_CNTRY\" value=\"USA\" />\n" + "<FIELD name=\"ISO_2DIGIT\" value=\"US\" />\n" + "<FIELD name=\"ISO_3DIGIT\" value=\"USA\" />\n" + "<FIELD name=\"CNTRY_NAME\" value=\"United States\" />\n" + "<FIELD name=\"LONG_NAME\" value=\"United States\" />\n" + "<FIELD name=\"SOVEREIGN\" value=\"United States\" />\n" + "<FIELD name=\"POP_CNTRY\" value=\"258833000\" />\n" + "<FIELD name=\"CURR_TYPE\" value=\"US Dollar\" />\n" + "<FIELD name=\"CURR_CODE\" value=\"USD\" />\n" + "<FIELD name=\"LANDLOCKED\" value=\"N\" />\n" + "<FIELD name=\"SQKM\" value=\"9449365\" />\n" + "<FIELD name=\"SQMI\" value=\"3648399.75\" />\n" + "<FIELD name=\"COLORMAP\" value=\"5\" />\n" + "<FIELD name=\"#SHAPE#\" value=\"[Geometry]\" />\n" + "<FIELD name=\"#ID#\" value=\"234\" />\n" + "</FIELDS>\n" + "</FEATURE>\n" + "<FEATURECOUNT count=\"1\" hasmore=\"false\" />\n" + "<ENVELOPE minx=\"-178.216552734375\" miny=\"18.9254779815674\" maxx=\"179.775939941406\" maxy=\"71.3514404296875\"/>\n" + "</FEATURES>\n" + "</RESPONSE>\n" + "</ARCXML>\n"; XMLSerializer xmlSerializer = new XMLSerializer(); xmlSerializer.setSkipWhitespace( true ); JSON json1 = xmlSerializer.read( xml ); xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<ARCXML version=\"1.1\">" + "<RESPONSE>" + "<FEATURES>" + "<FEATURE>" + "<ENVELOPE minx=\"-178.216552734375\" miny=\"18.9254779815674\" maxx=\"179.775939941406\" maxy=\"71.3514404296875\"/>" + "<FIELDS>" + "<FIELD name=\"FIPS_CNTRY\" value=\"US\" />" + "<FIELD name=\"GMI_CNTRY\" value=\"USA\" />" + "<FIELD name=\"ISO_2DIGIT\" value=\"US\" />" + "<FIELD name=\"ISO_3DIGIT\" value=\"USA\" />" + "<FIELD name=\"CNTRY_NAME\" value=\"United States\" />" + "<FIELD name=\"LONG_NAME\" value=\"United States\" />" + "<FIELD name=\"SOVEREIGN\" value=\"United States\" />" + "<FIELD name=\"POP_CNTRY\" value=\"258833000\" />" + "<FIELD name=\"CURR_TYPE\" value=\"US Dollar\" />" + "<FIELD name=\"CURR_CODE\" value=\"USD\" />" + "<FIELD name=\"LANDLOCKED\" value=\"N\" />" + "<FIELD name=\"SQKM\" value=\"9449365\" />" + "<FIELD name=\"SQMI\" value=\"3648399.75\" />" + "<FIELD name=\"COLORMAP\" value=\"5\" />" + "<FIELD name=\"#SHAPE#\" value=\"[Geometry]\" />" + "<FIELD name=\"#ID#\" value=\"234\" />" + "</FIELDS>" + "</FEATURE>" + "<FEATURECOUNT count=\"1\" hasmore=\"false\" />" + "<ENVELOPE minx=\"-178.216552734375\" miny=\"18.9254779815674\" maxx=\"179.775939941406\" maxy=\"71.3514404296875\"/>" + "</FEATURES>" + "</RESPONSE>" + "</ARCXML>"; JSON json2 = xmlSerializer.read( xml ); Assertions.assertEquals( json2, json1 ); } public void testXMLRoundtrip() { String json = "{\"entries\": [ { \"credits\": \"p1\", \"id\": 1, \"status\": true, \"text\": \"1\" }, { \"credits\": \"p2\", \"id\": 2, \"status\": true, \"text\": \"2\" } ]}"; JSONObject json1 = JSONObject.fromObject( json ); XMLSerializer xmlSerializer = new XMLSerializer(); String xml = xmlSerializer.write(json1); JSONObject json2 = (JSONObject) xmlSerializer.read( xml ); JSONAssert.assertEquals( json1, json2 ); assertTrue(json1.getJSONArray( "entries" ).getJSONObject( 0 ).get( "id" ) instanceof Integer ); assertTrue(json2.getJSONArray( "entries" ).getJSONObject( 0 ).get( "id" ) instanceof Integer ); } public void testXMLWithArraySingleElement() { String testXML = " <rate>" + " <rateBreakdown>\n" + " <rate>\n" + " <date>\n" + " <day>15</day>\n" + " <month>1</month>\n" + " <year>2007</year>\n" + " </date>\n" + " <amount>109.74</amount>\n" + " </rate>\n" + " </rateBreakdown>" + " <totalAmount>219.48</totalAmount>\n" + " </rate>"; JSON expected = JSONSerializer.toJSON("{\"rate\":{\"rateBreakdown\":[{\"amount\":\"109.74\",\"date\":{\"month\":\"1\",\"day\":\"15\",\"year\":\"2007\"}}],\"totalAmount\":\"219.48\"}}"); // rate.rateBreakdown.rate should be a single entry array. JSONObject actual = convertXML( testXML, "rate" ); assertNotNull( actual ); Assertions.assertEquals( expected, actual ); } public void testXMLWithoutArray() { String testXML = " <rate>" + " <rateBreakdown>\n" + " <rate>\n" + " <date>\n" + " <day>15</day>\n" + " <month>1</month>\n" + " <year>2007</year>\n" + " </date>\n" + " <amount>109.74</amount>\n" + " </rate>\n" + " </rateBreakdown>" + " <totalAmount>219.48</totalAmount>\n" + " </rate>"; JSON expected = JSONSerializer.toJSON("{\"rate\":{\"rateBreakdown\":{\"rate\":{\"amount\":\"109.74\",\"date\":{\"month\":\"1\",\"day\":\"15\",\"year\":\"2007\"}}},\"totalAmount\":\"219.48\"}}"); // rate.rateBreakdown.rate should be a single entry array. JSONObject actual = convertXML( testXML ); assertNotNull( actual ); Assertions.assertEquals( expected, actual ); } private JSONObject convertXML( String testXML) { JSON jsonElement = getSerializer().read( testXML ); return (JSONObject) jsonElement; } private JSONObject convertXML( String testXML, String arrayName ) { final XMLSerializer xmlSerializer = getSerializer(); xmlSerializer.setArrayName( arrayName ); JSON jsonElement = xmlSerializer.read( testXML ); return (JSONObject) jsonElement; } private XMLSerializer getSerializer() { XMLSerializer xmlSerializer = new XMLSerializer(); xmlSerializer.setSkipWhitespace( true ); xmlSerializer.setForceTopLevelObject( true ); return xmlSerializer; } }