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

Java jaxb生成类中的继承性

Java jaxb生成类中的继承性,java,xml,jaxb,Java,Xml,Jaxb,我正在使用jaxb自动生成类,以便将xml内容解组到java应用程序中。我注意到结果类有很多冗余。特别是,它们最终将被转移到的模型使用继承来避免冗余。我很想重新编写所有生成的类,以便它们也使用继承。有没有理由不这样做 例如: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "A", propOrder = {"p1","p2","p3"}) Class A { @XmlElement(required = true) p

我正在使用jaxb自动生成类,以便将xml内容解组到java应用程序中。我注意到结果类有很多冗余。特别是,它们最终将被转移到的模型使用继承来避免冗余。我很想重新编写所有生成的类,以便它们也使用继承。有没有理由不这样做

例如:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "A", propOrder = {"p1","p2","p3"})
Class A {
    @XmlElement(required = true)
    property p1;
    @XmlElement(required = true)
    property p2;
    @XmlElement(required = true)
    property p3;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "B", propOrder = {"p1","p2","p4"})
class B {
    @XmlElement(required = true)
    property p1;
    @XmlElement(required = true)
    property p2;
    @XmlElement(required = true)
    property p4;
}
将成为:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Root", propOrder = {"p1","p2"})
@XmlSeeAlso({A.class, B.class})
Class Root {
    @XmlElement(required = true)
    property p1;
    @XmlElement(required = true)
    property p2;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "A", propOrder = {"p3"})
Class A extends Root{
    @XmlElement(required = true)
    property p3;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "B", propOrder = {"p4"})
Class B extends Root{
    @XmlElement(required = true)
    property p4;
}
如果我进行这种转换,@Xml。。。你停止工作了吗?jaxb仍然能够正确解组吗?如果我不如上面所示简化代码,我认为另一种选择是构建另一组中间类,将未经签名的数据转换为我的应用程序模型。有人想评论或改进吗?

简短回答 如果您进行此更改,JAXB将继续工作

你所做的影响 如果从Java类重新生成XML模式,您将看到复杂类型之间的继承。您可能希望将
根类
抽象,这样就不会有人意外地实例化它

你还能做什么 您可以将
Root
类标记为
@xmltransive
。这会将其从类型层次结构中删除,其所有属性都将被视为属于以下子类: