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 。 任何想法为什么这个错误仍在发生?

谢谢

3解决方案:

  1. 提供一个无参数构造函数(显而易见)
  2. 使此对象实现Serializable。
  3. 升级到xstream 1.4.4 *

我一直使用解决方案#2。

*我validation1.2.2不起作用,1.4.4确实有效,没有尝试过任何版本

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

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

如果没有非arg构造函数,xstream 1.3.1不再支持JDK 1.7下的反序列化。

解析度:

1)要解决此问题,如果要继续使用1.3.1 jar,则需要使用JDK6。

2)如果您使用JDK7或更高版本然后解决此问题,则需要将JAR xstream.jar 1.3.1升级到更高版本。

有关更多详细信息,请参阅https://jira.atlassian.com/browse/JRA-32823 。

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

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