2

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

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

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

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

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

4

1 回答 1

2

注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2 (JSR-222)专家组的成员。

为了支持对数据的不同视图的概念,我建议使用不同的实例JAXBContext来表示每个映射:BRIEF、SUMMARY、FULL。MOXy 允许您通过利用其外部映射文档将多个映射应用于域模型。

策略

  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从多个映射文档中引导 a。

可扩展模型

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

于 2012-03-30T14:08:56.190 回答