2016-09-10 11 views
5

AndroidアプリでJackson 2.8.2を使用してJSONを逆シリアル化します。自身が作品のデシリアライゼーションは、しかし、私は、アプリケーションログに次の警告を見ることができます:JacksonがJDK7の種類をAndroidにロードできない

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/main/java/com/fasterxml/jackson/databind/ext/Java7Support.java –

答えて

10

最初に、sourceCompatibilityの設定が1.7であることは、実行時環境について何も意味しないため、このメッセージには影響しません。

これは純粋に問題「は、これらのクラスは、ジャクソンは、このクラスを初期化時に存在しない」され - そして、彼らはないを行うには、いくつかの組み合わせで存在します。あなたがJava 7 java.nio.file.Pathクラスを使用していない場合は、このログに問題がないはずです警告メッセージ。これがこの警告の内容なので、Jacksonはこの特定のクラスのシリアライゼーション/デシリアライゼーションをサポートしています。

Android java.nio.* packagesを見ると、のAPIレベルのにはjava.nio.file.*パッケージがありません。それで、警告メッセージが表示される理由を説明します。とにかく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"); 

何かがクラスの最終セットからこのクラスをストリッピングされている場合、これは失敗することができる唯一の方法は次のとおりです。他にはエラーなしでロードできる場合は、1つのクラスは、動的にチェックします。それとも、それが依存するこれらのクラスの一つは、ランタイムから欠落しています。

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

それらのいずれかが不足しているなら、あなたが記録されたエラーメッセージが表示されます。したがって、これらの一つが真である:

JDK 7のクラスはランタイム
  • com.fasterxml.jackson.databind.ext.Java7SupportImplに欠けているの
    • 一つ以上のランタイム

    で不足しているジャクソンのせいであるそれらの要因のどちらも、彼らは何かをしていますあなたの実行時環境について(つまり、Android APIには存在しない)、または使用されていないと思われるProguardのストリッピングクラスについて説明します。

    も参照してください:

  • 関連する問題