Jettison JSON numeric values are serialized as strings issue

You can read about the initial problem here, basically all the JSON being outputted was as String values even for numeric data, which made it difficult to read those values back in.

Jettison JIRA Bug and Patch Submitted

I submitted the bug to both the Jettison and XStream bug tracking JIRA system.

  • JETTISON 32 (fixed)- MappedXMLStreamWriter quoting numeric values breaking JSON 2 Java deserialization Issue
  • XSTREAM 477 (open) - JSON JettisonMappedXmlDriver quoting numeric values breaking JSON 2 Java deserialization Issue

Solution

It looks like the issue is in the MappedXMLStreamWriter in the Jettison project. It looks like it's deep within the code that the StaxWriter.setValue(String fieldValue) which is passed up to MappedXMLStreamWriter.writeCharacters(String text).

I've created a patched version of MappedXMLStreamWriter: http://pastebin.com/f55ca6a44

Here's the call stack where MappedXMLStreamWriter is called:

Thread [main] (Suspended (breakpoint at line 882 in JSONObject))	
	JSONObject.put(String, Object) line: 882	
	MappedXMLStreamWriter.setNewValue(Object, Object) line: 121	
	MappedXMLStreamWriter.setNewValue(Object) line: 113	
	MappedXMLStreamWriter.writeCharacters(String) line: 141	
	StaxWriter.setValue(String) line: 108	
	PathTrackingWriter(WriterWrapper).setValue(String) line: 34	
	SingleValueConverterWrapper.marshal(Object, HierarchicalStreamWriter, MarshallingContext) line: 35	
	ReferenceByXPathMarshaller(AbstractReferenceMarshaller).convert(Object, Converter) line: 38	
	ReferenceByXPathMarshaller(TreeMarshaller).convertAnother(Object) line: 50	
	AnnotationReflectionConverter.marshallField(MarshallingContext, Object, Field) line: 46	
	...
	XStream.marshal(Object, HierarchicalStreamWriter, DataHolder) line: 765	
	XStream.marshal(Object, HierarchicalStreamWriter) line: 754	
	XStream.toXML(Object, Writer) line: 735	
	XStream.toXML(Object) line: 725	
	TestJsonMarshallerStandAlone$JSONMarshaller.toFormat(Object) line: 68		

So to work around this I hacked the code that tries to convert the text into either a Boolean, Long, Integer, or Double and instead of quoting it I could include it literally in the JSON output.

I tried this by changing how the MappedXMLStreamWriter.writeCharacters(String text) is implemented:

    public void writeCharacters(String text) throws XMLStreamException {
        try {
            Object convertedPrimitive = convertToJSONPrimitive(text);
            if (isJsonPrimitive(current)) {
            	//Concatenate strings
            	if(current instanceof String && convertedPrimitive instanceof String) {
            		current = current + convertedPrimitive.toString();
            	} //Overwrite other primitive type values
            	else {
            		current = convertedPrimitive;
            	}
                setNewValue(current);
            } else if (current instanceof JSONArray) {
                JSONArray arr = (JSONArray) current;
                if (arr.get(arr.length()-1).equals("")) {
                	arr.put(arr.length()-1, convertedPrimitive);
                } else {
                	arr.put(convertedPrimitive);
                }
                current = convertedPrimitive;
            }
        } catch (JSONException e) {
            throw new XMLStreamException(e);
        }
    }
    //Float, Long, Double, Boolean
    private Object convertToJSONPrimitive(String text) {
 
        Object primitive = null;
        //Attempt to convert to Integer
        try {
            primitive = Long.parseLong(text);
        } catch(Exception e) {}
        //Attempt to convert to double
        if(primitive == null) {
            try {
                primitive = Double.parseDouble(text);
            } catch(Exception e) {}            
        }
        //Attempt to convert to boolean
        if(primitive == null) {
            try {
                if(text.trim().equalsIgnoreCase("true") || text.trim().equalsIgnoreCase("false")) {
                    primitive = Boolean.parseBoolean(text);
                }
            } catch(Exception e) {}            
        }
        //By default we'll just return text
        if(primitive == null) {
            primitive = text;
        }
        return primitive;
    }

After doing that I ended up with funky incorrect JSON and I'm not sure why, for example:

"data":{"@class":"LocationEventData","location":{"x":1},"y":3.14},"z":5.199

I'm expecting:

"data":{"@class":"LocationEventData","location":{"x":1,"y":3.14,"z":5.199}}

Upon further research I was able to figure out what was going on, basically the MappedXMLStreamWriter was expecting all it's values to be instanceof String, so I just had to refactor code that checks for that to check all classes that could be JSON primitives:

    private boolean isJsonPrimitive(Object o) {
       if(     o instanceof String || 
               o instanceof Long || 
               o instanceof Double || 
               o instanceof Float || 
               o instanceof Boolean || 
               o instanceof Integer) 
       {
           return true; 
       } else {          
           return false;
       }
    }

Does anyone have a better way to modify or create an alternative MappedXMLStreamWriter so that when it reflects on the Java beans it will accept primitive field values rather than their string representation?

Patched MappedXMLStreamWriter.java

http://pastebin.com/pastebin.php?dl=f7c6c8650&.java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
		<title>Java | /**   * Copyright 2006 Envoi S - Dougnukem - f7c6c8650 - Pastebin.com</title>
		<link rel="shortcut icon" href="/favicon.ico" />
		<link href="/i/style.css?19" rel="stylesheet" type="text/css" />
								<link rel="canonical" href="http://pastebin.com/f7c6c8650" />
		<script type="text/javascript" src="/i/basic.js?7"></script>
		<!--[if lte IE 6]>
			<link href="/i/ie6.css" media="screen" rel="Stylesheet" type="text/css" />
		<![endif]-->
	</head>
	<body>
 
<!--[if lte IE 6]>
    <table border="0" cellpadding="0" cellspacing="0" width="100%">
        <tr>
            <td>
<![endif]-->
		<div id="container">
			<div id="header">
				<div id="header_logo" title="Make New Paste!" onclick="location.href='/index'"></div>
				<div id="header_frame">
					<div id="hf1"><a href="/">pastebin.com</a></div>
					<div id="hf2">#1 paste tool since 2002</div>
				</div>				
				<div id="header_menu">
					<ul id="nav">
						<li class="active"><a href="/">new</a></li>
						<li><a href="/archive/1">archive</a></li>
						<li><a href="/help">help</a></li>
						<li><a href="/api.php">API</a></li>
					</ul>
				</div>
				<div id="header_firefox" title="Get Our Firefox Add-on" onclick="location.href='/tools_firefox.php'"></div>
				<div id="header_chrome" title="Get Our Chrome Extension" onclick="location.href='/tools_chrome.php'"></div>
				<div id="header_twitter" title="Follow Us At Twitter" onclick="location.href='http://www.twitter.com/pastebincom'"></div>
				<div id="header_search">
					<form class="search_form" name="search_form" method="get" action="/search" id="cse-search-box">
					    <input type="hidden" name="cx" value="013305635491195529773:t-lahnuezfu" />
						<input type="hidden" name="cof" value="FORID:10" />
						<input type="hidden" name="ie" value="UTF-8" />
						<input class="search_input" type="text" name="q" size="5" value="search..." onfocus="this.value=''" /><input class="search_button" src="/i/dot.gif" alt="Search..." type="image" value="Search" name="sa" />
					</form>
				</div>
			</div>
			<div id="content_frame">
				<div id="content_left">
		<div style="padding-bottom: 5px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fpastebin.com&amp;layout=button_count&amp;show_faces=false&amp;width=160&amp;action=like&amp;font=trebuchet%2Bms&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:160px; height:21px;" allowTransparency="true"></iframe>
</div>
<div style="padding-bottom: 5px;">
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://pastebin.com" data-text="Pastebin.com - #1 paste tool since 2002" data-count="horizontal" data-via="pastebincom">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>		
 
		<div class="content_left_title">Recent Posts</div>
		<div class="content_left_box">
 
			<div class="clb_top"><a href="http://pastebin.com/kR6T38Dv">Anonymous</a></div>
			<div class="clb_bottom"><span>None</span> | 44 sec ago</div>		
 
			<div class="clb_top"><a href="http://pastebin.com/E7SQB4iz">Anonymous</a></div>
			<div class="clb_bottom"><span>None</span> | 1 min ago</div>		
 
			<div class="clb_top"><a href="http://pastebin.com/zpfzxKAJ">Anonymous</a></div>
			<div class="clb_bottom"><span>None</span> | 1 min ago</div>		
 
			<div class="clb_top"><a href="http://pastebin.com/v7nFmQQt">Anonymous</a></div>
			<div class="clb_bottom"><span>None</span> | 1 min ago</div>		
 
			<div class="clb_top"><a href="http://pastebin.com/Q4ARhqhq">Anonymous</a></div>
			<div class="clb_bottom"><span>None</span> | 1 min ago</div>		
 
			<div class="clb_top"><a href="http://trisquel.pastebin.com/GtP6TeDR">compilation error</a></div>
			<div class="clb_bottom"><span>None</span> | 1 min ago</div>		
 
			<div class="clb_top"><a href="http://pastebin.com/CD4sdG5V">Lolischok</a></div>
			<div class="clb_bottom"><span>None</span> | 1 min ago</div>		
 
			<div class="clb_top"><a href="http://pastebin.com/0zjLqJaA">Anonymous</a></div>
			<div class="clb_bottom"><span>Perl</span> | 2 min ago</div>		
				</div>
		<div style="padding: 0 0 10px 0;"><script type="text/javascript"><!--
		google_ad_client = "pub-2685581636438141";
		/* Pastebin 160x600 */
		google_ad_slot = "1733013946";
		google_ad_width = 160;
		google_ad_height = 600;
		//-->
		</script>
		<script type="text/javascript"
		src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
		</script>
		</div>
 
		<div class="content_left_title">What is pastebin?</div>
		<div class="content_left_box">
			Pastebin is a website that hosts all your text &amp; code on dedicated servers for easy sharing.<br /><a href="/help" class="arrow">learn more...</a>
		</div>
 
	<div class="content_left_title">Domain Reports</div>
	<div class="content_left_box"><a href="http://pastebin.com/d/gleeepisode.com" class="arrow">Gleeepisode.com</a><br /><a href="http://pastebin.com/d/auto-guides.info" class="arrow">Auto-guides.info</a><br /><a href="http://pastebin.com/d/karaokeslam.de" class="arrow">Karaokeslam.de</a><br /><a href="http://pastebin.com/d/kesehatangigi.blogspot.com" class="arrow">Kesehatangigi.blog...</a><br /><a href="http://pastebin.com/d/plcsexshop.com" class="arrow">Plcsexshop.com</a><br /><a href="http://pastebin.com/d/animearth.com" class="arrow">Animearth.com</a><br /><a href="http://pastebin.com/d/bigtvconnect1.co.in" class="arrow">Bigtvconnect1.co.in</a><br /><a href="http://pastebin.com/d/reklampanelim.com" class="arrow">Reklampanelim.com</a><br /><a href="http://pastebin.com/d/montanagroup.com" class="arrow">Montanagroup.com</a><br /><a href="http://pastebin.com/d/cujosinc.com" class="arrow">Cujosinc.com</a><br /></div>		<div class="change_color" onclick="location.href='/change.php'"></div>
		<div><script type="text/javascript" src="http://www.sitereport.org/js/whoisonline.js"></script><script type="text/javascript">whoisonline_1('iy13HYeT')</script></div>
	</div>
	<div id="content_right">
	<div id="adblock"><script type="text/javascript"><!--
google_ad_client = "pub-2685581636438141";
/* Pastebin 728x90 */
google_ad_slot = "9405574217";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
 
		<div class="notice">
			<span class="content_box_left">Please check out our new and improved <a href="/tools_firefox.php"><b>Firefox Add-on</b></a>.</span>
			<span class="content_box_right"><a href="/hide.php">hide message</a></span>
		</div>
	<div class="content_box">
		<span class="content_box_left"><b>By dougnukem on the 11th of Feb 2008 01:04:03 AM</b></span>
		<span class="content_box_right">
			<a href="/download.php?i=f7c6c8650" rel="nofollow">Download</a> | 
			<a href="/raw.php?i=f7c6c8650" target="_blank" rel="nofollow">Raw</a> | 
			<a href="/embed.php?i=f7c6c8650" rel="nofollow">Embed</a> | 
			<a href="/report.php?i=f7c6c8650" rel="nofollow">Report</a>
 
		</span>
	</div>
	<div id="code_frame"><style type="text/css">/**
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 */
.java .de1, .java .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.java  {font-family:monospace;}
.java .imp {font-weight: bold; color: red;}
.java li, .java .li1 {background: #ffffff;}
.java .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.java .li2 {background: #f8f8f8;}
.java .kw1 {color: #000000; font-weight: bold;}
.java .kw2 {color: #000066; font-weight: bold;}
.java .kw3 {color: #003399;}
.java .kw4 {color: #000066; font-weight: bold;}
.java .co1 {color: #666666; font-style: italic;}
.java .co2 {color: #006699;}
.java .co3 {color: #008000; font-style: italic; font-weight: bold;}
.java .coMULTI {color: #666666; font-style: italic;}
.java .es0 {color: #000099; font-weight: bold;}
.java .br0 {color: #009900;}
.java .sy0 {color: #339933;}
.java .st0 {color: #0000ff;}
.java .nu0 {color: #cc66cc;}
.java .me1 {color: #006633;}
.java .me2 {color: #006633;}
.java span.xtra { display:block; }
</style><div class="java" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="co3">/**</span></div></li>
<li class="li2"><div class="de2"><span class="co3">&nbsp;* Copyright 2006 Envoi Solutions LLC</span></div></li>
<li class="li1"><div class="de1"><span class="co3">&nbsp;* </span></div></li>
<li class="li2"><div class="de2"><span class="co3">&nbsp;* Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div></li>
<li class="li1"><div class="de1"><span class="co3">&nbsp;* you may not use this file except in compliance with the License.</span></div></li>
<li class="li2"><div class="de2"><span class="co3">&nbsp;* You may obtain a copy of the License at</span></div></li>
<li class="li1"><div class="de1"><span class="co3">&nbsp;*</span></div></li>
<li class="li2"><div class="de2"><span class="co3">&nbsp;* &nbsp; &nbsp; http://www.apache.org/licenses/LICENSE-2.0</span></div></li>
<li class="li1"><div class="de1"><span class="co3">&nbsp;*</span></div></li>
<li class="li2"><div class="de2"><span class="co3">&nbsp;* Unless required by applicable law or agreed to in writing, software</span></div></li>
<li class="li1"><div class="de1"><span class="co3">&nbsp;* distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div></li>
<li class="li2"><div class="de2"><span class="co3">&nbsp;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div></li>
<li class="li1"><div class="de1"><span class="co3">&nbsp;* See the License for the specific language governing permissions and</span></div></li>
<li class="li2"><div class="de2"><span class="co3">&nbsp;* limitations under the License.</span></div></li>
<li class="li1"><div class="de1"><span class="co3">&nbsp;*/</span></div></li>
<li class="li2"><div class="de2"><span class="kw1">package</span> <span class="co2">org.codehaus.jettison.mapped</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="kw1">import</span> <span class="co2">java.io.IOException</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">import</span> <span class="co2">java.io.Writer</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="kw1">import</span> <span class="co2">javax.xml.namespace.NamespaceContext</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="kw1">import</span> <span class="co2">javax.xml.stream.XMLStreamException</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="kw1">import</span> <span class="co2">org.codehaus.jettison.AbstractXMLStreamWriter</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">import</span> <span class="co2">org.codehaus.jettison.json.JSONArray</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="kw1">import</span> <span class="co2">org.codehaus.jettison.json.JSONException</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">import</span> <span class="co2">org.codehaus.jettison.json.JSONObject</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="kw1">import</span> <span class="co2">org.codehaus.jettison.util.FastStack</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="kw1">public</span> <span class="kw1">class</span> MappedXMLStreamWriter <span class="kw1">extends</span> AbstractXMLStreamWriter <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; MappedNamespaceConvention convention<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; JSONObject root<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> current<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Awriter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Writer</span></a> writer<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; FastStack nodes <span class="sy0">=</span> <span class="kw1">new</span> FastStack<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> currentKey<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> depth <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; NamespaceContext ctx <span class="sy0">=</span> <span class="kw1">new</span> NullNamespaceContext<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> MappedXMLStreamWriter<span class="br0">&#40;</span>MappedNamespaceConvention convention, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Awriter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Writer</span></a> writer<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">super</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">convention</span> <span class="sy0">=</span> convention<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">writer</span> <span class="sy0">=</span> writer<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> close<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> flush<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> NamespaceContext getNamespaceContext<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> ctx<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> getPrefix<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// TODO Auto-generated method stub</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">null</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> getProperty<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0<span class="br0">&#41;</span> <span class="kw1">throws</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aillegalargumentexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IllegalArgumentException</span></a> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// TODO Auto-generated method stub</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">null</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> setDefaultNamespace<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// TODO Auto-generated method stub</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> setNamespaceContext<span class="br0">&#40;</span>NamespaceContext context<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">ctx</span> <span class="sy0">=</span> context<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> setPrefix<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg1<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeAttribute<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> p, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> ns, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> local, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> value<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>convention.<span class="me1">isElement</span><span class="br0">&#40;</span>p, ns, local<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; writeStartElement<span class="br0">&#40;</span>p, local, ns<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; writeCharacters<span class="br0">&#40;</span>value<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; writeEndElement<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> key <span class="sy0">=</span> convention.<span class="me1">createAttributeKey</span><span class="br0">&#40;</span>p, ns, local<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; makeCurrentJSONObject<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> o <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>JSONObject<span class="br0">&#41;</span> current<span class="br0">&#41;</span>.<span class="me1">opt</span><span class="br0">&#40;</span>key<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>o <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="br0">&#40;</span>JSONObject<span class="br0">&#41;</span> current<span class="br0">&#41;</span>.<span class="me1">put</span><span class="br0">&#40;</span>key, value<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>JSONException e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw1">new</span> XMLStreamException<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">void</span> makeCurrentJSONObject<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> JSONException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>current.<span class="me1">equals</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONObject newCurrent <span class="sy0">=</span> <span class="kw1">new</span> JSONObject<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setNewValue<span class="br0">&#40;</span>newCurrent<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> newCurrent<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nodes.<span class="me1">push</span><span class="br0">&#40;</span>newCurrent<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">void</span> setNewValue<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> newCurrent<span class="br0">&#41;</span> <span class="kw1">throws</span> JSONException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>isJsonPrimitive<span class="br0">&#40;</span>current<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setNewValue<span class="br0">&#40;</span>newCurrent, nodes.<span class="me1">peek</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setNewValue<span class="br0">&#40;</span>newCurrent, current<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">void</span> setNewValue<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> newCurrent, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> node<span class="br0">&#41;</span> <span class="kw1">throws</span> JSONException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>node <span class="kw1">instanceof</span> JSONObject<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="br0">&#40;</span>JSONObject<span class="br0">&#41;</span> node<span class="br0">&#41;</span>.<span class="me1">put</span><span class="br0">&#40;</span>currentKey, newCurrent<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>node <span class="kw1">instanceof</span> JSONArray<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONArray arr <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>JSONArray<span class="br0">&#41;</span> node<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr.<span class="me1">put</span><span class="br0">&#40;</span>arr.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-</span> 1, newCurrent<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> newCurrent<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeAttribute<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> ns, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> local, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> value<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; writeAttribute<span class="br0">&#40;</span><span class="kw2">null</span>, ns, local, value<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeAttribute<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> local, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> value<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; writeAttribute<span class="br0">&#40;</span><span class="kw2">null</span>, local, value<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeCharacters<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> text<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> convertedPrimitive <span class="sy0">=</span> convertToJSONPrimitive<span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>isJsonPrimitive<span class="br0">&#40;</span>current<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Concatenate strings</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>current <span class="kw1">instanceof</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> <span class="sy0">&amp;&amp;</span> convertedPrimitive <span class="kw1">instanceof</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> current <span class="sy0">+</span> convertedPrimitive.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="co1">//Overwrite other primitive type values</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> convertedPrimitive<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setNewValue<span class="br0">&#40;</span>current<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>current <span class="kw1">instanceof</span> JSONArray<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONArray arr <span class="sy0">=</span> <span class="br0">&#40;</span>JSONArray<span class="br0">&#41;</span> current<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>arr.<span class="me1">get</span><span class="br0">&#40;</span>arr.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">equals</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr.<span class="me1">put</span><span class="br0">&#40;</span>arr.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-</span>1, convertedPrimitive<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr.<span class="me1">put</span><span class="br0">&#40;</span>convertedPrimitive<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> convertedPrimitive<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>JSONException e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw1">new</span> XMLStreamException<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="co1">//Float, Long, Double, Boolean</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">private</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> convertToJSONPrimitive<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> text<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> primitive <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Attempt to convert to Integer</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; primitive <span class="sy0">=</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Along+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Long</span></a>.<span class="me1">parseLong</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span><span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Attempt to convert to double</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>primitive <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; primitive <span class="sy0">=</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adouble+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Double</span></a>.<span class="me1">parseDouble</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span><span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Attempt to convert to boolean</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>primitive <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>text.<span class="me1">trim</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">equalsIgnoreCase</span><span class="br0">&#40;</span><span class="st0">&quot;true&quot;</span><span class="br0">&#41;</span> <span class="sy0">||</span> text.<span class="me1">trim</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">equalsIgnoreCase</span><span class="br0">&#40;</span><span class="st0">&quot;false&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; primitive <span class="sy0">=</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aboolean+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Boolean</span></a>.<span class="me1">parseBoolean</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span><span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//By default we'll just return text</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>primitive <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; primitive <span class="sy0">=</span> text<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> primitive<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeComment<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeDefaultNamespace<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> ns<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// TODO</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeDTD<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// TODO Auto-generated method stub</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeEndDocument<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root.<span class="me1">write</span><span class="br0">&#40;</span>writer<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; writer.<span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>JSONException e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw1">new</span> XMLStreamException<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw1">new</span> XMLStreamException<span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeEndElement<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>isJsonPrimitive<span class="br0">&#40;</span>current<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> nodes.<span class="me1">peek</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>nodes.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> 1 <span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> isArray <span class="sy0">=</span> nodes.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> nodes.<span class="me1">peek</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>current <span class="kw1">instanceof</span> JSONArray <span class="sy0">||</span> isArray <span class="kw1">instanceof</span> JSONArray<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nodes.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> nodes.<span class="me1">peek</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; depth<span class="sy0">--;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeEntityRef<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeNamespace<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg1<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeProcessingInstruction<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg1<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeProcessingInstruction<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> arg0<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeStartDocument<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> writeStartElement<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> prefix, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> local, <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> ns<span class="br0">&#41;</span> <span class="kw1">throws</span> XMLStreamException <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; depth<span class="sy0">++;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>current <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root <span class="sy0">=</span> <span class="kw1">new</span> JSONObject<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> root<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nodes.<span class="me1">push</span><span class="br0">&#40;</span>root<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; makeCurrentJSONObject<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; currentKey <span class="sy0">=</span> convention.<span class="me1">createKey</span><span class="br0">&#40;</span>prefix, ns, local<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>current <span class="kw1">instanceof</span> JSONArray<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONArray array <span class="sy0">=</span> <span class="br0">&#40;</span>JSONArray<span class="br0">&#41;</span>current<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>array.<span class="me1">get</span><span class="br0">&#40;</span>array.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">equals</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONObject newNode <span class="sy0">=</span> <span class="kw1">new</span> JSONObject<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newNode.<span class="me1">put</span><span class="br0">&#40;</span>currentKey, <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setNewValue<span class="br0">&#40;</span>newNode<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nodes.<span class="me1">push</span><span class="br0">&#40;</span>newNode<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>array.<span class="me1">get</span><span class="br0">&#40;</span>array.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-</span> 1<span class="br0">&#41;</span> <span class="kw1">instanceof</span> JSONObject<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nodes.<span class="me1">push</span><span class="br0">&#40;</span>array<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> o <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>JSONObject<span class="br0">&#41;</span> current<span class="br0">&#41;</span>.<span class="me1">opt</span><span class="br0">&#40;</span>currentKey<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// hack to support nested arrays</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>o <span class="sy0">==</span> <span class="kw2">null</span> <span class="sy0">&amp;&amp;</span> nodes.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> 2<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> next <span class="sy0">=</span> nodes.<span class="me1">get</span><span class="br0">&#40;</span>nodes.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">-</span> 2<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>next <span class="kw1">instanceof</span> JSONObject<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> maybe <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>JSONObject<span class="br0">&#41;</span>next<span class="br0">&#41;</span>.<span class="me1">opt</span><span class="br0">&#40;</span>currentKey<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>maybe <span class="sy0">!=</span> <span class="kw2">null</span> <span class="sy0">&amp;&amp;</span> maybe <span class="kw1">instanceof</span> JSONObject<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; o <span class="sy0">=</span> maybe<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nodes.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> nodes.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>o <span class="kw1">instanceof</span> JSONObject <span class="sy0">||</span> isJsonPrimitive<span class="br0">&#40;</span>o<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONArray arr <span class="sy0">=</span> <span class="kw1">new</span> JSONArray<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr.<span class="me1">put</span><span class="br0">&#40;</span>o<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setNewValue<span class="br0">&#40;</span>arr<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> arr<span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nodes.<span class="me1">push</span><span class="br0">&#40;</span>arr<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>o <span class="kw1">instanceof</span> JSONArray<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="br0">&#40;</span>JSONArray<span class="br0">&#41;</span> o<span class="br0">&#41;</span>.<span class="me1">put</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nodes.<span class="me1">push</span><span class="br0">&#40;</span>o<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setNewValue<span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>JSONException e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw1">new</span> XMLStreamException<span class="br0">&#40;</span><span class="st0">&quot;Could not write start element!&quot;</span>, e<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">boolean</span> isJsonPrimitive<span class="br0">&#40;</span><a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> o<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span> &nbsp; &nbsp; o <span class="kw1">instanceof</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> <span class="sy0">||</span> </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;o <span class="kw1">instanceof</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Along+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Long</span></a> <span class="sy0">||</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;o <span class="kw1">instanceof</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adouble+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Double</span></a> <span class="sy0">||</span> </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;o <span class="kw1">instanceof</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afloat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Float</span></a> <span class="sy0">||</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;o <span class="kw1">instanceof</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aboolean+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Boolean</span></a> <span class="sy0">||</span> </div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;o <span class="kw1">instanceof</span> <a rel="nofollow" href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a><span class="br0">&#41;</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw2">true</span><span class="sy0">;</span> </div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
</ol></div>
	</div>
	<div class="content_box">
		<span class="content_box_left"><b>Submit a correction or amendment below.</b> </span>
		<span class="content_box_right">[ <a href="/f55ca6a44">previous version</a> ] | [ <a href="/diff.php?i=f7c6c8650">difference</a> ] | <a href="/">Make A New Post</a></span>
	</div>	
	<form class="paste_form" name="paste_form" method="post" action="/post.php">
		<input name="submit" value="submit" type="hidden" />
		<input name="paste_parent_key" value="f7c6c8650" type="hidden" />
		<input name="paste_subdomain" value="" type="hidden" />
		<textarea cols="5" rows="5" name="paste_code" onkeydown="return catchTab(this,event)" class="paste_textarea">/**
 * Copyright 2006 Envoi Solutions LLC
 * 
 * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
 * 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 &quot;AS IS&quot; 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 org.codehaus.jettison.mapped;
 
import java.io.IOException;
import java.io.Writer;
 
import javax.xml.namespace.NamespaceContext;
import javax.xml.stream.XMLStreamException;
 
import org.codehaus.jettison.AbstractXMLStreamWriter;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.codehaus.jettison.util.FastStack;
 
public class MappedXMLStreamWriter extends AbstractXMLStreamWriter {
    MappedNamespaceConvention convention;
    JSONObject root;
    Object current;
    Writer writer;
    FastStack nodes = new FastStack();
    String currentKey;
    int depth = 0;
    NamespaceContext ctx = new NullNamespaceContext();
 
    public MappedXMLStreamWriter(MappedNamespaceConvention convention, Writer writer) {
        super();
        this.convention = convention;
        this.writer = writer;
    }
 
    public void close() throws XMLStreamException {
 
    }
 
    public void flush() throws XMLStreamException {
 
    }
 
    public NamespaceContext getNamespaceContext() {
        return ctx;
    }
 
    public String getPrefix(String arg0) throws XMLStreamException {
        // TODO Auto-generated method stub
        return null;
    }
 
    public Object getProperty(String arg0) throws IllegalArgumentException {
        // TODO Auto-generated method stub
        return null;
    }
 
    public void setDefaultNamespace(String arg0) throws XMLStreamException {
        // TODO Auto-generated method stub
 
    }
 
    public void setNamespaceContext(NamespaceContext context) throws XMLStreamException {
        this.ctx = context;
    }
 
    public void setPrefix(String arg0, String arg1) throws XMLStreamException {
 
    }
 
    public void writeAttribute(String p, String ns, String local, String value) throws XMLStreamException {
        if (convention.isElement(p, ns, local)) {
            writeStartElement(p, local, ns);
            writeCharacters(value);
            writeEndElement();
            return;
        }
 
        String key = convention.createAttributeKey(p, ns, local);
        try {
            makeCurrentJSONObject();
 
            Object o = ((JSONObject) current).opt(key);
            if (o == null) {
                ((JSONObject) current).put(key, value);
            }
        } catch (JSONException e) {
            throw new XMLStreamException(e);
        }
    }
 
    private void makeCurrentJSONObject() throws JSONException {
        if (current.equals(&quot;&quot;)) {
            JSONObject newCurrent = new JSONObject();
            setNewValue(newCurrent);
            current = newCurrent;
            nodes.push(newCurrent);
        }
    }
 
    private void setNewValue(Object newCurrent) throws JSONException {
        if (isJsonPrimitive(current)) {
            setNewValue(newCurrent, nodes.peek());
        } else {
            setNewValue(newCurrent, current);
        }
    }
 
    private void setNewValue(Object newCurrent, Object node) throws JSONException {
        if (node instanceof JSONObject) {
            ((JSONObject) node).put(currentKey, newCurrent);
        } else if (node instanceof JSONArray) {
            JSONArray arr = ((JSONArray) node);
            arr.put(arr.length() - 1, newCurrent);
        }
        current = newCurrent;
    }
 
    public void writeAttribute(String ns, String local, String value) throws XMLStreamException {
        writeAttribute(null, ns, local, value);
    }
 
    public void writeAttribute(String local, String value) throws XMLStreamException {
        writeAttribute(null, local, value);
    }
 
    public void writeCharacters(String text) throws XMLStreamException {
        try {
            Object convertedPrimitive = convertToJSONPrimitive(text);
            if (isJsonPrimitive(current)) {
            	//Concatenate strings
            	if(current instanceof String &amp;&amp; convertedPrimitive instanceof String) {
            		current = current + convertedPrimitive.toString();
            	} //Overwrite other primitive type values
            	else {
            		current = convertedPrimitive;
            	}
                setNewValue(current);
            } else if (current instanceof JSONArray) {
                JSONArray arr = (JSONArray) current;
                if (arr.get(arr.length()-1).equals(&quot;&quot;)) {
                	arr.put(arr.length()-1, convertedPrimitive);
                } else {
                	arr.put(convertedPrimitive);
                }
                current = convertedPrimitive;
            }
        } catch (JSONException e) {
            throw new XMLStreamException(e);
        }
    }
    //Float, Long, Double, Boolean
    private Object convertToJSONPrimitive(String text) {
 
        Object primitive = null;
        //Attempt to convert to Integer
        try {
            primitive = Long.parseLong(text);
        } catch(Exception e) {}
        //Attempt to convert to double
        if(primitive == null) {
            try {
                primitive = Double.parseDouble(text);
            } catch(Exception e) {}            
        }
        //Attempt to convert to boolean
        if(primitive == null) {
            try {
                if(text.trim().equalsIgnoreCase(&quot;true&quot;) || text.trim().equalsIgnoreCase(&quot;false&quot;)) {
                    primitive = Boolean.parseBoolean(text);
                }
            } catch(Exception e) {}            
        }
        //By default we'll just return text
        if(primitive == null) {
            primitive = text;
        }
        return primitive;
    }
 
    public void writeComment(String arg0) throws XMLStreamException {
    }
 
    public void writeDefaultNamespace(String ns) throws XMLStreamException {
        // TODO
    }
 
    public void writeDTD(String arg0) throws XMLStreamException {
        // TODO Auto-generated method stub
 
    }
 
    public void writeEndDocument() throws XMLStreamException {
        try {
            root.write(writer);
            writer.flush();
        } catch (JSONException e) {
            throw new XMLStreamException(e);
        } catch (IOException e) {
            throw new XMLStreamException(e);
        }
    }
 
    public void writeEndElement() throws XMLStreamException {
        if (isJsonPrimitive(current)) {
            current = nodes.peek();
        } else if (nodes.size() &gt; 1 ) {
            Object isArray = nodes.pop();
            current = nodes.peek();
            if (current instanceof JSONArray || isArray instanceof JSONArray) {
                nodes.pop();
                current = nodes.peek();
            }
        }
        depth--;
    }
 
    public void writeEntityRef(String arg0) throws XMLStreamException {
    }
 
    public void writeNamespace(String arg0, String arg1) throws XMLStreamException {
    }
 
    public void writeProcessingInstruction(String arg0, String arg1) throws XMLStreamException {
    }
 
    public void writeProcessingInstruction(String arg0) throws XMLStreamException {
    }
 
    public void writeStartDocument() throws XMLStreamException {
    }
 
    public void writeStartElement(String prefix, String local, String ns) throws XMLStreamException {
        depth++;
 
        try {
            if (current == null) {
                root = new JSONObject();
                current = root;
                nodes.push(root);
            } else {
                makeCurrentJSONObject(); 
            }
 
            currentKey = convention.createKey(prefix, ns, local);
            if (current instanceof JSONArray) {
            	JSONArray array = (JSONArray)current;
            	if (array.get(array.length()-1).equals(&quot;&quot;)) {             	
            		JSONObject newNode = new JSONObject();
            		newNode.put(currentKey, &quot;&quot;);
            		setNewValue(newNode);
            		nodes.push(newNode);
            		current = &quot;&quot;;
            	} else {
            		if (array.get(array.length() - 1) instanceof JSONObject) {
            			array.put(&quot;&quot;);
            			nodes.push(array);
            		}
            	}
            } else {
                Object o = ((JSONObject) current).opt(currentKey);
                // hack to support nested arrays
                if (o == null &amp;&amp; nodes.size() &gt; 2) {
                	Object next = nodes.get(nodes.size() - 2);
                	if (next instanceof JSONObject) {
                		Object maybe = ((JSONObject)next).opt(currentKey);
                		if (maybe != null &amp;&amp; maybe instanceof JSONObject) {
                			o = maybe;
                			nodes.pop();
                			current = nodes.pop();               			
                		}
 
                	}
                }
                if (o instanceof JSONObject || isJsonPrimitive(o)) {
                    JSONArray arr = new JSONArray();
                    arr.put(o);
                    arr.put(&quot;&quot;);
                    setNewValue(arr);
                    current = arr;
                    nodes.push(arr);
                } else if (o instanceof JSONArray) {
                    current = &quot;&quot;;
                    ((JSONArray) o).put(&quot;&quot;);
                    nodes.push(o);
                } else {
                    setNewValue(&quot;&quot;);
                    current = &quot;&quot;;
                }
            }
        } catch (JSONException e) {
            throw new XMLStreamException(&quot;Could not write start element!&quot;, e);
        }
    }
 
    private boolean isJsonPrimitive(Object o) {
       if(     o instanceof String || 
               o instanceof Long || 
               o instanceof Double || 
               o instanceof Float || 
               o instanceof Boolean || 
               o instanceof Integer) 
       {
           return true; 
       } else {          
           return false;
       }
    }
}</textarea>
		<div class="form_info">To highlight particular lines, prefix each line with @h@</div>
		<div class="form_frame">
			<div class="form_left">
				Syntax highlighting:
			</div>
			<div class="form_right">
				<select class="post_select" name="paste_format"><option value="8">Bash</option><option value="9">C</option><option value="13">C++</option><option value="16">CSS</option><option value="25">HTML</option><option value="27">Java</option><option value="28">JavaScript</option><option value="30">Lua</option><option value="1">None</option><option value="40">Perl</option><option value="41">PHP</option><option value="42">Python</option><option value="67">Rails</option><option value="0">----------------------------</option><option value="73">ABAP</option><option value="2">ActionScript</option><option value="74">ActionScript 3</option><option value="3">Ada</option><option value="4">Apache Log</option><option value="5">AppleScript</option><option value="75">APT Sources</option><option value="6">ASM (NASM)</option><option value="7">ASP</option><option value="54">AutoIt</option><option value="76">Avisynth</option><option value="8">Bash</option><option value="77">Basic4GL</option><option value="78">BibTeX</option><option value="55">Blitz Basic</option><option value="56">BNF</option><option value="80">BOO</option><option value="79">BrainFuck</option><option value="9">C</option><option value="10">C for Macs</option><option value="82">C Intermediate Language</option><option value="14">C#</option><option value="13">C++</option><option value="11">CAD DCL</option><option value="12">CAD Lisp</option><option value="81">CFDG</option><option value="99">Clone C</option><option value="100">Clone C++</option><option value="83">CMake</option><option value="84">COBOL</option><option value="15">ColdFusion</option><option value="16">CSS</option><option value="17">D</option><option value="85">DCS</option><option value="18">Delphi</option><option value="19">Diff</option><option value="86">DIV</option><option value="20">DOS</option><option value="87">DOT</option><option value="21">Eiffel</option><option value="88">Email</option><option value="57">Erlang</option><option value="89">FO Language</option><option value="22">Fortran</option><option value="23">FreeBasic</option><option value="24">Game Maker</option><option value="58">Genero</option><option value="90">GetText</option><option value="59">Groovy</option><option value="60">Haskell</option><option value="93">HQ9 Plus</option><option value="25">HTML</option><option value="94">IDL</option><option value="26">INI file</option><option value="61">Inno Script</option><option value="95">INTERCAL</option><option value="96">IO</option><option value="27" selected="selected">Java</option><option value="97">Java 5</option><option value="28">JavaScript</option><option value="98">KiXtart</option><option value="62">Latex</option><option value="63">Linden Scripting</option><option value="29">Lisp</option><option value="101">Loco Basic</option><option value="102">LOL Code</option><option value="103">Lotus Formulas</option><option value="104">Lotus Script</option><option value="105">LScript</option><option value="30">Lua</option><option value="65">M68000 Assembler</option><option value="106">Make</option><option value="31">MatLab</option><option value="64">MatLab</option><option value="66">mIRC</option><option value="107">Modula 3</option><option value="32">MPASM</option><option value="108">MXML</option><option value="33">MySQL</option><option value="1">None</option><option value="34">NullSoft Installer</option><option value="109">Oberon 2</option><option value="35">Objective C</option><option value="110">OCalm Brief</option><option value="36">OCaml</option><option value="91">OpenGL Shading</option><option value="37">Openoffice BASIC</option><option value="111">Oracle 11</option><option value="38">Oracle 8</option><option value="39">Pascal</option><option value="141">PAWN</option><option value="112">Per</option><option value="40">Perl</option><option value="41">PHP</option><option value="113">PHP Brief</option><option value="114">Pic 16</option><option value="115">Pixel Bender</option><option value="68">PL/SQL</option><option value="116">POV-Ray</option><option value="117">Power Shell</option><option value="118">Progress</option><option value="119">Prolog</option><option value="120">Properties</option><option value="121">ProvideX</option><option value="42">Python</option><option value="43">QBasic</option><option value="67">Rails</option><option value="122">REBOL</option><option value="123">REG</option><option value="44">Robots</option><option value="45">Ruby</option><option value="92">Ruby Gnuplot</option><option value="124">SAS</option><option value="125">Scala</option><option value="46">Scheme</option><option value="126">Scilab</option><option value="127">SdlBasic</option><option value="69">Smalltalk</option><option value="47">Smarty</option><option value="48">SQL</option><option value="130">T-SQL</option><option value="49">TCL</option><option value="70">TCL</option><option value="128">Tera Term</option><option value="129">thinBasic</option><option value="131">TypoScript</option><option value="71">unrealScript</option><option value="51">VB.NET</option><option value="132">VeriLog</option><option value="133">VHDL</option><option value="134">VIM</option><option value="135">Visual Pro Log</option><option value="50">VisualBasic</option><option value="52">VisualFoxPro</option><option value="136">WhiteSpace</option><option value="137">WHOIS</option><option value="138">Win Batch</option><option value="53">XML</option><option value="139">Xorg Config</option><option value="140">XPP</option><option value="72">Z80 Assembler</option>
				</select>
			</div>
		</div>
		<div class="form_frame">
			<div class="form_left">
				Post expiration:
			</div>
			<div class="form_right">
				<select class="post_select" name="paste_expire_date"><option value="N">Never</option><option value="10M">10 Minutes</option><option value="1H">1 Hour</option><option value="1D">1 Day</option><option value="1M">1 Month</option></select>
			</div>
		</div>
		<div class="form_frame">
			<div class="form_left">
				Post exposure:
			</div>
			<div class="form_right">
				<select class="post_select" name="paste_private"><option value="0">Public</option><option value="1">Private</option></select>
			</div>
		</div>						
		<div class="form_frame">
			<div class="form_left">
				Name / Title:
			</div>
			<div class="form_right">
				<input type="text" name="paste_name" size="20" value="" class="post_input" /> 
			</div>
		</div>
		<div class="form_frame">
			<div class="form_left">
				Email:
			</div>
			<div class="form_right">
				<input type="text" name="paste_email" size="20" value="" class="post_input" /> 
			</div>
		</div>
		<input class="paste_submit" src="/i/dot.gif" alt="submit" type="image" value="submit" name="submit" />						
	</form>	
	<div class="clear_it"><!-- --></div>
			</div>
			<div id="footer-push"></div>
		</div>
	</div>
 
		<div id="footer">
			 <div id="footer_left">
				&copy; 2010 - pastebin.com | <a href="/">new post</a> | <a href="/api.php">API</a> | <a href="/tools">tools</a> | <a href="/archive/1">archive</a> | <a href="/domains_archive/1">domains archive</a> | <a href="/help">help</a> | <a href="/links_emailer.php">links emailer</a> | <a href="http://www.twitter.com/pastebincom" target="_blank" rel="nofollow">twitter</a>
				<br />
				Friends: <a href="http://www.domainlogr.com" title="Domain valuation" target="_blank">Domainlogr</a> | 
				<a href="http://www.forumlogr.com" title="Find cool forum threads" target="_blank">Forumlogr</a> | 
				<a href="http://www.buzzlogr.com" title="Find cool stories" target="_blank">Buzzlogr</a> | 
				<a href="http://www.softwarelogr.com" title="Free Software Downloads" target="_blank">Softwarelogr</a> | 
				<a href="http://www.startuplogr.com" title="Find new websites to love!" target="_blank">Startuplogr</a> | 
				<a href="http://www.answerz.net" title="Because you want answers!" target="_blank">Answerz.net</a>
			 </div>
			 <div id="footer_right">
 
				<span id="hide">0.06339</span>
				<script type="text/javascript">
				var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
				document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
				</script>
				<script type="text/javascript">
				try {
				var pageTracker = _gat._getTracker("UA-58643-34");
				pageTracker._trackPageview();
				} catch(err) {}</script>
 			 </div>
		</div>
<!--[if lte IE 6]>
			</td>
		</tr>
        <tr>
            <td>
                <img src="/i/dot.gif" width="900" height="1" alt="" />
            <td>
        </tr>
		</table>
<![endif]-->
	</body>
</html>	

http://pastebin.com/pastebin.php?dl=f7c6c8650&amp;.java

 
articles/xstreamjson/start.txt · Last modified: 2009/04/30 22:56 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki