Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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_Inheritance_Jaxb - Fatal编程技术网

Java JAXB编组子类继承

Java JAXB编组子类继承,java,inheritance,jaxb,Java,Inheritance,Jaxb,我有一个对象(部门),它将是根元素。它有一个聚合对象(Employee),它有两个专业(经理和工厂工人)。如果我将Employee设置为其中一个专用对象,则只编组Employee对象属性。如果有任何提示,我将不胜感激 e、 g 仅用于显示编组的代码片段 Deparment department = new Department(); FactoryWorker factoryWorker = new FactoryWorker(); factoryWorker.setId(999); facto

我有一个对象(部门),它将是根元素。它有一个聚合对象(Employee),它有两个专业(经理和工厂工人)。如果我将Employee设置为其中一个专用对象,则只编组Employee对象属性。如果有任何提示,我将不胜感激

e、 g

仅用于显示编组的代码片段

Deparment department = new Department();
FactoryWorker factoryWorker = new FactoryWorker();
factoryWorker.setId(999);
factoryWorker.setWorksNights(true);

JAXBContext jaxBContext = JAXBContext.newInstance(Department.class);
Marshaller jaxbMarshaller = jaxBContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(department, System.out);
JAXB输出:工厂工人的专业属性不存在。只是父员工中的值

<department>
   <employee>
      <id>999</id>
    </employee>
</department>

999

您需要这样做:

@XmlRootElement(name="Department")
class Department {
    public Department() {}
    @XmlElements({
        @XmlElement(name="Manager", type=Manager.class),
        @XmlElement(name="FactoryWorker", type=FactoryWorker.class)
    })
    private Employee employee;
    public void setEmployee(Employee val) {this.employee = val;}
}
这将输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Department>
    <FactoryWorker>
        <id>999</id>
        <worksNights>true</worksNights>
    </FactoryWorker>
</Department>

999
真的

演示:

粘贴的代码中有太多的打字错误。徒手画代码只是简单的父/子结构的代表,带有标准的简单getter和setter。我已经更新了,谢谢你。太好了,欢迎你;为了在代码中保持谨慎,您可能希望在JAXBContext.newInstance()调用中添加子类作为附加参数。我记得(不确定)在从带注释的类生成模式时,我必须这样做。谢谢你的回答,我也面临同样的问题。现在我需要解组这个xml,但是我得到了一个异常,比如com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:1 IllegalAnnotationExceptions类的计数有两个同名属性“Person”@sumit kumar可能最好问一个关于您的问题的新问题,这样您就可以显示代码和完整的堆栈跟踪
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Department>
    <FactoryWorker>
        <id>999</id>
        <worksNights>true</worksNights>
    </FactoryWorker>
</Department>