2012-03-08 75 views
13

我收到以下错误,当它试图创建的实例“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。任何想法为什么这个错误仍然发生?

感谢

+1

您的类是否有非参数构造函数?如果你不写一个构造函数,它使用'Object'中的无参数构造函数,但是如果你编写了一个构造函数,那么它就不需要提供你自己的无参数构造函数。 – twain249 2012-03-08 16:46:08

+0

@ twain249这个类确实有一个带参数的构造函数,这使我想到了这个问题:我真的必须创建一个无参数构造函数吗?我需要传递参数,否则该类将无法工作。如果添加无参数的构造函数,它会调用这个构造函数,并且该对象将不完整,导致NullPointerException – 2012-03-08 17:15:02

+1

我刚刚有一个类似的问题,动态Web项目希望我定义一个无参数构造函数,一旦我做了一切似乎工作。我不完全知道为什么它是必需的(我假设当REST服务试图创建没有数据的响应时,它被默认调用),但据我所知,添加它不会影响我的代码的性能。我在构造函数中所做的所有事情都是调用'super()' – twain249 2012-03-08 17:21:18

回答

5

答案很简单:所有的内部类中必须标明静态的,或者你应该使用全如不是内部类。

龙答:Java那样一些事情自动的,你遇到了一个边缘的情况下(见here)。对于内部类来说(大部分情况下)不可能有一个无参数构造函数。 Java总是向内部/本地类中的任何构造函数添加一个参数,并且该参数是对父类的引用。这用于访问父级的所有变量/方法,但意味着即使是无参数(在代码中)的构造函数(使用反射时,如xstream)也有一个参数。要解决此问题,请将该类标记为静态,以便它不再需要继承所有父类方法/变量。

+1

+1感谢您长时间的回答,很高兴知道事情发生的原因,而不是如何解决它们。也解决了我的问题。 – RyanfaeScotland 2012-12-27 12:37:00

+1

我升级到XStream 1.4.4,因为JRL说没有工作,但是这对我有用,谢谢@Hamy – praveenb 2013-09-25 07:08:04

17

3解决方案:

  1. 提供一个无参数的构造函数(明显)
  2. 使这个对象实现Serializable接口。
  3. 升级到1.4.4 XSTREAM *

我使用的解决方案#2所有的时间。

*我验证1.2.2不工作,不1.4.4工作,还没有试过之间,

+0

我在JDK6中使用XStream 1.4.4,我也有类似的问题。我不能使用解决方案1或2.任何其他想法? – cadavre 2013-08-11 21:08:45

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