Java JAXB 如何将 XmlElements 重新定义为现有变量

标签 java jaxb

当使用 jaxb 解码时,我在类 A 中有一些东西:

public class A {
    @XmlElements( { //
    @XmlElement(name = "g", type = A.class),
        @XmlElement(name = "x", type = X.class), 
        @XmlElement(name = "y", type = Y.class),        
    })
    List<XXX> children;
}

也就是说,我有一个列表,children,由X:s和Y:s组成

现在我的问题是:我想继承 A,我想 重新定义“XmlElements”列表并将其绑定(bind)到相同的变量“children”, 喜欢:

public class B extends A {
    @XmlElements( { //
    @XmlElement(name = "g", type = B.class),
        @XmlElement(name = "x", type = X.class), 
        @XmlElement(name = "y", type = Y.class), 
        @XmlElement(name = "z", type = Z.class),        
    })
    List<XXX> children;
}

上述问题有两个方面:

  1. 我创建了一个新的变量children,我想引用类A中的变量。

  2. 我想避免重新指定“x”和“y”,因为它们已在“A”中指定。

是否有一些好的模式可以实现这一点?

或者关于如何构建这样的东西的一些指针/文章或其他信息?

最佳答案

无法避免重新声明注释,但是您可以将注释从字段移到 getter 方法,只要您使用 @XmlAccessorType 告诉 JAXB 寻找公共(public) getter 方法而不是字段的注释。

因此您可以使用新的注释集覆盖 B 类中的 getChildren():

@XmlAccessorType(PROPERTY)
public class A {
    private List<XXX> children;

    @XmlElements( { //
    @XmlElement(name = "g", type = A.class),
        @XmlElement(name = "x", type = X.class), 
        @XmlElement(name = "y", type = Y.class),        
    })
    public List<XXX> getChildren() {
       return children;
    }

    public void setChildren(List<XXX> children) {
       this.children = children;
    }
}

@XmlAccessorType(PROPERTY)
public class B extends A {
    @XmlElements( { //
    @XmlElement(name = "g", type = B.class),
        @XmlElement(name = "x", type = X.class), 
        @XmlElement(name = "y", type = Y.class), 
        @XmlElement(name = "z", type = Z.class),        
    })
    public List<XXX> getChildren() {
       return super.getChildren();
    }
}

我不确定 JAXB 将如何处理覆盖的 getChildren() 方法。希望它会采用来自 B 的注释,但它可能会混淆。

试试看。

关于Java JAXB 如何将 XmlElements 重新定义为现有变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2369348/

相关文章:

java - 清理 finalize() 或 finally() 中的代码?

java - 在 Jaxb 中编码 map 时出现问题

java - 编码期间未设置 JAXB 固定属性

Java 如何使用 JAXB 注释在 XML 中添加子元素

java - RichPresence 不再与 JDA 配合使用

java - Shell 脚本未从 Java 代码运行 R (Rhipe) 程序

java - Spring boot资源文件夹中访问xml的问题

spring-mvc - 将 Jaxb2Marshaller 与具有相同 @XmlRootElement 名称的多个类一起使用

java - 在 Node js 中通过 AES/GCM/NoPadding 算法使用 key 和 iv 加密有效负载并在 java 中解密

java - Apache 点燃: TTL