Подтвердить что ты не робот

Ошибка конструктора Xstream no-args

Я получаю следующую ошибку, когда пытается создать экземпляр "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. Любые идеи, почему эта ошибка все еще происходит?

Спасибо

4b9b3361

Ответ 1

3 решения:

  • Предоставить конструктор no-args (очевидно)
  • Сделать этот объект реализацией Serializable.
  • Обновление до xstream 1.4.4 *

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

Разрешение:

1) Чтобы устранить эту проблему, вам нужно использовать JDK6, если вы хотите продолжить использование флага 1.3.1.

2) Если вы используете JDK7 или более позднюю версию, чтобы решить эту проблему, вам необходимо обновить JAR xstream.jar 1.3.1 до более поздней версии.

Подробнее см. https://jira.atlassian.com/browse/JRA-32823.