2012-10-08 96 views
2

我一直在寻找这一段时间,但还没有找到任何答案,所以要么我错过了一些显而易见的东西,没有人写过关于它的东西,或者我已经遇到不寻常的问题。我希望这是第一个...JsonMappingException(was java.lang.NullPointerException)

我正在使用第三方库(IDMLlib)从存储在.idml格式的Adobe InDesign文档中提取信息。内容很容易读取并存储在“Idml”类型的对象中,该对象包含我需要的所有内容。现在,我想使用Jackson JSON将此对象发送到Web客户端(浏览器)。

我已经打了2个问题:

1)对象树是全部循环referefences的。如果需要的问题2.

2)我不断收到新我一直使用混合插件与注释

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id") 

所以,现在我已经得到了很多驴友造访就绪解决了这个,序列化时特定于对象的错误。

--Output from testMethodsReturnsSomething-- 
| Failure: testMethods(package.IdmlServiceTests) 
| com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: de.fhcon.idmllib.api.elements.Idml["document"]->de.fhcon.idmllib.api.elements.Document["tags"]->de.fhcon.idmllib.api.elements.tags.Tags["xmltagList"]->java.util.ArrayList[0]->de.fhcon.idmllib.api.elements.tags.XMLTag["tagColor"]->de.fhcon.idmllib.api.elements.typedefs.InDesignUIColorType["greenValue"]) 
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:218) 
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:183) 
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:155) 
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:533) 
... 

我试过编写一个自定义的NullValue/NullKey序列化程序,但是这并没有帮助NullPointerException。

是否有我可以在我的Mix-in中使用的注释来处理这个问题?
或者有另一种方法可以序列化这个对象吗?

+0

唉,什么是真正需要的是回答这个问题堆栈跟踪的部分更接近原始NPE。这部分只是指出抛出一个'RuntimeException'的catch子句。如果不知道这一点,就不可能说出该怎么做才能避免它。 – StaxMan

+2

原来的属性“greenValue”是Double类型的,不是double,所以它也可以有null值。虽然Double可以处理空值,但double不能。我的理论是杰克逊JSON试图以原始数据类型的形式访问它,导致崩溃。仍然不知道该怎么办,虽然... – Steffen

+1

这听起来像是可能的错误处理,所以它是一个很好的文件为杰克逊的错误。虽然大多数基本类型的处理程序将空值强制为默认值(此处为0.0d),但Object Id处理程序可能没有采取适当的预防措施 - 或者可能是setter/field访问触发了此问题。 Java在很多情况下自动解包。 – StaxMan

回答

7

你是对的,Double可以处理null值,而double不可以。 在我的情况下,我的财产属于Long类型,但获取者返回的值为long,而不是Long的值。只要价值不是null,这是可以接受的。但是,当值为null时,杰克逊无法序列化long的值null

只是改变吸气剂返回Long而不是long固定它。 验证您的吸气剂在您的情况下是否返回Double而不是double

PS:我知道这个问题是很老,但因为我有同样的问题,这个问题是在谷歌的答案......第二是公平晚于从来没有