java - 具有默认无参数构造函数时出现解码错误 Jaxb - "Class does not have a default no arg constructor"

标签 java xml constructor jaxb

我正在尝试解码以下 XML,但出现异常:“1 个 IllegalAnnotationExceptions EntityVersionInfo 计数没有无参数默认构造函数。”尽管实际上有一个没有参数的构造函数。我缺少什么?

XML:

<topLevelObject>
  <entityVersionInfo>
        <id>111111</id>
        <version>1</version>
  </entityVersionInfo>
</topLevelObject>

带有注释的 Java 实体:

顶级对象:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "topLevelObject")

public class TopLevelObject {

    @XmlElement(name = "entityVersionInfo")
    private EntityVersionInfo versionInfo;

    public TopLevelObject() {
        //no args constructor
    }

    //GETTERS AND SETTERS HERE...
}

实体版本信息:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "entityVersionInfo")

public class EntityVersionInfo {
    @XmlElement(name = "id")
    private String id;

    @XmlElement(name = "version")
    private String version;

    public EntityVersionInfo() {
        //no arg constructor
    }

    //GETTERS AND SETTERS
}

最佳答案

将其添加到 EntityVersionInfo

@Override
public String toString() {
    return "EntityVersionInfo [id=" + id + ", version=" + version + "]";
}

将其添加到 TopLevelObject

@Override
public String toString() {
    return "TopLevelObject [versionInfo=" + versionInfo + "]";
}

运行这个测试我得到:

    JAXBContext context = JAXBContext.newInstance(TopLevelObject.class);
    Unmarshaller u = context.createUnmarshaller();

    Reader reader = new StringReader(
            "<topLevelObject>\r\n" + 
            "  <entityVersionInfo>\r\n" + 
            "        <id>111111</id>\r\n" + 
            "        <version>1</version>\r\n" + 
            "  </entityVersionInfo>\r\n" + 
            "</topLevelObject>");
    Object o = u.unmarshal(new InputSource(reader ));
    System.out.println(o);

我明白了:

TopLevelObject [versionInfo=EntityVersionInfo [id=111111, version=1]]

所以你的实体代码很好,也许你的项目或其他东西中有多个EntityVersionInfo类,但是实体很好。

关于java - 具有默认无参数构造函数时出现解码错误 Jaxb - "Class does not have a default no arg constructor",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43075299/

相关文章:

java - Java中的数组 "remember"它们的类型如何?

java - 如何将 JSON 字符串转换为带有属性的 xml?

C++ 继承(覆盖构造函数)

用于树莓派的 Java EE 服务器(Spring-MVC)

java - 为什么不能在编译时覆盖而重载可以?

java - 打印一个整数及其从主方法调用它的一半

xml - PL/SQL:如何循环遍历sql extract()结果

java - 在 Java Xerces ("[Fatal Error] :1:1: Content is not allowed in prolog."中禁用日志记录)

c++ - 默认(用户定义)构造函数和带默认参数的构造函数之间的区别?

mvvm - 是否应该通过构造函数、属性或方法调用来初始化 ViewModel