2016-09-10 23 views
5

Tôi sử dụng Jackson 2.8.2 trong ứng dụng Android của tôi để deserialize JSON. Các deserialization bản thân công trình, tuy nhiên, tôi có thể nhìn thấy cảnh báo sau đây trong nhật ký ứng dụng:Jackson không thể tải các loại JDK7 trên Android

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

Proguard bị vô hiệu hóa, sourceCompatibility được thiết lập để '1.7'. Làm thế nào tôi có thể thêm các loại dường như bị thiếu để xây dựng của tôi?

+0

Bạn đã kiểm tra này - https://github.com/FasterXML/jackson-databind/blob/master/ src/main/java/com/fastxml/jackson/databind/ext/Java7Support.java –

Trả lời

10

Trước tiên, cài đặt sourceCompatibility của bạn là 1.7 không có nghĩa là bất kỳ điều gì về môi trường thời gian chạy, vì vậy nó không ảnh hưởng đến thông báo này.

Đây hoàn toàn là một "làm các lớp này tồn tại vào thời điểm khởi Jackson lớp này" vấn đề - và họ làm không tồn tại trong một số kết hợp. Và có thể đó là ok, nếu bạn không sử dụng lớp Java 7 java.nio.file.Path thì bạn sẽ không gặp vấn đề với thông báo cảnh báo đã đăng nhập này. Bởi vì đó là những gì cảnh báo này là về, Jackson hỗ trợ serialization/deserialization của lớp học cụ thể này.

Nhìn vào Android java.nio.* packages, không có gói java.nio.file.* ở số bất kỳ mức nào API. Vì vậy, giải thích tại sao bạn thấy thông báo cảnh báo. Và kể từ khi bạn không thể sử dụng java.nio.file.Path anyway, điều này thậm chí không phải là một vấn đề thực sự khác hơn là một tin nhắn đăng nhập gây phiền nhiễu.

Nếu thông báo này khó chịu, bạn luôn có thể đặt mức ghi nhật ký sử dụng Java cho trình ghi nhật ký com.fasterxml.jackson.databind.ext.Java7Support thành cấp ERROR. Sau đó, bạn sẽ không còn thấy các thông báo cảnh báo này nữa.

Thông tin thêm về thông điệp đăng nhập:

Trong Jackson 2.8.x hỗ trợ này cho Java 7 lớp java.nio.file.Path là tất cả tải từ tập tin JAR cùng và là built-in. Một lớp tự động kiểm tra nếu khác có thể tải mà không có lỗi:

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

Cách duy nhất này có thể thất bại là nếu cái gì đó đang tước lớp này từ tập cuối cùng của lớp học. Hoặc một trong các lớp này tùy thuộc vào thiếu thời gian chạy:

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

Nếu thiếu bất kỳ thứ gì trong số đó, bạn sẽ thấy thông báo lỗi đã ghi. Vì vậy, một trong số này là đúng:

  • một hoặc nhiều của JDK 7 lớp học bị thiếu trong thời gian chạy
  • com.fasterxml.jackson.databind.ext.Java7SupportImpl là mất tích trong thời gian chạy

Cả những nguyên nhân là lỗi của Jackson, họ là một cái gì đó về môi trường thời gian chạy của bạn (tức là chúng không tồn tại trong API của Android), hoặc các lớp tước Proguard mà nó không nghĩ là được sử dụng.

Xem thêm:

Các vấn đề liên quan