<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4408558805892986016</id><updated>2026-02-17T05:24:25.256-08:00</updated><category term="Development"/><category term="GWT"/><category term="RIA"/><title type='text'>amos&#39; blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.amosbenninga.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4408558805892986016/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.amosbenninga.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Amos Benninga</name><uri>http://www.blogger.com/profile/00977567885782880699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh56uxui9VJSIdNe9-oOOT-OO1fiB6wD-txu_MEgnHkvoPOVP5ucR0ZI-uMe4ILHs5vNOnyLtmKvM82aVEJeRvpIEZWfTGK8I4dtfsc6-FSQJ92WbFpzpvFgfTd7boIQ/s1600/*'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4408558805892986016.post-4158424720550130775</id><published>2012-04-05T15:44:00.001-07:00</published><updated>2012-04-05T15:45:13.601-07:00</updated><title type='text'>Starbucks&amp;#39; Origins</title><content type='html'>&lt;div&gt;&lt;p&gt;Ran into this original coffee mug in Jerusalem. &lt;/p&gt;
&lt;p&gt;I couldn&#39;t decide what they were thinking. Quick ripoff? Subtle joke?&lt;br&gt;
&lt;/p&gt;
&lt;br/&gt;&lt;img src=&#39;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKTCwgnTBbeMdyAeNA4kvUyndwVKgIEiW6aR1mrMVvi3wFOXlV3ONsBPSM1JA0ttQIZMRl5WwYtw-5vPryRAE-x_Xdl2gkdV0gzyOsOKGbVQuvH_Vmb__rxtHOfToQqyCGGHRRqyhkLnv_/&#39; /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.amosbenninga.com/feeds/4158424720550130775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.amosbenninga.com/2012/04/starbucks-origins.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4408558805892986016/posts/default/4158424720550130775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4408558805892986016/posts/default/4158424720550130775'/><link rel='alternate' type='text/html' href='http://blog.amosbenninga.com/2012/04/starbucks-origins.html' title='Starbucks&amp;#39; Origins'/><author><name>Amos Benninga</name><uri>http://www.blogger.com/profile/00977567885782880699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh56uxui9VJSIdNe9-oOOT-OO1fiB6wD-txu_MEgnHkvoPOVP5ucR0ZI-uMe4ILHs5vNOnyLtmKvM82aVEJeRvpIEZWfTGK8I4dtfsc6-FSQJ92WbFpzpvFgfTd7boIQ/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKTCwgnTBbeMdyAeNA4kvUyndwVKgIEiW6aR1mrMVvi3wFOXlV3ONsBPSM1JA0ttQIZMRl5WwYtw-5vPryRAE-x_Xdl2gkdV0gzyOsOKGbVQuvH_Vmb__rxtHOfToQqyCGGHRRqyhkLnv_/s72-c" height="72" width="72"/><thr:total>4</thr:total><georss:featurename>Jerusalem, Jerusalem</georss:featurename><georss:point>31.768318 35.21371</georss:point></entry><entry><id>tag:blogger.com,1999:blog-4408558805892986016.post-8725374357250570038</id><published>2011-11-09T19:30:00.000-08:00</published><updated>2011-11-09T19:30:44.279-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="RIA"/><title type='text'>GWT, JSON and AutoBean</title><content type='html'>On my current project, we&#39;re using Google Web Toolkit (&lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;GWT&lt;/a&gt;) for a rich internet application (RIA).&lt;br /&gt;
&lt;br /&gt;
Starting with GWT version 2.1.x, GWT is offering a new framework called &lt;a href=&quot;http://code.google.com/p/google-web-toolkit/wiki/AutoBean&quot;&gt;AutoBean&lt;/a&gt; for handling bean-like objects. The framework provides automatic binding to editors and saves the developers the hassle of writing a lot of boilerplate code.&lt;br /&gt;
&lt;br /&gt;
AutoBean also provides serialization of beans to JSON which can then be used for communication with the server. The documentation for this framework is, let&#39;s just call it, not very clear. In addition, some of the error handling in the framework generate very cryptic error messages.&lt;br /&gt;
&lt;br /&gt;
Recently, we ran into NullPointerException when we serialize Long values and java.util.Date values. This turns out to be &lt;a href=&quot;http://code.google.com/p/google-web-toolkit/issues/detail?id=6331&quot;&gt;previously reported&lt;/a&gt; as a bug in the system. &lt;a href=&quot;http://code.google.com/p/google-web-toolkit/issues/detail?id=6331&quot;&gt;Issue 6331&lt;/a&gt;. Below you can see a common cryptic stack trace.&lt;br /&gt;
&lt;br /&gt;
The problem is that the AutoBean JSON library is using non-standard format for long values; it looks for them to be quoted like strings, instead of unquoted like regular numbers.&lt;br /&gt;
&lt;br /&gt;
On my current project, we&#39;re using the Jackson library for JSON serialization (&lt;a href=&quot;http://jackson.codehaus.org/&quot;&gt;Jackson JSON&lt;/a&gt;). Jackson is a great library for JSON but is also lacking when it comes to documentation.&lt;br /&gt;
&lt;br /&gt;
In the code below, I show how we override the default Jackson behavior in order to write Long and java.util.Date as strings. This works nicely and if you&#39;re willing to change your JSON library for GWT then you&#39;re in good shape.&lt;br /&gt;
&lt;br /&gt;
In our project, we wanted to make sure that we can also interact with non-GWT clients. We extended our REST library (Jersey) to look at the HTTP header for the type. We request the media type of GWT-JSON for the customized JSON and regular (application_json) for other clients.&lt;br /&gt;
&lt;br /&gt;
Here is the code for modifying Jackson:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
import java.io.IOException;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import org.codehaus.jackson.JsonGenerator;&lt;br /&gt;import org.codehaus.jackson.JsonParser;&lt;br /&gt;import org.codehaus.jackson.JsonProcessingException;&lt;br /&gt;import org.codehaus.jackson.Version;&lt;br /&gt;import org.codehaus.jackson.map.DeserializationContext;&lt;br /&gt;import org.codehaus.jackson.map.JsonDeserializer;&lt;br /&gt;import org.codehaus.jackson.map.JsonSerializer;&lt;br /&gt;import org.codehaus.jackson.map.ObjectMapper;&lt;br /&gt;import org.codehaus.jackson.map.SerializerProvider;&lt;br /&gt;import org.codehaus.jackson.map.module.SimpleModule;&lt;br /&gt;&lt;br /&gt;public class JsonUtils&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static String getString(Object object)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectMapper mapper = createMapper();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String json = mapper.writeValueAsString(object);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return json;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (IOException e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new RuntimeException(&quot;Failed to convert JSON to object&quot;, e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static &lt;t&gt; T fromString(String json, Class&lt;t&gt; clazz)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectMapper mapper = createMapper();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T result = mapper.readValue(json, clazz);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (IOException e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new RuntimeException(&quot;Failed to convert JSON to object:\n&quot; + json, e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static ObjectMapper createMapper()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjectMapper mapper = new ObjectMapper();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SimpleModule module = new SimpleModule(&quot;Ekotrope&quot;, new Version(1, 0, 0, null));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; module.addSerializer(Date.class, new DateSerializer());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; module.addDeserializer(Date.class, new DateDeserializer());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; module.addSerializer(Long.class, new LongSerializer());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; module.addDeserializer(Long.class, new LongDeserializer());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mapper.registerModule(module);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return mapper;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static class DateSerializer extends JsonSerializer&lt;date&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throws IOException, JsonProcessingException&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String str = &quot;&quot; + value.getTime();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jgen.writeString(str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static class DateDeserializer extends JsonDeserializer&lt;date&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Date deserialize(JsonParser jp, DeserializationContext ctxt)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throws IOException, JsonProcessingException&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String str = jp.getText();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Long value = Long.parseLong(str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date date = new Date(value);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return date;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static class LongSerializer extends JsonSerializer&lt;long&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void serialize(Long value, JsonGenerator jgen, SerializerProvider provider)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throws IOException, JsonProcessingException&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String str = &quot;&quot; + value.toString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jgen.writeString(str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static class LongDeserializer extends JsonDeserializer&lt;long&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Long deserialize(JsonParser jp, DeserializationContext ctxt)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throws IOException, JsonProcessingException&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String str = jp.getText();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Long value = Long.parseLong(str);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/long&gt;&lt;/long&gt;&lt;/date&gt;&lt;/date&gt;&lt;/t&gt;&lt;/t&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Cryptic Stacktrace from the bug report:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;[ERROR] Uncaught Exception:
java.lang.NullPointerException
 at com.google.web.bindery.autobean.shared.impl.StringQuoter.tryParseDate(StringQuoter.java:85)
 at com.google.web.bindery.autobean.shared.ValueCodex$Type$6.decode(ValueCodex.java:106)
 at com.google.web.bindery.autobean.shared.ValueCodex$Type$6.decode(ValueCodex.java:1)
 at com.google.web.bindery.autobean.shared.ValueCodex.decode(ValueCodex.java:288)
 at com.google.web.bindery.autobean.shared.impl.AutoBeanCodexImpl$ValueCoder.decode(AutoBeanCodexImpl.java:492)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.getOrReify(AbstractAutoBean.java:241)
 at com.activegrade.shared.data.user.UserAutoBean.access$5(UserAutoBean.java:1)
 at com.activegrade.shared.data.user.UserAutoBean$2.getAccessExpirationDate(UserAutoBean.java:89)
 at com.activegrade.shared.data.user.UserAutoBean$1.getAccessExpirationDate(UserAutoBean.java:26)
 at com.activegrade.shared.data.user.UserAutoBean.traverseProperties(UserAutoBean.java:161)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.traverse(AbstractAutoBean.java:166)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.accept(AbstractAutoBean.java:101)
 at com.google.web.bindery.autobean.shared.impl.AutoBeanCodexImpl.doCoderFor(AutoBeanCodexImpl.java:521)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.getOrReify(AbstractAutoBean.java:239)
 at com.activegrade.shared.data.user.UserAutoBean.access$5(UserAutoBean.java:1)
 at com.activegrade.shared.data.user.UserAutoBean$2.getPrimaryEmailAddress(UserAutoBean.java:86)
 at com.activegrade.shared.data.user.UserAutoBean$1.getPrimaryEmailAddress(UserAutoBean.java:22)
 at com.activegrade.shared.data.user.UserAutoBean.traverseProperties(UserAutoBean.java:152)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.traverse(AbstractAutoBean.java:166)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.accept(AbstractAutoBean.java:101)
 at com.google.web.bindery.autobean.shared.impl.AutoBeanCodexImpl.doCoderFor(AutoBeanCodexImpl.java:521)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.getOrReify(AbstractAutoBean.java:239)
 at com.activegrade.shared.data.user.UserAutoBean.access$5(UserAutoBean.java:1)
 at com.activegrade.shared.data.user.UserAutoBean$2.getDefaultRootOrgId(UserAutoBean.java:74)
 at com.activegrade.shared.data.user.UserAutoBean$1.getDefaultRootOrgId(UserAutoBean.java:6)
 at com.activegrade.shared.data.user.UserAutoBean.traverseProperties(UserAutoBean.java:116)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.traverse(AbstractAutoBean.java:166)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.accept(AbstractAutoBean.java:101)
 at com.google.web.bindery.autobean.shared.impl.AutoBeanCodexImpl.doCoderFor(AutoBeanCodexImpl.java:521)
 at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.getOrReify(AbstractAutoBean.java:239)
 at com.activegrade.shared.data.user.UserAutoBean.access$5(UserAutoBean.java:1)
 at com.activegrade.shared.data.user.UserAutoBean$2.getId(UserAutoBean.java:77)
 at com.activegrade.shared.data.user.UserAutoBean$1.getId(UserAutoBean.java:10)
 at com.activegrade.client.AppState.setLoggedInUser(AppState.java:100)&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.amosbenninga.com/feeds/8725374357250570038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.amosbenninga.com/2011/11/gwt-json-and-autobean.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4408558805892986016/posts/default/8725374357250570038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4408558805892986016/posts/default/8725374357250570038'/><link rel='alternate' type='text/html' href='http://blog.amosbenninga.com/2011/11/gwt-json-and-autobean.html' title='GWT, JSON and AutoBean'/><author><name>Amos Benninga</name><uri>http://www.blogger.com/profile/00977567885782880699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh56uxui9VJSIdNe9-oOOT-OO1fiB6wD-txu_MEgnHkvoPOVP5ucR0ZI-uMe4ILHs5vNOnyLtmKvM82aVEJeRvpIEZWfTGK8I4dtfsc6-FSQJ92WbFpzpvFgfTd7boIQ/s1600/*'/></author><thr:total>0</thr:total><georss:featurename>Cambridge, MA, USA</georss:featurename><georss:point>42.3726399 -71.1096528</georss:point><georss:box>42.3257169 -71.1886168 42.4195629 -71.030688800000007</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4408558805892986016.post-6920836207285543532</id><published>2011-11-09T18:54:00.000-08:00</published><updated>2011-11-09T18:54:46.323-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="GWT"/><category scheme="http://www.blogger.com/atom/ns#" term="RIA"/><title type='text'>Interesting GWT Libraries</title><content type='html'>&lt;br /&gt;
Google Web Toolkit (&lt;a href=&quot;http://code.google.com/webtoolkit/&quot;&gt;GWT&lt;/a&gt;) is a fantastic platform for developing rich internet applications (RIA).&lt;br /&gt;
&lt;br /&gt;
I&#39;ve been looking for different libraries to extend the functionality of GWT and have run into several interesting libraries hosted on Google Project. The following libraries seem to have interesting functionality, high development activity and good user feedback (+1).&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;GWT Query (&lt;a href=&quot;http://code.google.com/p/gwtquery/&quot;&gt;GWTQuery&lt;/a&gt;):&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; GwtQuery a.k.a. GQuery is a jQuery-like API written in GWT, which allows GWT to be used in progressive enhancement scenarios where perhaps GWT widgets are too heavyweight. It can also be used to find and improve your GWT widgets.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GwtQuery is easy to learn for those using jQuery as they share the same api, aditionally gquery adds nice features like type-safe css, compile time optimisations, etc.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;GWT Platform (&lt;a href=&quot;http://code.google.com/p/gwt-platform/&quot;&gt;GWTP&lt;/a&gt;) &lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
A complete model-view-presenter framework to simplify your next GWT project.&lt;/blockquote&gt;
&lt;br /&gt;
GWTP was presented at Google I/O and you can find some slides here: &lt;a href=&quot;http://gwt-platform.googlecode.com/files/GWT.pdf&quot;&gt;Link &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt; Google GIN (&lt;a href=&quot;http://code.google.com/p/google-gin/&quot;&gt;GIN&lt;/a&gt;)&lt;/u&gt;&lt;br /&gt;For those who love Guice for dependency injection; this is the GWT version.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
GIN (GWT INjection) brings automatic dependency injection to Google Web Toolkit client-side code. GIN is built on top of Guice and uses (a subset of) Guice&#39;s binding language. (See GuiceCompatibility for details.) By using GWT&#39;s compile-time Generator support, GIN has little-to-no runtime overhead compared to manual DI.&lt;/blockquote&gt;
&lt;br /&gt;
&lt;u&gt;GWT Upload (&lt;a href=&quot;http://code.google.com/p/gwtupload/&quot;&gt;GWTupload&lt;/a&gt;)&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
GwtUpload &amp;amp; JsUpload: File Upload Progress with pure javascript (Ajax)&lt;/blockquote&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/gwt-test-utils/&quot;&gt;GWT Test Utils&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
a framework to test GWT client side code very easily&lt;/blockquote&gt;
&lt;br /&gt;
GWT Test utils aims to replace the VERY slow GWTTestCase construct for unit testing GWT Widget code.&lt;br /&gt;
 &lt;br /&gt;
&lt;a href=&quot;&quot;&gt; &lt;/a&gt;&lt;a href=&quot;http://code.google.com/p/spiffyui/&quot;&gt;Spiffy UI&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Spiffy UI framework: GWT made simple&lt;/blockquote&gt;
&lt;br /&gt;
Spiffy UI aims to help with the plumbing and the framework required to setup GWT project. See also the main website for &lt;a href=&quot;http://www.spiffyui.org/?landing&quot;&gt;Spiffy UI&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.amosbenninga.com/feeds/6920836207285543532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.amosbenninga.com/2011/11/interesting-gwt-libraries.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4408558805892986016/posts/default/6920836207285543532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4408558805892986016/posts/default/6920836207285543532'/><link rel='alternate' type='text/html' href='http://blog.amosbenninga.com/2011/11/interesting-gwt-libraries.html' title='Interesting GWT Libraries'/><author><name>Amos Benninga</name><uri>http://www.blogger.com/profile/00977567885782880699</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh56uxui9VJSIdNe9-oOOT-OO1fiB6wD-txu_MEgnHkvoPOVP5ucR0ZI-uMe4ILHs5vNOnyLtmKvM82aVEJeRvpIEZWfTGK8I4dtfsc6-FSQJ92WbFpzpvFgfTd7boIQ/s1600/*'/></author><thr:total>0</thr:total><georss:featurename>Cambridge, MA, USA</georss:featurename><georss:point>42.3726399 -71.1096528</georss:point><georss:box>42.3257169 -71.1886168 42.4195629 -71.030688800000007</georss:box></entry></feed>