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

답변

10

먼저 sourceCompatibility 설정이 1.7 인 것은 런타임 환경에 대한 의미가 없으므로이 메시지에는 아무런 영향을 미치지 않습니다.

이 순전히있는 문제 "이 클래스는 잭슨이 클래스 초기화 시간에 존재하지"를 - 그리고 그들은이 조합에 존재하지 을한다. 그리고 아마도 Java 7 java.nio.file.Path 클래스를 사용하지 않는다면이 로그에 아무런 문제가 없습니다. 경고 메시지입니다. 이것이이 경고의 내용이기 때문에 Jackson은이 특정 클래스의 serialization/deserialization을 지원합니다.

Android java.nio.* packages에서 볼 때 임의의 API 레벨에는 java.nio.file.* 패키지가 없습니다. 그러면 경고 메시지가 나타나는 이유가 설명됩니다. 그리고 어쨌든 java.nio.file.Path을 사용할 수 없기 때문에 성가신 로깅 메시지 이외의 실제 문제는 아닙니다.

이 메시지가 불편하면 로커 com.fasterxml.jackson.databind.ext.Java7Support의 Java Util 로깅 레벨을 레벨 ERROR으로 설정할 수 있습니다. 그러면 경고 메시지가 더 이상 표시되지 않습니다. 기록 된 메시지에 대한

더 :

잭슨 2.8.x에서는 자바 7 클래스 java.nio.file.Path이 지원은 같은 JAR 파일에서 모든로드와 내장이다. 뭔가 클래스의 마지막 세트에서이 클래스를 제거하면이 실패 할 수 있습니다

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

유일한 방법입니다 : 다른 오류없이로드 할 수있는 경우 하나 개의 클래스는 동적으로 확인합니다. 또는 의존하는 클래스 중 하나가 런타임에서 누락되었습니다.

누락 된 항목이 있으면 기록 된 오류 메시지가 표시됩니다. 그래서 이들 중 하나에 해당하는 :

  • 하나 (7 개) 클래스
  • com.fasterxml.jackson.databind.ext.Java7SupportImpl 그 원인은 잭슨의 잘못이다의

는 어느 쪽도, 그들이 뭔가없는 런타임에없는 런타임에 누락 된 JDK의 더 런타임 환경 (즉, Android API에는 존재하지 않음) 또는 사용하지 않는 Proguard 스트리핑 클래스에 대해

은 참조 :

관련 문제