/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * 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 *******************************************************************************/ package org.ebayopensource.turmeric.runtime.tests.parser.json; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.util.Iterator; import java.util.List; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import org.ebayopensource.turmeric.runtime.binding.impl.parser.NamespaceConvention; import org.ebayopensource.turmeric.runtime.binding.impl.parser.ParseException; import org.ebayopensource.turmeric.runtime.binding.impl.parser.json.JSONStreamObjectNodeImpl; import org.ebayopensource.turmeric.runtime.binding.impl.parser.json.JSONStreamReadContext; import org.ebayopensource.turmeric.runtime.binding.objectnode.ObjectNode; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.DataBindingFacade; import org.junit.Test; /** * @author wdeng */ public class JSONParserTest { private static final String JSON_INPUT_WITH_NUMBER_AND_BOOLEAN = "{\"jsonns.ns\":\"http://www.ebay.com/soaframework/test/JAXBDataBinding\"," + "\"ns.MyMessage\":{\"body\":100,\"recipients\":[" + "{\"city\":-100,\"emailAddress\":1.00,\"postCode\":-1.2e+12,\"state\":true,\"streetNumber\":false}, " + "{\"city\":null,\"emailAddress\":{},\"postCode\":\"95126\",\"state\":\"CA\",\"streetNumber\":\"2245\"}" + "],\"subject\":\"Test SOA JAXB XML ser/deser\"}}\n"; private static final String JSON_INPUT_WITH_ARRAY = "{\"jsonns.ns\":\"http://www.ebay.com/soaframework/test/JAXBDataBinding\"," + "\"ns.MyMessage\":{\"body\":\"SOA SOA, SOS.\",\"recipients\":[" + "{\"city\":\"San Jose\",\"emailAddress\":\"soa@ebay.com\",\"postCode\":\"95125\",\"state\":\"CA\",\"streetNumber\":\"2145\"}, " + "{\"city\":\"San Jose\",\"emailAddress\":\"api@ebay.com\",\"postCode\":\"95126\",\"state\":\"CA\",\"streetNumber\":\"2245\"}" + "],\"subject\":\"Test SOA JAXB XML ser/deser\"}}\n"; private static final String JSON_INPUT_WITH_MAP = "{\"jsonns.ns\":\"http://www.ebay.com/soaframework/test/JAXBDataBinding\"," + "\"ns.MyMessage\":{\"body\":\"SOA SOA, SOS.\",\"recipients\":" + "{\"entry\":{\"key\":\"soa@ebay.com\",\"value\":{\"city\":\"San Jose\",\"emailAddress\":" + "\"soa@ebay.com\",\"postCode\":\"95125\",\"state\":\"CA\",\"streetNumber\":\"2145\"}}}," + "\"subject\":\"Test SOA JAXB XML ser/deser\"}}\n"; private static final String JSON_BAD_INPUT_WITH_ARRAY = "{\"jsonns:ns\":\"http://www.ebay.com/soaframework/test/JAXBDataBinding\" " + "\"ns.MyMessage\"{\"body\":\"SOA SOA, SOS.\",\"recipients\"::" + "{\"city\":\"San Jose\"\"emailAddress\":\"soa@ebay.com\",\"postCode\":\"95125\",\"state\":\"CA\",\"streetNumber\":\"2145\"}: " + "{\"city\":\"San Jose\",\"emailAddress\":\"api@ebay.com\",\"postCode\":\"95126\",\"state\":\"CA\",\"streetNumber\":\"2245\"}" + "],\"subject\":\"Test SOA JAXB XML ser/deser\"}}\n"; private static final String JSON_INPUT_FOR_BUG486468 = "{\n" + " \"jsonns.xsi\":\"http://www.w3.org/2001/XMLSchema-instance\",\n" + " \"jsonns.ns2\":\"http://www.ebay.com/test/soaframework/sample/service/message\",\n" + " \"jsonns.ns1\":\"http://www.ebay.com/test/soaframework/sample/errors\",\n" + " \"jsonns.xs\":\"http://www.w3.org/2001/XMLSchema\",\n" + " \"jsonns.sct\":\"http://www.ebayopensource.org/turmeric/common/v1/types\",\n" + " \"ns2.MyMessage\":\n" + " [\n" + " {\n" + " \"error\":\n" + " [\n" + " {\n" + " \"ErrorParameters\":\n" + " [\n" + " {\n" + " \"@ParamID\":\"Exception\",\n" + " \"Value\":\"org.ebayopensource.turmeric.runtime.tests.sample.services.message.Test1Exception\"\n" + " }\n" + " ],\n" + " \"errorClassification\":\"CustomCode\",\n" + " \"errorCode\":\"2005\",\n" + " \"longMessage\":\"Internal application error: org.ebayopensource.turmeric.runtime.tests.sample.services.message.Test1Exception: Our test1 exception\",\n" + " \"severityCode\":\"Error\",\n" + " \"shortMessage\":\"Internal application error: org.ebayopensource.turmeric.runtime.tests.sample.services.message.Test1Exception: Our test1 exception\"\n" + " }\n" + " ],\n" + " \"recipients\":\n" + " }\n" + " ]\n" + " }\n" + " ]\n" + "}\n"; private static final String JSON_INPUT_WITH_DEPTH_FIRST_ELEMENT = "{\"ns.MyMessage\":{\"body\":\"SOA SOA, SOS.\",\"recipients\":" + "{\"entry\":{\"key\":\"soa@ebay.com\",\"value\":{\"city\":\"San Jose\",\"emailAddress\":" + "\"soa@ebay.com\",\"postCode\":\"95125\",\"state\":\"CA\",\"streetNumber\":\"2145\"}}}," + "\"subject\":\"Test SOA JAXB XML ser/deser\"}," + "\"jsnns.ns\":\"http://www.ebay.com/soaframework/test/JAXBDataBinding\"}\n"; private static final String GOLD_JSON_INPUT_WITH_NUMBER_AND_BOOLEAN = "root:{\n" + " jsonns.ns:http://www.ebay.com/soaframework/test/JAXBDataBinding\n" + " ns.MyMessage:{\n" + " body:100\n" + " recipients:{\n" + " city:-100\n" + " emailAddress:1.00\n" + " postCode:-1.2e+12\n" + " state:true\n" + " streetNumber:false\n" + " }\n" + " recipients:{\n" + " city:{}\n" + " emailAddress:{}\n" + " postCode:95126\n" + " state:CA\n" + " streetNumber:2245\n" + " }\n" + " subject:Test SOA JAXB XML ser/deser\n" + " }\n" + "}\n"; private static final String GOLD_RESULT_HASHMAP = "root:{\n" + " jsonns.ns:http://www.ebay.com/soaframework/test/JAXBDataBinding\n" + " ns.MyMessage:{\n" + " body:SOA SOA, SOS.\n" + " recipients:{\n" + " entry:{\n" + " key:soa@ebay.com\n" + " value:{\n" + " city:San Jose\n" + " emailAddress:soa@ebay.com\n" + " postCode:95125\n" + " state:CA\n" + " streetNumber:2145\n" + " }\n" + " }\n" + " }\n" + " subject:Test SOA JAXB XML ser/deser\n" + " }\n" + "}\n"; private static final String GOLD_RESULT_ARRAY = "root:{\n" + " jsonns.ns:http://www.ebay.com/soaframework/test/JAXBDataBinding\n" + " ns.MyMessage:{\n" + " body:SOA SOA, SOS.\n" + " recipients:{\n" + " city:San Jose\n" + " emailAddress:soa@ebay.com\n" + " postCode:95125\n" + " state:CA\n" + " streetNumber:2145\n" + " }\n" + " recipients:{\n" + " city:San Jose\n" + " emailAddress:api@ebay.com\n" + " postCode:95126\n" + " state:CA\n" + " streetNumber:2245\n" + " }\n" + " subject:Test SOA JAXB XML ser/deser\n" + " }\n" + "}\n"; private static final String GOLD_JSON_INPUT_PAYPAL_ISSUE = "root:{\n" + "\tactionType:PAY\n" + "\tcurrencyCode:USD\n" + "\treceiverList:{\n" + "\t\treceiver:{\n" + "\t\t\tamount:1.00\n" + "\t\t\temail:seller_1288085303_biz@gmail.com\n" + "\t\t}\n" + "\t}\n" + "\treturnUrl:http://apigee.com/console/-1/handlePaypalReturn\n" + "\tcancelUrl:http://apigee.com/console/-1/handlePaypalCancel?\n" + "\trequestEnvelope:{\n" + "\t\terrorLanguage:en_US\n" + "\t\tdetailLevel:ReturnAll\n" + "\t}\n" + "}\n"; @Test public void jSONParserPayPalSpaceIssue() throws Exception { String JSON_INPUT_PAYPAL_ISSUE = "{" + " \"actionType\" : \"PAY\"," + " \"currencyCode\" : \"USD\"," + " \"receiverList\" : {" + " \"receiver\":[{\"amount\":\"1.00\",\"email\":\"seller_1288085303_biz@gmail.com\"}]" + " }," + " \"returnUrl\" : \"http://apigee.com/console/-1/handlePaypalReturn\"," + " \"cancelUrl\" : \"http://apigee.com/console/-1/handlePaypalCancel?\"," + " \"requestEnvelope\" : {\"errorLanguage\":\"en_US\", \"detailLevel\":\"ReturnAll\"}" + " }"; System.out.println("**** Starting jSONParserPayPalSpaceIssue"); System.out.println(JSON_INPUT_PAYPAL_ISSUE); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_PAYPAL_ISSUE.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); ObjectNode clone = root.cloneNode(); root.getChildNodes(); System.out.println(root.getTree()); assertEquals(GOLD_JSON_INPUT_PAYPAL_ISSUE, root.getTree()); System.out.println("**** Ending jSONParserPayPalSpaceIssue"); } @Test public void jSONParserPayPalNoSpaceIssue() throws Exception { String JSON_INPUT_PAYPAL_ISSUE = "{" + " \"actionType\": \"PAY\"," + " \"currencyCode\": \"USD\"," + " \"receiverList\" : {" + " \"receiver\":[{\"amount\":\"1.00\",\"email\":\"seller_1288085303_biz@gmail.com\"}]" + " }," + " \"returnUrl\": \"http://apigee.com/console/-1/handlePaypalReturn\"," + " \"cancelUrl\": \"http://apigee.com/console/-1/handlePaypalCancel?\"," + " \"requestEnvelope\" : {\"errorLanguage\":\"en_US\", \"detailLevel\":\"ReturnAll\"}" + " }"; System.out.println("**** Starting jSONParserPayPalSpaceIssue"); System.out.println(JSON_INPUT_PAYPAL_ISSUE); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_PAYPAL_ISSUE.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); ObjectNode clone = root.cloneNode(); root.getChildNodes(); System.out.println(root.getTree()); assertEquals(GOLD_JSON_INPUT_PAYPAL_ISSUE, root.getTree()); System.out.println("**** Ending jSONParserPayPalSpaceIssue"); } @Test public void jSONParserWithNumberAndBoolean() throws Exception { System.out.println("**** Starting jSONParserWithNumberAndBoolean"); System.out.println(JSON_INPUT_WITH_NUMBER_AND_BOOLEAN); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_NUMBER_AND_BOOLEAN.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); ObjectNode clone = root.cloneNode(); root.getChildNodes(); System.out.println(root.getTree()); assertEquals(GOLD_JSON_INPUT_WITH_NUMBER_AND_BOOLEAN, root.getTree()); // assertEquals(clone.getNodeName().getLocalPart(), root.getNodeName().getLocalPart()); System.out.println("**** Ending jSONParserWithNumberAndBoolean"); } @Test public void lazyReadJSONParserWithHashMap() throws Exception { System.out.println("**** Starting testLazyReadJSONParserWithHashMap"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); System.out.println(GOLD_RESULT_HASHMAP); System.out.println(root.toString()); assertEquals(GOLD_RESULT_HASHMAP, root.getTree()); System.out.println("**** Ending testLazyReadJSONParserWithHashMap"); } @Test public void jSONParserWithHashMap() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); ObjectNode clone = root.cloneNode(); root.getChildNodes(); assertEquals(GOLD_RESULT_HASHMAP, root.getTree()); assertEquals(clone.getNodeName().getLocalPart(), root.getNodeName().getLocalPart()); System.out.println("**** Ending testJSONParserWithHashMap"); } private static final String JSON_INPUT_WITH_PRIMATIVE_TYPE_ARRAY = "{\"MyObject\":[{\"emailAddress\":[\"dp@ebay.com\"],\"id\":[\"1000\"],\"names\":[\"Dave\",\"David\",\"D\"]}]}"; private static final String GOLD_RESULT_WITH_PRIMATIVE_TYPE_ARRAY = "root:{\n" + " MyObject:{\n" + " emailAddress:dp@ebay.com\n" + " id:1000\n" + " names:Dave\n" + " names:David\n" + " names:D\n" + " }\n" + "}\n"; @Test public void jSONParserWithPrimativeArray() throws Exception { System.out.println("**** Starting testJSONParserWithPrimativeArray"); System.out.println(JSON_INPUT_WITH_PRIMATIVE_TYPE_ARRAY); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_PRIMATIVE_TYPE_ARRAY.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); ObjectNode clone = root.cloneNode(); root.getChildNodes(); assertEquals(GOLD_RESULT_WITH_PRIMATIVE_TYPE_ARRAY, root.getTree()); assertEquals(clone.getNodeName().getLocalPart(), root.getNodeName().getLocalPart()); System.out.println("**** Ending testJSONParserWithPrimativeArray"); } @Test public void jSONParserWithPrimativeArrayOnDemand() throws Exception { System.out.println("**** Starting testJSONParserWithPrimativeArrayOnDemand"); System.out.println(JSON_INPUT_WITH_PRIMATIVE_TYPE_ARRAY); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_PRIMATIVE_TYPE_ARRAY.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); assertEquals(GOLD_RESULT_WITH_PRIMATIVE_TYPE_ARRAY, root.getTree()); System.out.println("**** Ending testJSONParserWithPrimativeArrayOnDemand"); } @Test public void jSONParserWithHashMap2() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap2"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); int numChilds = root.getChildNodesSize(); root.getChildNodes(); assertEquals("Incorrect number of children returned", 2, numChilds); System.out.println("**** Ending testJSONParserWithHashMap2"); } @Test public void jSONParserWithHashMap3() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap3"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); assertTrue("Has childrens", root.hasChildNodes()); System.out.println("**** Ending testJSONParserWithHashMap3"); } @Test public void jSONParserWithHashMap4() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap4"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); String uriNamespace = null; root.getChildNode(0); /* QName chqname = root.getChildNode(0).getNodeName();*/ List<ObjectNode> childList = root.getChildNodes(new QName(uriNamespace, "ns", "jsonns")); assertEquals("Has one child with jssonns:ns", 1, childList.size()); System.out.println("**** Ending testJSONParserWithHashMap4"); } @Test public void jSONParserWithHashMap5() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap5"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); String uriNamespace = null; root.getChildNode(0); ObjectNode cnode = root.getChildNode(new QName(uriNamespace, "ns", "jsonns"), 0); assertEquals("Has one child with jssonns:ns", "ns", cnode.getNodeName().getLocalPart()); System.out.println("**** Ending testJSONParserWithHashMap5"); } @Test public void jSONParserWithHashMap6() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap6"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); String uriNamespace = null; ObjectNode cnode = root.getChildNode(new QName(uriNamespace, "ns", "jsonns"), 0); assertEquals("Has one child with jssonns:ns", "ns", cnode.getNodeName().getLocalPart()); System.out.println("**** Ending testJSONParserWithHashMap6"); } @Test public void jSONParserWithHashMap7() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap7"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); String uriNamespace = null; /* QName chqname = root.getChildNode(0).getNodeName();*/ List<ObjectNode> childList = root.getChildNodes(new QName(uriNamespace, "ns", "jsonns")); assertEquals("Has one child with jssonns:ns", 1, childList.size()); System.out.println("**** Ending testJSONParserWithHashMap7"); } @Test public void jSONParserWithHashMap8() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap8"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_MAP.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); String uriNamespace = null; ObjectNode cnode = root.getChildNode(1); assertEquals("Has one child with jssonns:ns", "MyMessage", cnode.getNodeName().getLocalPart()); System.out.println("**** Ending testJSONParserWithHashMap8"); } @Test public void jSONParserWithHashMap9() throws Exception { System.out.println("**** Starting testJSONParserWithHashMap9"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_DEPTH_FIRST_ELEMENT.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); Iterator<ObjectNode> cnodeIter= root.getChildrenIterator(); ObjectNode cnode = cnodeIter.next(); Iterator<ObjectNode> gcnodeIter = cnode.getChildrenIterator(); gcnodeIter.next(); List<ObjectNode> ggcnode = gcnodeIter.next().getChildNodes(); List<ObjectNode> gggcnode = ggcnode.get(0).getChildNodes(); cnodeIter.next(); assertEquals("Has one child with jssonns:ns", "MyMessage", cnode.getNodeName().getLocalPart()); System.out.println("**** Ending testJSONParserWithHashMap9"); } @Test public void lazyReadJSONParserWithArray() throws Exception { System.out.println("**** Starting testLazyReadJSONParserWithArray"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_ARRAY.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); /* System.out.println("Tree: \n" + root.getTree()); System.out.println("End Tree"); */ assertEquals(GOLD_RESULT_ARRAY, root.getTree()); System.out.println("**** Ending testLazyReadJSONParserWithArray"); } @Test public void jSONParserWithArray() throws Exception { System.out.println("**** Starting testJSONParserWithArray"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_WITH_ARRAY.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); root.getChildNodes(); System.out.println("Tree: \n" + root.getTree()); System.out.println("End Tree"); assertEquals(GOLD_RESULT_ARRAY, root.getTree()); System.out.println("**** Ending testJSONParserWithArray"); } /** * @check Exceptions need to be handled */ @Test public void bUG486468() throws Exception { Exception e = null; System.out.println("**** Starting testBUG486468"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_INPUT_FOR_BUG486468.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); try { List<ObjectNode> childList = root.getChildNodes(); } catch (ParseException pe) { pe.printStackTrace(); e = pe; } catch (XMLStreamException se) { se.printStackTrace(); e = se; } assertNull(" ParseException is not expected", e); System.out.println("**** Ending testBUG486468"); } /** * @check Exceptions need to be handled */ @Test(expected=org.ebayopensource.turmeric.runtime.binding.impl.parser.ParseException.class) public void jSONParserWithBadInput1() throws Exception { System.out.println("**** Starting testJSONParserWithBadInput1"); ByteArrayInputStream is = new ByteArrayInputStream(JSON_BAD_INPUT_WITH_ARRAY.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); root.getChildNodes(); fail("ParseException not thrown as expected"); System.out.println("**** Ending testJSONParserWithBadInput1"); } /** * @check Exceptions need to be handled */ @Test(expected=org.ebayopensource.turmeric.runtime.binding.impl.parser.ParseException.class) public void jSONParserWithBadInput2() throws Exception { class MyBAInputStream extends InputStream { public MyBAInputStream(byte[] buf){ super(); } public int read() throws IOException { throw new IOException(); } public int read(byte[] b, int off, int len) throws IOException { throw new IOException(); } }; System.out.println("**** Starting testJSONParserWithBadInput2"); MyBAInputStream is = new MyBAInputStream(JSON_BAD_INPUT_WITH_ARRAY.getBytes()); NamespaceConvention convention = DataBindingFacade.createDeserializationNSConvention(null); JSONStreamReadContext ctx = new JSONStreamReadContext(is, convention, Charset.forName("ASCII")); JSONStreamObjectNodeImpl root = new JSONStreamObjectNodeImpl(ctx); root.getChildNodes(); fail("ParseException not thrown as expected"); System.out.println("**** Ending testJSONParserWithBadInput2"); } }