java - JAXB/EclipseLink : unmap a type dynamically

标签 java xml jaxb eclipselink moxy

我有一项服务应该能够在不同的详细程度或不同的详细模式下提供“用户配置文件”。

这些用户配置文件在数据库中与 JPA2 同步,一切正常。 使用 MOXy (EclipseLink),我还在 XML 中序列化配置文件,并且这里一切都工作正常。

但是,详细模式(BRIEF、SUMMARY、FULL)是通过 XML 中序列化的用户配置文件中是否存在特定元素来实现的(例如,在使用 Brief 详细模式时不应序列化元素 QueryHistory) )。

简而言之:我想向 JAXBContext 指定某些元素不得序列化,并且我想在运行时指定它。

如果我很好理解的话,MOXy 可扩展模型 - 刷新 http://blog.bdoughan.com/2011/06/moxy-extensible-models-refresh-example.html能够做到这一点,但是这里有人知道实现此功能的更简单的方法吗?

最佳答案

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

为了支持数据的不同 View 的概念,我建议使用不同的 JAXBContext 实例来表示每个映射:BRIEF、SUMMARY、FULL。 MOXy 允许您利用其 external mapping document 将多个映射应用到域模型。 .

策略

  1. 用于映射完整模型的注释并使用 XML 元数据来减少 映射
  2. 用于映射最小模型并使用 XML 元数据的注释 展开映射

示例代码

三个 JAXBContext 实例构建在同一类 (UserProfile) 上,但具有由 MOXy 的外部映射文档控制的不同映射。

JAXBContext briefContext = JAXBContext.newInstance(UserProfile.class);

Map<String, Object> summaryProperties = new HashMap<String, Object>(1);
summaryProperties.put("eclipselink-oxm-xml", "summaryMapping.xml");
JAXBContext summaryContext = JAXBContext.newInstance(new Class[] {UserProfile.class}, summaryProperties);

List<String> fullMappingXMLs = new ArrayList(2);
fullMappingXMLs.add("summaryMapping.xml");
fullMappingXMLs.add("fullMapping.xml");
Map<String, Object> fullProperties = new HashMap<String, Object>(1);
fullProperties.put("eclipselink-oxm-xml", fullMappingXMLs);
JAXBContext fullContext = JAXBContext.newInstance(new Class[] {UserProfile.class}, fullProperties);

下面的示例演示了如何从多个映射文档引导 JAXBContext

可扩展模型

在 MOXy 中扩展映射元数据的功能面向希望在不关闭正在运行的应用程序的情况下更改元数据的开发人员。一个例子是支持在线调查的域模型,需要对其进行增强以支持新问题。

关于java - JAXB/EclipseLink : unmap a type dynamically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9941557/

相关文章:

android - list 中的应用程序标签向我展示 [Google 搜索无法将应用程序编入索引;考虑添加至少一个带有 ACTION-VIEW Intent 过滤器的 Activity ]

java - 解决 xml RESTful 问题的最简单 Jersey 客户端

Java 解码 xml 元素

java - 将列 append 到 QuickFix/J Logs 数据库(自定义 QuickFix/J Logger)

java - Glassfish 3.1.2.2 和重用 Bundle ID

java - 如何订阅内部 Spring Boot/Simple Broker 主题队列?

另一个文件中可能值的 XML 模式枚举

java - Java删除同名文件

SQL获取XML的叶节点

java - JAXB:在特殊值的情况下忽略元素序列化(例如 `null` 或 `Double.NaN` )