2016-09-10 57 views
5

我在我的Android應用程序中使用Jackson 2.8.2來反序列化JSON。工作本身的反序列化,但是,我可以看到在應用程序日誌中以下警告:Jackson無法在Android上加載JDK7類型

Unable to load JDK7 types (annotations, java.nio.file.Path): no Java7 support added 

Proguard的是禁用,sourceCompatibility設置爲'1.7'。我如何將這些看似缺失的類型添加到我的構建中?

+0

你檢查這一點 - https://github.com/FasterXML/jackson-databind/blob/master/的src /主/ JAVA/COM/fasterxml /傑克遜/數據綁定/ EXT/Java7Support.java –

回答

10

首先,您的sourceCompatibility設置1.7並不代表關於運行時環境的任何內容,因此它對此消息沒有影響。

這純粹是一個「做這些類傑克遜初始化此類時存在」的問題 - 和他們做存在的某種組合。也許這很好,如果你不使用Java 7 java.nio.file.Path類,那麼你應該沒有問題,這個記錄警告消息。因爲這就是這個警告的意思,傑克遜支持這個特定類的序列化/反序列化。在Android java.nio.* packages

來看,它並沒有java.nio.file.*包在任何 API級別。這就解釋了爲什麼你會看到警告信息。而且由於無論如何你都不能使用java.nio.file.Path,除了惱人的日誌消息之外,這甚至不是真正的問題。

如果此消息很麻煩,您可以隨時將記錄器com.fasterxml.jackson.databind.ext.Java7Support的Java Util Logging級別設置爲級別ERROR。然後您將不再看到這些警告消息。

更多有關記錄的消息:

在傑克遜2.8.x的Java 7類java.nio.file.Path這種支持是從同一個JAR文件中所有負載,並內置。一類動態檢查,如果另一個可以在不加載錯誤:

Class<?> cls = Class.forName("com.fasterxml.jackson.databind.ext.Java7SupportImpl"); 

這可能失敗的唯一方法是,如果事情是從最後一組類剝離這一類。或者,這些類這取決於從運行缺少的一個:

import java.beans.ConstructorProperties; 
import java.beans.Transient; 
import java.nio.file.Path; 

如果其中任何的丟失,那麼將看到記錄的錯誤消息。因此,其中的一個是真實的:

  • 一個或一個以上的JDK 7類缺少在運行時
  • com.fasterxml.jackson.databind.ext.Java7SupportImpl在運行時丟失

無論這些原因是傑克遜的錯,他們是什麼關於您的運行時環境(即它們不存在於Android API中)或它認爲不被使用的Proguard剝離類。

參見:

相關問題