Xstream no-args构造函数错误

时间:2012-03-08 16:43:03

标签: java constructor xstream

我在尝试创建“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 。有什么想法为什么会出现这种错误?

由于

3 个答案:

答案 0 :(得分:17)

3个解决方案:

  1. 提供no-args构造函数(显而易见)
  2. 使此对象实现Serializable。
  3. 升级到xstream 1.4.4 *
  4. 我一直使用解决方案#2。

    *我验证了1.2.2不起作用,1.4.4确实有效,未尝试过任何版本

答案 1 :(得分:5)

简单回答:所有内部类都必须标记为静态,或者您应该使用完整的内部类不是内心阶级。

答案很长:Java会自动执行一些操作,并且遇到了边缘情况(请参阅here)。内部类(大多数情况下)不可能有一个无参数构造函数。 Java总是向内部/本地类中的任何构造函数添加一个参数,该参数是对父类的引用。这是使用的,因此您可以访问父项的所有变量/方法,但这意味着即使是一个no-args(在代码中)构造函数(当使用反射时,像xstream那样)也有一个参数。要修复,请将该类标记为静态,以便它不再需要继承所有父类方法/变量。

答案 2 :(得分:2)

我能够通过更新到xstream 1.4.4来修复类似的错误消息 现在它更友好了jdk7。在我的特定实例(甚至是odder)中,它将在编辑器中失败,并在命令行上成功。原来我的命令行是使用jdk6,编辑器正在使用jdk7。去图。

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