简体   繁体   中英

Android / Jackson ObjectMapper spamming log with "Unable to resolve java.lang.Class<...> annotation class ..."

I heavily use Jackson to serialize and deserialize data, using classes & POJO in a common library used by a servlet (backend), and a client (android app), and file storage on device for network optimisation purposes. Functionnaly, my code is working as intented.

From backend side nothing suspicious about my log. But in android, every time I use ObjectMapper, both to serialize or deserialize, I get in logcat lignes such as :

2019-12-22 08:09:54.653 fr.bel.app I/ntdb: userRefresh() : Requesting API...
2019-12-22 08:09:54.661 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.StringWrapper> annotation class 42
2019-12-22 08:09:54.661 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.StringWrapper> annotation class 41
2019-12-22 08:09:54.672 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.UserResponse> annotation class 42
2019-12-22 08:09:54.672 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.Response> annotation class 42
2019-12-22 08:09:54.672 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.Response> annotation class 41
2019-12-22 08:09:54.673 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.Response> annotation class 41
2019-12-22 08:09:54.673 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.UserResponse> annotation class 41
2019-12-22 08:09:54.675 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.User> annotation class 42
2019-12-22 08:09:54.677 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.User> annotation class 42
2019-12-22 08:09:54.677 fr.bel.app I/app: Unable to resolve java.lang.Class<fr.bel.User> annotation class 41

Here is an example of class declaration :

package fr.thelium.nottransdb;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class StringWrapper {
    @XmlElement private String string;

    public StringWrapper(String string) {
        this.string = string;
    }

    public StringWrapper() {
        string=null;
    }

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }

    @Override
    public String toString() {
        return string;
    }
}

I also tryed without using @XmlElement => same result (app works, but same messages in log)

Here are example which produce these results :

public void store() {
    /* Storing */
    ObjectMapper objectMapper=new ObjectMapper();
    try {
        File file = new File(TrackingSingleton.getInstance().getMainActivity().getFilesDir(), DEVICE_PERSISTED_DATA_FILENAME);
        objectMapper.writeValue(file, getNotificationList());
        Log.i(TAG,"Successfully persisted device data");
    }
    catch (Exception e) {
        Log.e(TAG,"Failed to persist device data : ",e);
    }
}

Any idea of what I may be doing wrong ? In advance many thanks for any help provided :)

I finally managed to get a clean log by removing both XmlElement and XmlRootElement annotations. (I only tryied removing XmlElement before posting : was not enough).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM