Ошибка конструктора без аргументов Xstream - PullRequest
13 голосов
/ 08 марта 2012

При попытке создать экземпляр Transacao я получаю следующую ошибку

`Error: Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor `

---- Debugging information ----

message : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor 

cause-exception : com.thoughtworks.xstream.converters.reflection.ObjectAccessException 

cause-message : Cannot construct br.com.cbmp.ecommerce.resposta.Transacao as it does not have a no-args constructor `

class : br.com.cbmp.ecommerce.resposta.Transacao 

required-type : br.com.cbmp.ecommerce.resposta.Transacao 

path : /transacao

Я знаю, что есть ошибка в XStream 1.3.1 и JDK7, но в настоящее время я использую XStream 1.3.1 и JDK6 . Есть идеи, почему эта ошибка все еще происходит?

Спасибо

Ответы [ 4 ]

17 голосов
/ 29 октября 2012

3 решения:

  1. Предоставить конструктор без аргументов (очевидно)
  2. Сделать этот объект реализующим Serializable.
  3. Обновление до xstream 1.4.4 *

Я все время пользуюсь решением № 2.

* Я проверил, что 1.2.2 не работает, а 1.4.4 работает, не пробовал никаких промежуточных версий

5 голосов
/ 01 октября 2012

Простой ответ: все ваши внутренние классы должны быть помечены как статические, или вы должны использовать полный, например. не внутренние классы.

Длинный ответ: Java делает несколько вещей автоматически, и вы столкнулись с крайним случаем (см. здесь ). Для внутреннего класса (в основном) невозможно иметь конструктор без аргументов. Java всегда добавляет один аргумент к любым конструкторам во внутреннем / локальном классе, и этот аргумент является ссылкой на родительский класс. Это используется, чтобы вы могли получить доступ ко всем переменным / методам родительского объекта, но это означает, что даже конструктор без аргументов (в коде) имеет (при использовании отражения, как это делает xstream) один аргумент. Чтобы исправить, пометьте класс как статический, чтобы он больше не требовал наследования всех методов / переменных родительского класса.

3 голосов
/ 11 сентября 2015

xstream 1.3.1 больше не поддерживает десериализацию в JDK 1.7, если нет не-arg конструктора.

Разрешение:

1) Чтобы решить эту проблему, вам нужно использовать JDK6, если вы хотите продолжить использовать 1.3.1 банку.позже, чтобы решить эту проблему, необходимо обновить JAR xstream.jar 1.3.1 до более поздней версии.

Для получения более подробной информации, пожалуйста, обратитесь https://jira.atlassian.com/browse/JRA-32823.

2 голосов
/ 24 апреля 2013

Мне удалось исправить подобное сообщение об ошибке, обновив до xstream 1.4.4 Теперь он более дружественный по отношению к jdk7.В моем конкретном случае (даже странный) это не удалось бы в редакторе, и успешно в командной строке.Оказывается, моя командная строка использовала jdk6, редактор использовал jdk7.Иди на цифру.

ref: http://xstream.10960.n7.nabble.com/JAVA-7-compatibility-problem-td7172.html

...