2012-03-08 2 views
13

그것의 인스턴스를 만들려고 할 때 다음과 같은 오류를 받고 있어요 'Transacao'XStream을 인자없는 생성자 오류

`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을 사용하고 있습니다. 이 오류가 여전히 발생하는 이유는 무엇입니까?

감사

+1

클래스에 인수가없는 생성자가 있습니까? 생성자를 작성하지 않으면'Object'의 인수가없는 생성자를 사용하지만 생성자를 작성하면 생성자 자체의 인수가없는 생성자를 제공 할 필요가 없습니다. – twain249

+0

@ twain249 클래스에는 실제로 인수가있는 생성자가 있습니다.이 인수를 사용하면 실제로 인수가없는 생성자를 만들어야합니까? 매개 변수를 전달해야합니다. 그렇지 않으면 클래스가 작동하지 않습니다.인수가없는 생성자를 추가하면이 생성자가 호출되어 객체가 불완전 해 NullPointerException이 발생합니다. –

+1

조금 전에 동적 웹 프로젝트에서 비슷한 인수를 사용하여 no-args 생성자를 정의하고 일단 모든 일이 제대로 된 것처럼 보였습니다. 나는 그것이 왜 필요한지 정확하게 알지 못한다. (REST 서비스가 디폴트없이 호출 된 데이터없이 응답을 생성하려고 시도했을 때를 가정한다.)하지만 코드를 추가한다고 말하면 내 코드의 성능에는 영향을 미치지 않는다. 내가 생성자에서 한 것은'super() '입니다. – twain249

답변

5

간단한 대답 : 당신의 내부 클래스의 모든 정적 표시해야합니다, 또는 당신은 전체 예를 사용해야합니다 내부 클래스가 아닙니다.

긴 답변 : Java는 자동으로 몇 가지 작업을 수행하며 가장자리 경우가 발생했습니다 (here 참조). 내부 클래스가 args가없는 생성자를 갖는 것은 (대부분) 불가능합니다. Java는 내부/로컬 클래스의 생성자에 항상 하나의 인수를 추가하며이 인수는 부모 클래스에 대한 참조입니다. 이것은 부모의 모든 변수/메소드에 액세스 할 수 있도록 사용되지만 no-args (코드에서) 생성자조차도 (xstream과 같은 리플렉션을 사용할 때) 하나의 인수를 가짐을 의미합니다. 수정하려면 클래스를 정적으로 표시하여 더 이상 모든 부모 클래스 메서드/변수를 상속하지 않아도됩니다.

+1

+1 긴 답변을 주셔서 감사합니다. 문제를 해결하는 방법보다는 문제가 발생하는 이유를 알기 좋습니다. 또한 내 문제를 해결했습니다. – RyanfaeScotland

+1

JRL이 작동하지 않는다는 이유로 XStream 1.4.4로 업그레이드했지만, 저에게 도움이되었습니다. 감사합니다. @Hamy – praveenb

17

3 솔루션 :

  1. 이 객체 직렬화 구현합니다 (명백한) 인자없는 생성자를 제공합니다.
  2. 업그레이드 1.4.4 *

내가 솔루션 # 2 모든 시간을 사용을 XStream을합니다.

나는이 작동하지 않습니다 1.2.2를 확인 *

및 1.4.4이 작품은

+0

JDK6에서 XStream 1.4.4를 사용하고 있는데 비슷한 문제가 있습니다. 솔루션 1 또는 2를 사용할 수 없습니다. 다른 아이디어는 있습니까? – cadavre

2

나는 1.4.4을 XStream을 위해 업데이트하여 유사한 오류 메시지를 해결 할 수 있었다 사이에서 - 어떤 버전을 시도하지 않은 않습니다 이제 jdk7가 더 우호적입니다. 내 특정 인스턴스 (심지어 oder)에서 편집기에서 실패하고 명령 줄에서 성공합니다. 내 커맨드 라인은 jdk6을 사용하고 있고, 에디터는 jdk7을 사용하고 있습니다. 그림을 이동.

심판 : 더 비 인수 생성자가없는 경우 http://xstream.10960.n7.nabble.com/JAVA-7-compatibility-problem-td7172.html

2

XStream과의 1.3.1 JDK 1.7에서 더 이상 직렬화를 지원하지 않습니다.

해상도 :

1)이 문제를 해결하려면, 당신은 당신이 1.3.1 항아리를 계속하려면 JDK6을 사용해야합니다.

2) JDK7 이상을 사용하여이 문제를 해결하려면 JAR xstream.jar 1.3.1을 최신 버전으로 업그레이드해야합니다.

자세한 내용은 https://jira.atlassian.com/browse/JRA-32823을 참조하십시오.