我在尝试创建“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 。有什么想法为什么会出现这种错误?
由于
答案 0 :(得分:17)
3个解决方案:
我一直使用解决方案#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