2012-10-08 127 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:我知道這個問題是很老,但因爲我有同樣的問題,這個問題是在谷歌的答案......第二是公平晚於從來沒有