Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解组错误Jaxb-“类没有默认的无参数构造函数”,而有默认的无参数构造函数_Java_Xml_Constructor_Jaxb - Fatal编程技术网

Java 解组错误Jaxb-“类没有默认的无参数构造函数”,而有默认的无参数构造函数

Java 解组错误Jaxb-“类没有默认的无参数构造函数”,而有默认的无参数构造函数,java,xml,constructor,jaxb,Java,Xml,Constructor,Jaxb,我正在尝试解组以下XML,但得到一个异常:1个IllegalAnnotationExceptions计数EntityVersionInfo没有无参数默认构造函数。尽管实际上有一个无参数构造函数。我错过了什么 XML: 111111 1. 带有注释的Java实体: TopLevelObject: @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "topLevelObject") public class TopLevelO

我正在尝试解组以下XML,但得到一个异常:1个IllegalAnnotationExceptions计数EntityVersionInfo没有无参数默认构造函数。尽管实际上有一个无参数构造函数。我错过了什么

XML:

111111 1. 带有注释的Java实体:

TopLevelObject:

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

public class TopLevelObject {

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

    public TopLevelObject() {
        //no args constructor
    }

    //GETTERS AND SETTERS HERE...
}
EntityVersionInfo:

@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);

所以您的实体代码是好的,也许您的项目中有不止一个EntityVersionInfo类或其他类,但实体是好的。

Whelp。。。这很尴尬。原来我的项目中还有一个EntityVersionInfo类。谢谢没什么好羞愧的,有时候显而易见的事情是最难找到的。
TopLevelObject [versionInfo=EntityVersionInfo [id=111111, version=1]]