У меня есть приложение на базе Android, которое подключается к Google App Engine с помощью служб Rest, приложение отлично работает, пока оно не запутано через ProGuard до выпуска.ProGuard - org.codehaus.jackson.map.JsonMappingException: Не найдено подходящего конструктора для типа
Ошибка сообщается в LogCat при запуске затемненного приложения является:
Unable to convert a [application/json,UTF-8] representation into an object of
class com.enterprisemk.android.bcw.bincollection.WasteCollectionAreasContainer
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found
for type [simple type, class
com.enterprisemk.android.bcw.bincollection.WasteCollectionAreasContainer]:
can not instantiate from JSON object (need to add/enable type information?)
У меня есть следующий в моей Proguard-project.txt файл:
-keepattributes *Annotation*,EnclosingMethod
-keep public class org.w3c.** {public private protected *;}
-dontwarn org.w3c.**
-keep public class org.joda.time.** {public private protected *;}
-dontwarn org.joda.time.**
-keep public class org.restlet.** { *; }
-dontwarn org.restlet.**
-keep public class org.codehaus.** { *; }
-dontwarn org.codehaus.**
-keepattributes Signature
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.**
И мой класс ошибка относится к выглядит следующим образом:
public class WasteCollectionAreasContainer {
public List<WasteCollectionAreas> wasteCollectionAreasList;
public List<WasteCollectionAreas> getWasteCollectionAreasList() {
return wasteCollectionAreasList;
}
public void setWasteCollectionAreasist(List<WasteCollectionAreas> wasteCollectionAreasList) {
this.wasteCollectionAreasList = wasteCollectionAreasList;
}
public WasteCollectionAreasContainer() {
wasteCollectionAreasList = new ArrayList<WasteCollectionAreas>();
}
@JsonCreator
public WasteCollectionAreasContainer(List<WasteCollectionAreas> wasteCollectionAreasList) {
this.wasteCollectionAreasList = wasteCollectionAreasList;
}
}
Чтобы повторить попытку через ProGuard, приложение работает отлично.
Может ли кто-нибудь помочь мне решить эту проблему?
некоторое время progaurd удаляет некоторые классы из пути сборки специально для проектов библиотеки. – Ankit
Похоже, что Proguard, возможно, удалил непараметрированный конструктор по умолчанию для 'WasteCollectionAreasContainer'. У этого класса тоже есть перегруженный конструктор? Это может быть Proguard лишает конструктор по умолчанию *, потому что * есть перегрузка * и * он думает, что конструктор по умолчанию нигде не используется - это может произойти, потому что Proguard не может обнаружить, что Джексон фактически использует/требует конструкторы по умолчанию для POJO во время выполнения. –
MH - это поставило меня в правильном направлении, чтобы исправить проблему - спасибо –