shau-lok / google-gson

Automatically exported from code.google.com/p/google-gson

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Threading issue in FieldAttributes?

GoogleCodeExporter opened this issue · comments

We're using gson on a high-load system, and when we recently bumped version to 
1.7.1 we're starting having sporadic exceptions as shown in the following 
stacktrace:

java.lang.NullPointerException
        at com.google.gson.FieldAttributes.getAnnotationFromArray(FieldAttributes.java:231)
        at com.google.gson.FieldAttributes.getAnnotation(FieldAttributes.java:150)
        at com.google.gson.SerializedNameAnnotationInterceptingNamingPolicy.translateName(SerializedNameAnnotationInterceptingNamingPolicy.java:45)
        at com.google.gson.JsonSerializationVisitor.addChildAsElement(JsonSerializationVisitor.java:132)
        at com.google.gson.JsonSerializationVisitor.visitFieldUsingCustomHandler(JsonSerializationVisitor.java:206)
        at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
        at com.google.gson.JsonSerializationVisitor.getJsonElementForChild(JsonSerializationVisitor.java:147)
        at com.google.gson.JsonSerializationVisitor.addAsChildOfObject(JsonSerializationVisitor.java:127)
        at com.google.gson.JsonSerializationVisitor.visitObjectField(JsonSerializationVisitor.java:114)
        at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:69)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53)
        at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:643)
        at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:624)
        at com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184)
        at com.google.gson.JsonSerializationVisitor.visitFieldUsingCustomHandler(JsonSerializationVisitor.java:204)
        at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53)
        at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:643)
        at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:624)
        at com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184)
        at com.google.gson.JsonSerializationVisitor.visitFieldUsingCustomHandler(JsonSerializationVisitor.java:204)
        at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53)
        at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:643)
        at com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.serialize(DefaultTypeAdapters.java:624)
        at com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184)
        at com.google.gson.JsonSerializationVisitor.visitFieldUsingCustomHandler(JsonSerializationVisitor.java:204)
        at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62)
        at com.google.gson.BaseMapTypeAdapter.serialize(BaseMapTypeAdapter.java:34)
        at com.google.gson.MapTypeAdapter.serialize(MapTypeAdapter.java:53)
        at com.google.gson.MapTypeAdapter.serialize(MapTypeAdapter.java:33)
        at com.google.gson.JsonSerializationVisitor.findAndInvokeCustomSerializer(JsonSerializationVisitor.java:184)
        at com.google.gson.JsonSerializationVisitor.visitUsingCustomHandler(JsonSerializationVisitor.java:160)
        at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:101)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:62)
        at com.google.gson.JsonSerializationContextDefault.serialize(JsonSerializationContextDefault.java:53)
        at com.google.gson.Gson.toJsonTree(Gson.java:220)
        at com.google.gson.Gson.toJson(Gson.java:260)
...

This doesn't happen all the time, even with the same data. The exception always 
appears on portions of code that are ran in a thread pool, and each worker 
shares the same GsonBuilder.

Original issue reported on code.google.com by aba...@gmail.com on 4 Aug 2011 at 3:19

This is fixed in source. It'll be available in the next GSON release.

Original comment by limpbizkit on 5 Aug 2011 at 10:45

  • Changed state: Started
When is planned to put Gson 1.7.2 at the market?
The Roadmap states that it was intended to July 2011.

Original comment by Ricardo....@gmail.com on 24 Aug 2011 at 7:32

[deleted comment]
I've been getting exactly the same exception, again since upgrading to 1.7.1.

I'm glad that it is fixed in the next release. Any idea of when that might be?

If this isn't due soon, any chance you could point me at the svn revision where 
the fix was made, so that I can do a custom patch whilst I'm waiting.

Original comment by t.denley on 29 Aug 2011 at 9:21

Since I couldn't wait for a new version of Gson and using an svn snapshot is 
out of the question, I switched to Jackson. Its interface it's pretty similar 
to that of Gson.

Original comment by aba...@gmail.com on 29 Aug 2011 at 11:50

You can grab GSON 1.7.2 source here:
http://code.google.com/p/google-gson/source/browse/tags/gson-1.7.2/

I'll talk to our Maven guy to upload a Maven-built binary.

Original comment by limpbizkit on 29 Aug 2011 at 9:51

Thanks limpbiz, a 1.7.2 release binary would be fantastic.

Original comment by t.denley on 30 Aug 2011 at 10:21

any news on that binary?

Original comment by t.denley on 5 Sep 2011 at 10:07

Any news?

Original comment by Ricardo....@gmail.com on 17 Sep 2011 at 1:44

Any updates?

Original comment by matt.hug...@gmail.com on 17 Sep 2011 at 6:37

I am our Maven guy but I dont quite know how to do a release from a subversion 
tagged version. As you probably know, the main Gson tree has digressed 
substantially. If someone can help me figure out how to do 1.7.2, I am happy to 
do so.

Otherwise, we will have to wait for the next release, Gson 2.0. However, that 
is probably a few weeks away.

Original comment by inder123 on 17 Sep 2011 at 9:14

You can try

mvn release:perform 
-DconnectionUrl=scm:svn:https://google-gson.googlecode.com/svn/tags/gson-1.7.2


Original comment by car...@carlossanchez.eu on 30 Sep 2011 at 4:27

btw for more info 
http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.ht
ml

Original comment by car...@carlossanchez.eu on 30 Sep 2011 at 4:29

Thanks for the instructions on releasing a specific version of Gson!
I have now completed the promotion of Gson 1.7.2 to Maven Central. Should sync 
in about an hour. 

Original comment by inder123 on 30 Sep 2011 at 7:07

  • Changed state: Fixed
Fantastic. thanks.

Original comment by t.denley on 30 Sep 2011 at 7:18