java - 多个客户端需要不同的 JAXB 注释

标签 java jaxb

我有一个可以被多个客户端使用的类(即 GUI、外部系统等)。

@XmlRootElement
class A {
    String field = "Hello World";

    public String getField() {
       return field;
    }
}

对于一个客户,我不希望生成的 XML 包含类中的所有详细信息,因此我将要隐藏的详细信息标记为 XmlTransient。

@XmlRootElement
class A {
    String field = "Hello World";

    @XmlTransient
    public String getField() {
       return field;
    }
}

问题在于其他客户端需要查看该数据,而现在它被隐藏了。

如果我有两个需要几乎相同数据的客户,我该如何着手满足要求?我通过扩展 A 并适本地注释以满足每个客户的需求来完成这项工作:

@XmlRootElement
class B extends A {
    @XmlTransient
    public String getField() {
       return super.getField();
    }
}

@XmlRootElement
class C extends A {
    public String getField() {
       return super.getField();
    }
}

这可行但看起来很麻烦。还有其他方法吗?我意识到,在我展示的实例中,我可以使用 XmlJavaAdapter,但在我的实际代码中,我所指的数据可能是复合对象的一部分,而 XmlJavaAdapter 似乎不合适。

希望这一切都有意义!

最佳答案

注意:我是 EclipseLink JAXB (MOXy) JAXB (JSR-222) 的领导和成员专家组。

@skaffman 所述,您可以使用 MOXy 扩展来完成此用例。 MOXy 提供了将映射元数据表示为 XML 的能力。这意味着您可以提供一个作为注释的映射,以及作为 XML 的其他映射。

下面是指向单个对象模型映射到 Google 和 Yahoo 天气服务结果的示例的链接:

GitHub 上也提供了与此示例对应的代码:

关于java - 多个客户端需要不同的 JAXB 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838286/

相关文章:

java网页阅读器

javascript - 如何使用从 Servlet 发送并由 JavaScript 通过 Jquery 接收的数据来更改网页内容?

java - 我想通过解码将 XML 转换为 Java

java - MOXy 中的全局 Java 类型适配器

Java - 如果用户输入无效输入,我将如何返回异常?

java - 当我从 html 表单传递值时,为什么我在 post api 期间收到 'Column cannot be null' 错误

java - 如何以反射方式调用 Java 8 默认方法

java - 使用 JAXB 对集合进行解码

java - Jackson XML Bind Element 基于属性值

java - JAXB 列表作为顶级 XML